长时间运行的 py.test 在第一次失败时停止

Posted

技术标签:

【中文标题】长时间运行的 py.test 在第一次失败时停止【英文标题】:long running py.test stop at first failure 【发布时间】:2016-08-16 16:42:11 【问题描述】:

我正在使用pytest,测试执行应该一直运行到遇到异常为止。如果测试从未遇到异常,它应该继续运行剩下的时间,或者直到我向它发送一个 SIGINT/SIGTERM。

是否有一种编程方式告诉pytest 在第一次失败时停止运行,而不是在命令行中执行此操作?

【问题讨论】:

你能展示你的代码,说明你是如何以编程方式调用 pytest 的吗? 【参考方案1】:
pytest -x           # stop after first failure
pytest --maxfail=2  # stop after two failures

请参阅pytest documentation。

【讨论】:

【参考方案2】:

pytest-x--exitfirst 选项,可在第一个错误或测试失败时立即停止执行测试。

pytest 也有--maxfail=num 选项,其中num 表示停止执行测试所需的错误或失败次数。

pytest -x            # if 1 error or a test fails, test execution stops 
pytest --exitfirst   # equivalent to previous command
pytest --maxfail=2   # if 2 errors or failing tests, test execution stops

【讨论】:

【参考方案3】:

您可以在pytest.ini 文件中使用addopts。它不需要调用任何命令行开关。

# content of pytest.ini
[pytest]
addopts = --maxfail=2  # exit after 2 failures

您也可以在测试运行前设置环境变量PYTEST_ADDOPTS

如果你想在第一次失败后使用python代码退出,你可以使用这个代码:

import pytest

@pytest.fixture(scope='function', autouse=True)
def exit_pytest_first_failure():
    if pytest.TestReport.outcome == 'failed':
        pytest.exit('Exiting pytest')

此代码将exit_pytest_first_failure 夹具应用于所有测试并在第一次失败的情况下退出 pytest。

【讨论】:

以上是关于长时间运行的 py.test 在第一次失败时停止的主要内容,如果未能解决你的问题,请参考以下文章

在 qthread 中停止长时间运行的进程

如何停止长时间运行的 BigQuery 作业?

在qthread中停止长时间运行的进程

如何在测试过程中停止 PHPUnit 但仍然获得失败/报告列表?

如何使用javascript在asp.net上停止正在进行的回发(长时间运行)?

很长时间后运行 gradle 任务失败