如何将 Locust 测试结果 api 写入文件
How to write Locust result of test api to file
我通过API,
调用测试
locust -f locustfile.py --host=http://localhost --no-web --hatch-rate=20 --clients=10000
得到结果
Name # reqs # fails Avg Min Max | Median req/s
--------------------------------------------------------------------------------------------------------------------------------------------
POST 8000/queries.json 137 0(0.00%) 5 2 23 | 5 11.00
--------------------------------------------------------------------------------------------------------------------------------------------
Total 708 0(0.00%)
我想把这个结果写入一个文件。谁能帮我解决这个问题?
下面是python
中的代码
@task(1)
def test_topview(self):
post_data_topview = """{ "category": "321", "num": 20, "genderCat" : ["23"] }"""
with self.client.request(method="POST", url="http://192.168.1.107:8001/queries.json", headers= {"Content-Type" : "application/json"}, data = post_data_topview, catch_response = True ) as response:
if not matched(response.content) :
response.failure("No content")
非常感谢。
更新
此 release 添加了带有选项 --csv
的保存 csv 文件。所以你可以 运行 下面的命令将测试结果保存为 foo_requests.csv
和 foo_distribution.csv
locust -f locustfile.py --host=http://localhost --no-web --hatch-rate=20 --clients=10000 --only-summary --csv=foo
对于0.8以下的版本
已经有保存Locust结果的commit,但是还没有合并到Locust。但是,您可以使用 this commit 手动更新它。它正在添加一个新参数 --statsfile=result.log
来保存结果。
那么完整的命令应该是这样的
locust -f locustfile.py --host=http://localhost --no-web --hatch-rate=20 --clients=10000 --only-summary --statsfile=result.log
您可以查看this post更新Locust并查看日志结果。
在 statsfile 选项启用之前的另一个选项是将 stderr 重定向到输出文件,这显然是统计信息记录到的地方:
locust -f locustfile.py --host=http://example.com --no-web --clients=20 --hatch-rate=20 --num-request=1000 --only-summary > locust.log 2>&1
我曾尝试在文件中打印蝗虫统计数据但没有成功,但您可以使用 事件挂钩 来实现:http://docs.locust.io/en/latest/api.html#available-hooks。
您可以向事件添加函数 request_success 和 request_failure,因此每次请求成功或失败时,您的挂钩函数都会被调用,以便将请求数据放入列表或任何你想要的变量。
然后您可以轻松地将数据打印到 csv 文件中,例如
希望对您有所帮助
import locust.events
from locust import HttpLocust, TaskSet
class LocustUser(HttpLocust):
task_set = TaskSet
min_wait = 1000
max_wait = 1000
request_success_stats = [list()]
request_fail_stats = [list()]
def __init__(self):
locust.events.request_success += self.hook_request_success
locust.events.request_failure += self.hook_request_fail
locust.events.quitting += self.hook_locust_quit
def hook_request_success(self, request_type, name, response_time, response_length):
self.request_success_stats.append([name, request_type, response_time])
def hook_request_fail(self, request_type, name, response_time, exception):
self.request_fail_stats.append([name, request_type, response_time, exception])
def hook_locust_quit(self):
self.save_success_stats()
def save_success_stats(self):
import csv
with open('success_req_stats.csv', 'wb') as csv_file:
writer = csv.writer(csv_file)
for value in self.request_success_stats:
writer.writerow(value)
locust -f loustfile.py -c 1 -r 1 -n 100 --host=http://localhost:4000 --no-web --only-summary > ../result/locustTest。日志 2>&1
添加到 2016 年的 Rays 答案。
在当前的蝗虫版本 1.0.3 中,您需要像这样添加事件监听器
events.request_success.add_listener(self.hook_request_success)
而不是使用 +=
我用它来汇总响应并将其写入数据库以供进一步分析
我通过API,
调用测试locust -f locustfile.py --host=http://localhost --no-web --hatch-rate=20 --clients=10000
得到结果
Name # reqs # fails Avg Min Max | Median req/s
--------------------------------------------------------------------------------------------------------------------------------------------
POST 8000/queries.json 137 0(0.00%) 5 2 23 | 5 11.00
--------------------------------------------------------------------------------------------------------------------------------------------
Total 708 0(0.00%)
我想把这个结果写入一个文件。谁能帮我解决这个问题?
下面是python
中的代码@task(1)
def test_topview(self):
post_data_topview = """{ "category": "321", "num": 20, "genderCat" : ["23"] }"""
with self.client.request(method="POST", url="http://192.168.1.107:8001/queries.json", headers= {"Content-Type" : "application/json"}, data = post_data_topview, catch_response = True ) as response:
if not matched(response.content) :
response.failure("No content")
非常感谢。
更新
此 release 添加了带有选项 --csv
的保存 csv 文件。所以你可以 运行 下面的命令将测试结果保存为 foo_requests.csv
和 foo_distribution.csv
locust -f locustfile.py --host=http://localhost --no-web --hatch-rate=20 --clients=10000 --only-summary --csv=foo
对于0.8以下的版本
已经有保存Locust结果的commit,但是还没有合并到Locust。但是,您可以使用 this commit 手动更新它。它正在添加一个新参数 --statsfile=result.log
来保存结果。
那么完整的命令应该是这样的
locust -f locustfile.py --host=http://localhost --no-web --hatch-rate=20 --clients=10000 --only-summary --statsfile=result.log
您可以查看this post更新Locust并查看日志结果。
在 statsfile 选项启用之前的另一个选项是将 stderr 重定向到输出文件,这显然是统计信息记录到的地方:
locust -f locustfile.py --host=http://example.com --no-web --clients=20 --hatch-rate=20 --num-request=1000 --only-summary > locust.log 2>&1
我曾尝试在文件中打印蝗虫统计数据但没有成功,但您可以使用 事件挂钩 来实现:http://docs.locust.io/en/latest/api.html#available-hooks。
您可以向事件添加函数 request_success 和 request_failure,因此每次请求成功或失败时,您的挂钩函数都会被调用,以便将请求数据放入列表或任何你想要的变量。
然后您可以轻松地将数据打印到 csv 文件中,例如
希望对您有所帮助
import locust.events
from locust import HttpLocust, TaskSet
class LocustUser(HttpLocust):
task_set = TaskSet
min_wait = 1000
max_wait = 1000
request_success_stats = [list()]
request_fail_stats = [list()]
def __init__(self):
locust.events.request_success += self.hook_request_success
locust.events.request_failure += self.hook_request_fail
locust.events.quitting += self.hook_locust_quit
def hook_request_success(self, request_type, name, response_time, response_length):
self.request_success_stats.append([name, request_type, response_time])
def hook_request_fail(self, request_type, name, response_time, exception):
self.request_fail_stats.append([name, request_type, response_time, exception])
def hook_locust_quit(self):
self.save_success_stats()
def save_success_stats(self):
import csv
with open('success_req_stats.csv', 'wb') as csv_file:
writer = csv.writer(csv_file)
for value in self.request_success_stats:
writer.writerow(value)
locust -f loustfile.py -c 1 -r 1 -n 100 --host=http://localhost:4000 --no-web --only-summary > ../result/locustTest。日志 2>&1
添加到 2016 年的 Rays 答案。 在当前的蝗虫版本 1.0.3 中,您需要像这样添加事件监听器
events.request_success.add_listener(self.hook_request_success)
而不是使用 +=
我用它来汇总响应并将其写入数据库以供进一步分析