可以通过在pytest_terminal_summary函数中记录测试结果,然后在最后一次执行时输出总结。可以使用pytest的hook机制实现这个功能。具体步骤如下:

  1. 在conftest.py文件中定义一个全局变量,用于记录测试结果:
# conftest.py

results = {
    'passed': 0,
    'failed': 0,
    'skipped': 0
}
  1. 在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']}")
  1. 在pytest_configure函数中判断是否是第一次进入函数,如果是则启动进程并记录开始时间:
# conftest.py

import time

def pytest_configure(config):
    # 判断是否是第一次进入函数
    if not config.workerinput:
        # 记录开始时间
        config.start_time = time.time()
        # 启动进程
        config.option.numprocesses = 3
  1. 在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函数并输出总结,同时记录测试结果和总耗时。

pytest-xdist启动测试开3个进程但这会导致pytest_terminal_summary也执行3次我希望pytest_terminal_summary只执行以后一次就行顺便获取pytest运行完后的结果如通过多少失败多少跳过多少

原文地址: https://www.cveoy.top/t/topic/bIQM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录