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