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



我有一个'on_testrongtart'钩子,它在测试开始前测试一些环境变量的存在:

@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()的想法是正确的,您只需要在master上实现,而不是在worker上。你需要工人将失败传达给主,然后主可以退出,这将停止主和所有工人。

你可以使用其他事件挂钩,比如带有自定义名称的请求,你可以检查失败,report_to_master向发送给master的报告负载中添加一些额外的数据,你可以在上面检查它的存在并退出。这两种方法都可以在master上使用worker_report来触发你的检查并退出。这样做可以帮助您在任何测试输出数据中获得这些步骤,这样您就可以清楚地看到问题所在,而无需进行太多自定义报告工作。

或者,按照同样的思路,但可能更干净、更直接的方法是使用节点之间的通信,让工作人员直接向主机发送消息,并在收到该消息时让主机退出。代码看起来像这样:

@events.init.add_listener
def quit_env_failure_message(environment, **_kwargs):
global ENV
ENV = environment
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()中。

最新更新