如何获得通过,失败和从pytest跳过的测试总数

Mvd*_*vdD 3 python unit-testing pytest

如何在pytest中获取测试会话的统计信息?

我尝试pytest_sessionfinishconftest.py文件中定义,但是我只在该文件中看到testsfailedtestscollected属性。

我还需要知道通过,跳过的测试数量以及花费的总时间。由于pytest在每个会话结束时都会打印该信息,因此我假设有一种编程的方式可以检索该信息。

hoe*_*ing 5

使用pytest_terminal_summary挂钩。统计信息由terminalreporter对象提供。例:

# conftest.py

def pytest_terminal_summary(terminalreporter, exitstatus, config):
    print('passed amount:', len(terminalreporter.stats['passed']))
    print('failed amount:', len(terminalreporter.stats['failed']))
    print('xfailed amount:', len(terminalreporter.stats['xfailed']))
    print('skipped amount:', len(terminalreporter.stats['skipped']))

    duration = time.time() - terminalreporter._sessionstarttime
    print('duration:', duration, 'seconds')
Run Code Online (Sandbox Code Playgroud)

不幸的是,它还_pytest.terminal.TerminalReporter不是公共API的一部分,因此最好直接检查其代码


如果您需要访问另一个挂钩(如)中的统计信息pytest_sessionfinish,请使用插件管理器,例如:

def pytest_sessionfinish(session, exitstatus):
    reporter = session.config.pluginmanager.get_plugin('terminalreporter')
    print('passed amount:', len(reporter.stats['passed']))
    ...
Run Code Online (Sandbox Code Playgroud)

但是,根据您所处的状态,您可能无法获得完整的统计信息/正确的持续时间,因此请注意。