📜  pytest 抑制退出代码 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:04:02.258000             🧑  作者: Mango

Pytest 抑制退出代码

在使用 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 的退出代码非常有用。可以确保流程的顺畅进行,同时保持测试的完整性。