前言
当用例之前完成后,如何判断pytest执行用例的情况是成功还是失败呢?
pytest 提供了一个 exitstatus
退出状态标记用例执行情况,可以在 pytest_terminal_summary 中 捕获pytest执行状态
pytest.main() 执行结果
pytest 从 5.x 版本后,执行 pytest.main() 可以获取到运行退出状态
运行退出状态,就是控制台上打印的最后一句:Process finished with exit code 0
相关的ExitCode 类 在源码中可以看到,是枚举类型
- OK: 0,表示用例全部通过
- TESTS_FAILED:1,表示测试用例有失败的情况
- INTERRUPTED: 2,执行过程被中断
- INTERNAL_ERROR:3,内部错误
- USAGE_ERROR :4,用法错误
- NO_TESTS_COLLECTED: 5, 没有收集到测试用例
class ExitCode(enum.IntEnum):
"""Encodes the valid exit codes by pytest.
Currently users and plugins may supply other exit codes as well.
.. versionadded:: 5.0
"""
#: Tests passed.
OK = 0
#: Tests failed.
TESTS_FAILED = 1
#: pytest was interrupted.
INTERRUPTED = 2
#: An internal error got in the way.
INTERNAL_ERROR = 3
#: pytest was misused.
USAGE_ERROR = 4
#: pytest couldn't find tests.
NO_TESTS_COLLECTED = 5
运行通过返回状态:0
使用示例
import pytest
def test_x3():
print("222222")
if __name__ == '__main__':
res = pytest.main(['test_x3.py'])
print(f"pytest 执行状态:{res}")
命令行执行
python test_x3.py
运行结果:pytest 执行状态:0
用例有运行失败返回状态:1
import pytest
def test_x3():
print("222222")
assert 1 == 2
if __name__ == '__main__':
res = pytest.main(['test_x3.py'])
命令行执行
python test_x3.py
运行结果:pytest 执行状态:1
执行过程中强制中断用例(命令行快捷键ctr+c),返回状态:2
D:code_21_keapi_环境切换test_x3.py:9: KeyboardInterrupt
(to show a full traceback on KeyboardInterrupt use --full-trace)
=============== 1 passed in 2.87s =============
pytest 执行状态:2
用例收集时候就报错了,返回状态:4
collected 0 items
============== no tests ran in 0.03s ===============
ERROR: file not found: test_x3x.py
pytest 执行状态:4
没有收集到测试用例返回状态:5
collected 0 items
======= no tests ran in 0.06s =========
pytest 执行状态:5
pytest_terminal_summary 中获取退出状态
pytest_terminal_summary 钩子中有三个参数
- terminalreporter 报告汇总
- exitstatus
- config
运行用例代码
test_x3.py
def test_x3():
print("222222")
assert 1==2
在conftest中通过 pytest_terminal_summary 钩子获取用例状态
def pytest_terminal_summary(terminalreporter, exitstatus, config): # noqa
"""收集测试结果
terminalreporter: 报告汇总
exitstatus: pytest 退出状态 0:成功
config 全局 Config 对象
"""
print(exitstatus) # ExitCode.TESTS_FAILED
print(f"当前执行的状态:{exitstatus}") # 1
这里使用 pytest 命令去执行
pytest test_x3.py
运行结果
test_x3.py:6: AssertionError
----------------- Captured stdout setup --------------
读取命令行参数或ini test
---------------- Captured stdout call ----------------
222222
ExitCode.TESTS_FAILED
当前执行的状态:1
==============short test summary info ===========
FAILED test_x3.py::test_x3 - assert 1 == 2
======== 1 failed in 0.23s =
通过 exitstatus 获取到用例执行状态,就可以判断用例是否成功
def pytest_terminal_summary(terminalreporter, exitstatus, config): # noqa
"""收集测试结果
terminalreporter: 报告汇总
exitstatus: pytest 退出状态 0:成功
config 全局 Config 对象
"""
print(exitstatus)
print(f"当前执行的状态:{exitstatus}")
if exitstatus == 0:
print("用例执行 100% pass!")
# do something ....
else:
print(f"用例执行失败,失败原因:{exitstatus}")
# do something ....
根据判断结果,成功发送给对应的人,发送失败给对应的人。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: PowerShell系列(一):PowerShell介绍和cmd命令行的区别
什么是Windows系统的命令行环境,之前我们在使用XP、Win7系统的时候,用的最多的就是微软官方自带的cmd命令窗口了,我们通过敲命令行窗口可以实现和操作系统之间的交互。当然随着微软技术的快速发展,到了目前比较流行的Win10操作系统,默认采用的就是Pow…