钩子函数说明
pytest_terminal_summary 是一个Pytest钩子函数,它在测试执行完成后被调用,可以用于汇总测试结果并输出到终端。
要回调 pytest_terminal_summary 钩子函数,需要在Python文件或插件中定义一个同名的函数。函数的参数包括 config (表示当前的Pytest配置对象)和 terminalreporter(表示终端报告器对象)。可以在这个函数中实现自己的逻辑,例如输出一些统计信息、生成HTML报告等。
conftest.py示例:
# content of conftest.py
def pytest_terminal_summary(terminalreporter, exitstatus, config):
# 统计测试结果
passed_count = len(terminalreporter.stats.get('passed', []))
failed_count = len(terminalreporter.stats.get('failed', []))
skipped_count = len(terminalreporter.stats.get('skipped', []))
# 输出测试结果到终端
terminalreporter.write_sep('-', 'test result summary')
terminalreporter.write_line(f'Passed: {passed_count}')
terminalreporter.write_line(f'Failed: {failed_count}')
terminalreporter.write_line(f'Skipped: {skipped_count}')
在上面的代码中,我们定义了一个 pytest_terminal_summary函数,它接受 terminalreporter、exitstatus和config 三个参数。在函数中,我们使用 terminalreporter 对象输出测试结果到终端。运行Pytest时,就会自动回调该函数并输出测试结果。
自定义方法示例:
pytest_terminal_summary函数,并通过pytest_plugins 变量将该文件作为插件加载到Pytest中 这种方式同样可以实现自定义测试结果汇总逻辑。
# content of my_summary.py
def pytest_terminal_summary(terminalreporter, exitstatus, config):
# 统计测试结果
passed_count = len(terminalreporter.stats.get('passed', []))
failed_count = len(terminalreporter.stats.get('failed', []))
skipped_count = len(terminalreporter.stats.get('skipped', []))
# 输出测试结果到终端
terminalreporter.write_sep('-', 'test result summary')
terminalreporter.write_line(f'Passed: {passed_count}')
terminalreporter.write_line(f'Failed: {failed_count}')
terminalreporter.write_line(f'Skipped: {skipped_count}')
在上面的代码中,我们定义了一个“my/_summary.py文件,并在其中定义了 pytest_terminal_summa ry函数。要将该文件作为插件加载到Pytest中,需要在该文件所在目录下创建一个名为
plugin.py 的文件,并在其中添加以 下内容:
pytest_plugins = ['my_summary']
运动pytest时,既可以使用该自定的测试结果汇总逻辑:
$ pytest
=========================== test session starts ===========================
collected 2 items
test_foo.py .. [100%]
--------------------------- test result summary ----------------------------
Passed: 2
Failed: 0
Skipped: 0
============================ 2 passed in 0.01s ============================
值得注意的是,如果你想要将自定义的测试结果汇总逻辑应用于多个测试项目中,可以将 my_summar y·py文件和 plugin.py 文件放在一个独立的Python包中,并在其他测试项目中安装和引用该包即可。