pytest-xdist启动测试开3个进程但这会导致pytest_terminal_summary也执行3次我希望pytest_terminal_summary只执行以后一次就行顺便获取pytest运行完后的结果如通过多少失败多少跳过多少
可以通过在pytest_terminal_summary函数中记录测试结果,然后在最后一次执行时输出总结。可以使用pytest的hook机制实现这个功能。具体步骤如下:
- 在conftest.py文件中定义一个全局变量,用于记录测试结果:
# conftest.py
results = {
'passed': 0,
'failed': 0,
'skipped': 0
}
- 在pytest_terminal_summary函数中统计测试结果,并更新全局变量:
# conftest.py
def pytest_terminal_summary(terminalreporter, exitstatus, config):
global results
for report in terminalreporter.stats.values():
if report.when == 'call':
if report.passed:
results['passed'] += 1
elif report.failed:
results['failed'] += 1
elif report.skipped:
results['skipped'] += 1
if config.workerinput:
return
# 只在最后一次执行时输出总结
terminalreporter.write_sep('-', 'test result summary')
terminalreporter.write_line(f"passed: {results['passed']}, failed: {results['failed']}, skipped: {results['skipped']}")
- 在pytest_configure函数中判断是否是第一次进入函数,如果是则启动进程并记录开始时间:
# conftest.py
import time
def pytest_configure(config):
# 判断是否是第一次进入函数
if not config.workerinput:
# 记录开始时间
config.start_time = time.time()
# 启动进程
config.option.numprocesses = 3
- 在pytest_unconfigure函数中判断是否是最后一次进入函数,如果是则输出测试结果和总耗时:
# conftest.py
def pytest_unconfigure(config):
# 判断是否是最后一次进入函数
if not config.workerinput:
# 输出测试结果和总耗时
total_time = time.time() - config.start_time
print(f"total time: {total_time:.2f}s")
这样就可以实现在pytest-xdist启动测试时,只在最后一次执行pytest_terminal_summary函数并输出总结,同时记录测试结果和总耗时。
原文地址: https://www.cveoy.top/t/topic/bIQM 著作权归作者所有。请勿转载和采集!