【问题标题】:mimic test_start test_stop events in distributed mode worker在分布式模式工作者中模仿 test_start test_stop 事件
【发布时间】:2020-05-28 03:05:55
【问题描述】:

在我的 locustfile 中,我定义了 test_on_start 和 test_on_stop 事件来读取测试所需的文件,并在测试结束时在 CSV 中写入详细的统计数据。在分布式模式下运行时,这些事件发生在主节点上,而不是工作节点上。我正在为任务序列中的每个任务组装详细统计信息列表,并在测试结束时在测试停止时编写一个 CSV 文件。我发现这个stackoverflow question 引用了设置和拆卸。我将这些添加到我的class User(HttpUser):,但它们似乎没有被执行。

当测试以分布式模式在工作人员上运行时,我如何模拟这些事件?

有没有更好的办法?

我已经在使用用户 on_start 和 on_stop - 我的 on_start 调用一个函数来从一个列表中选择一个随机用户,该列表是在@events.test_start.add_listener 被触发时创建的,这只发生在主服务器上而不是工作人员上,所以worker 没有任何用户登录数据。

每次调用 User on_start 方法时,打开文件、读取文件、随机选择一个用户并关闭它似乎会适得其反。用户 on_start 还设置了迭代列表 [],这是我存储每个任务的时间的地方。

当任务序列完成时,意味着执行了最后一个任务,我执行self.interrupt(),它运行on_stop,这是我获取迭代时间的地方,并将它们放入第二个列表中,稍后编写使用 CSV 模块。也许在on_stop期间将数据写入CSV会更好

【问题讨论】:

    标签: locust


    【解决方案1】:

    单个用户的设置/拆卸已被删除(因为它们令人困惑,因为它是在该用户类的第一个实例上运行的,当人们在该实例上设置属性时,由于后来的实例没有这一事实而感到非常困惑懂吗)。 Tbh,我希望它们刚刚被类方法取代......

    虽然用户仍然有 on_start/stop 方法,如果你将它与一个标志结合起来,它可能能够做你想做的事。像这样的:

    class MyUser(HttpUser):
        stopped = False
    ... 
        def on_stop(self):
            if not MyUser.stopped:
                 MyUser.stopped = True
                 # write your csv
                 # this doesnt guarantee that all your Users are finished though.
    

    https://docs.locust.io/en/stable/writing-a-locustfile.html#on-start-and-on-stop-methods

    【讨论】:

    • 嗯...我不确定是否有一个平滑的内置解决方案可以满足您的要求。过去,我在 master 上创建了一个数据文件,将它分散到每个工人的一部分,然后 scp:ed 给他们(在设置中或什至在启动 locust 之前),但现在我总是使用数据库来存储我的测试数据。
    猜你喜欢
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多