繁体   English   中英

如果测试先决条件失败,完全退出 locust 进程的最干净的方法是什么?

[英]What is the cleanest to completely exit a locust process if test prerequisites fail?

我有一个“on_test_start”钩子,可以在测试开始之前测试一些环境变量的存在:

@events.test_start.add_listener
def on_test_start(**_kwargs):
    env_vars_present = check_vars.check_existence_of_env_vars(["VAR1", "VAR2"])
    if not env_vars_present:
        sys.exit()

这行得通,但我不喜欢使用sys.exit()这是退出进程的一种相当肮脏的方式。 有更好的选择吗? 我试过提出一个例外,但这并不能阻止跑步者。 我也试过environment.runner.quit() 这会退出跑步者,但蝗虫进程会继续,直到达到运行时间限制。 如果某些先决条件检查失败,退出该过程的最干净的方法是什么? 谢谢!

你对environment.runner.quit()有正确的想法,你只需要在主人身上发生,而不是工人。 您需要工人将故障传达给主人,然后主人可以退出,这将停止主人和所有工人。

您可以使用其他事件挂钩,例如带有自定义名称的请求,您可以检查失败, report_to_master将一些额外的数据添加到发送给主服务器的报告有效负载中,您可以检查其是否存在并退出。 您将在 master 上使用 worker_report 来触发您的检查并退出的这两个。 这样做可以帮助您在任何测试 output 数据中获得这些步骤,这样您就可以清楚地看到问题所在,而无需进行大量自定义报告工作。

沿着相同的思路,但可能稍微更简洁和更直接的是使用节点之间的通信让工作人员直接向主服务器发送消息,并在收到该消息时让主服务器退出。 代码看起来像这样:

@events.init.add_listener
def quit_env_failure_message(environment, **_kwargs):
    global ENV
    ENV
    if isinstance(environment.runner, MasterRunner):
        environment.runner.register_message('env_failure', quit_on_env_failure)


def quit_on_env_failure(msg, **kwargs):
    ENV.runner.quit()


@events.test_start.add_listener
def on_test_start(**_kwargs):
    env_vars_present = check_vars.check_existence_of_env_vars(["VAR1", "VAR2"])
    if not env_vars_present:
        environment.runner.send_message('env_failure')

这样做,您可能需要做额外的工作才能获得您想要的任何类型的测试结果报告。 那很可能是quit_on_env_failure()中的 go 。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM