如何使用 pytest session_finish 获取测试持续时间?

How do I obtain test durations with pytest session_finish?

而不是捕获 --durations=... 的打印输出,我如何通过例如捕获它们pytest_sessionfinish 函数?

我试图通过插件中的字典 self.durations = {} 捕获它们 class:

def pytest_runtest_logreport(self, report):
    self.durations[report.head_line] = report.duration

但从 pytest 本身的报告来看,这些数字似乎太低了。

您可能正在捕获拆解的持续时间(或者我想更具体地说,您正在捕获所有这些,但(通常是微不足道的)拆解正在破坏其他的)——您需要专门过滤 .when == 'call'

class CollectResults:
    def __init__(self) -> None:
        self.times: dict[str, bool] = {}

    def pytest_runtest_logreport(self, report: pytest.TestReport) -> None:
        if report.when == 'call':
            self.results[report.head_line] = report.duration

___

disclaimer: I'm one of the pytest core devs