📅  最后修改于: 2023-12-03 15:04:02.258000             🧑  作者: Mango
在使用 Pytest 进行测试时,有时会遇到测试失败的情况,导致程序返回非零退出代码。这会给持续集成或其他自动化部署流程带来不便。
Pytest 提供了一种抑制退出代码的机制,在发生测试失败时,仍能返回零退出代码,从而确保流程的顺畅进行。
要抑制 Pytest 的退出代码,需要在命令行中传递一个参数 --exitfirst=no
。这个参数的作用是在测试失败时继续运行测试用例,直到全部测试都运行完成。
示例代码:
pytest --exitfirst=no
假设我们有一个测试文件 test.py
,其中包含一个测试用例 test_divide()
,测试除法的功能。
def test_divide():
assert 1 / 0 == 0.5
运行测试:
$ pytest test.py
================================== test session starts ===================================
platform linux -- Python 3.x.y, pytest-6.x.y, py-1.x.y, pluggy-1.x.y
rootdir: /path/to/project
collected 1 item
test.py F [100%]
======================================== FAILURES ========================================
_____________________________________ test_divide _____________________________________
def test_divide():
> assert 1 / 0 == 0.5
E ZeroDivisionError: division by zero
test.py:2: ZeroDivisionError
=================================== short test summary info ===================================
FAILED test.py::test_divide - ZeroDivisionError: division by zero
===================================== 1 failed in 0.01s =====================================
可以看到,该测试用例失败了,Pytest 返回了非零退出代码。
现在,运行测试,并抑制退出代码:
$ pytest --exitfirst=no test.py
================================== test session starts ===================================
platform linux -- Python 3.x.y, pytest-6.x.y, py-1.x.y, pluggy-1.x.y
rootdir: /path/to/project
collected 1 item
test.py F [100%]
======================================== FAILURES ========================================
_____________________________________ test_divide _____________________________________
def test_divide():
> assert 1 / 0 == 0.5
E ZeroDivisionError: division by zero
test.py:2: ZeroDivisionError
=================================== short test summary info ===================================
FAILED test.py::test_divide - ZeroDivisionError: division by zero
===================================== 1 failed in 0.01s =====================================
可以看到,Pytest 运行完整个测试用例,并返回了零退出代码。
在持续集成或其他自动化部署流程中,抑制 Pytest 的退出代码非常有用。可以确保流程的顺畅进行,同时保持测试的完整性。