PyTest:允许失败率

时间:2017-12-09 08:31:53

标签: python pytest

我目前正在开展一个项目,我们正在运行一大套参数化测试(> 1M)。测试是随机生成的用例,在这个大型测试空间中,预计在每次运行中某些边缘情况都会失败,约为1-2%。是否有Pytest的实现,您可以传递失败率参数,或处理此行为?

1 个答案:

答案 0 :(得分:6)

我想你想要的是修改pytest命令的退出状态,有nonpublic hook,名为pytest_sessionfinish,可以这样做。

考虑您有以下测试:

def test_spam():
    assert 0

def test_ham():
    pass

def test_eggs():
    pass

和conftest.py中的一个钩子:

import pytest, _pytest

ACCEPTABLE_FAILURE_RATE = 50

@pytest.hookimpl()
def pytest_sessionfinish(session, exitstatus):
    if exitstatus != _pytest.main.EXIT_TESTSFAILED:
        return
    failure_rate = (100.0 * session.testsfailed) / session.testscollected
    if failure_rate <= ACCEPTABLE_FAILURE_RATE:
        session.exitstatus = 0

然后调用pytest:

$ pytest --tb=no -q tests.py
F..                                                                                        [100%]
1 failed, 2 passed in 0.06 seconds

此处失败率为1 / 3 == 33.3%,低于50%:

$ echo $?
0

你可以看到pytest的退出状态是0。