如何将 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.csvfoo_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)

而不是使用 +=

我用它来汇总响应并将其写入数据库以供进一步分析