首页 > 解决方案 > 从 python 捕获 pytest 的退出代码

问题描述

运行 python.main() 时,任何失败的单元测试都不会将退出代码 1 返回到调用测试的 python 模块。

在这里说,运行pytest不会引发系统退出,但是有没有办法让失败的单元测试表现相同或允许将代码(1)返回给调用函数?

标签: pythonpytest

解决方案


pytest.main()将返回其退出代码——它是一个ExitCodeenum,从 pytest 5.0.0 开始。如果测试失败,ExitCode.TESTS_FAILED将被退回;如果所有测试都通过,ExitCode.OK将返回。

顺便说一句,这些枚举的整数值实际上是从终端运行时使用的退出代码。这是 的来源site-packages/pytest/__main__.py,如果python -m pytest用于调用测试,则会执行:

import pytest

if __name__ == "__main__":
    raise SystemExit(pytest.main())

py.testpytest)入口点脚本大体相同

import re
import sys
from pytest import main
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

推荐阅读