如何将测试api的Locust结果写入文件

时间:2016-01-10 11:00:15

标签: python python-2.7 locust

我通过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")

非常感谢。

5 个答案:

答案 0 :(得分:7)

<强>更新

使用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的结果但是它还没有合并到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并检查日志结果。

答案 1 :(得分:3)

在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

答案 2 :(得分:3)

我尝试在文件中打印蝗虫统计数据但没有成功,但您可以使用事件挂钩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)

答案 3 :(得分:0)

locust -f loustfile.py -c 1 -r 1 -n 100 --host = http://localhost:4000 --no-web --only-summary&gt; ../result/locustTest.log 2&gt;&amp; 1

答案 4 :(得分:0)

要添加到2016年的Rays答案中。 在当前的蝗虫版本1.0.3中,您需要像这样添加事件监听器

events.request_success.add_listener(self.hook_request_success)

代替使用+ =

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