如何获取pytest中测试会话的统计信息?
我尝试在pytest_sessionfinish
文件中定义conftest.py
,但在此文件中只能看到testsfailed
和testscollected
属性。
我还需要知道通过,跳过的测试数量以及花费的总时间。由于pytest在每个会话结束时都会打印该信息,因此我认为有一种编程方式可以检索该信息。
答案 0 :(得分:3)
使用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')
不幸的是,_pytest.terminal.TerminalReporter
还不是public API的一部分,因此最好直接检查its code。
如果您需要访问pytest_sessionfinish
之类的其他挂钩中的统计信息,请使用插件管理器,例如:
def pytest_sessionfinish(session, exitstatus):
reporter = session.config.pluginmanager.get_plugin('terminalreporter')
print('passed amount:', len(reporter.stats['passed']))
...
但是,根据您所处的状态,您可能无法获得完整的统计信息/正确的持续时间,因此请谨慎操作。