【问题标题】:Access Locust Host attribute - Locust 1.0.0+访问 Locust 主机属性 - Locust 1.0.0+
【发布时间】:2020-08-31 00:02:54
【问题描述】:

我之前曾询问并解决了使用旧版本的locust转储stats的问题,但是在locust 1.0.0中删除了setupteardown方法,现在我无法获取主机(基本网址)。

我希望在请求运行后打印出一些有关请求的信息。按照https://docs.locust.io/en/stable/extending-locust.html 的文档,我在我的顺序任务集中有一个request_success 侦听器 - 下面是一些粗略的示例代码:

class SearchSequentialTest(SequentialTaskSet):

    @task
    def search(self):
        path = '/search/tomatoes'
        headers = {"Content-Type": "application/json",
        unique_identifier = uuid.uuid4()
        data = {
            "name": f"Performance-{unique_identifier}",
        }

        with self.client.post(
                path,
                data=json.dumps(data),
                headers=headers,
                catch_response=True,
        ) as response:
            json_response = json.loads(response.text)
            self.items = json_response['result']['payload'][0]['uuid']

            print(json_response)


    @events.request_success.add_listener
    def my_success_handler(request_type, name, response_time, response_length, **kw):
       print(f"Successfully made a request to: {self.host}/{name}")

但我无法访问 self.host - 如果我删除它,我只会得到一个相对 URL。

如何访问 TaskSet 的事件挂钩中的 base_url?

【问题讨论】:

    标签: python-3.x performance-testing locust


    【解决方案1】:

    如何访问 TaskSet 的事件挂钩中的 base_url?

    您可以通过直接在请求处理程序中访问类变量来做到这一点:

    print(f"Successfully made a request to: {YourUser.host}/{name}")
    

    或者您可以像这样在测试(任务)中使用绝对 URL:

        with self.client.post(
            self.user.host + path,
            ...
    

    然后您将获得请求侦听器的完整网址。

    【讨论】:

    • 感谢您的建议,但是当我将print (self.user.host) 放入my_success_handler 时,我得到` NameError: name 'self' is not defined. if I change the function declaration to def my_success_handler(self, request_type, name, response_time, response_length, **kw):` 并重新运行我得到TypeError: my_success_handler() missing 1 required positional argument: 'self' 我正在尝试以特定格式将统计信息写入文件,这就是我选择成功事件挂钩的原因 - 如果有另一种方法可以实现(和能够打印主机网址)我对此持开放态度。
    • 要么遵循我的第一个建议,要么遵循我的第二个建议,你可以同时做 :) (self.user.host 在你的任务集中可用,但在你的事件处理程序中不可用)
    • 哦,我刚刚注意到,您正在将事件添加到任务集中。实际上,它应该在顶层完成。在您的 TaskSet 中执行它不会有任何区别(它不会让您访问自己)
    • 在顶层是指在HttpUser 类中吗?那似乎也无法访问自我:TypeError: my_success_handler() missing 1 required positional argument: 'self'
    • 感谢您对我的耐心等待!现在开始工作了!衷心感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多