pytest之pytest_terminal_summary(terminalreporter, exitstatus, config)

1、pytest官方文档介绍,附图

def pytest_terminal_summary(terminalreporter, exitstatus, config):
    """Add a section to terminal summary reporting.

    :param _pytest.terminal.TerminalReporter terminalreporter: the internal terminal reporter object
    :param int exitstatus: the exit status that will be reported back to the OS
    :param _pytest.config.Config config: pytest config object

    .. versionadded:: 4.2
        The ``config`` parameter.
    """

翻译版本:
def pytest_terminal_summary(terminalreporter, exitstatus, config):
    """
    执行完所有的测试用例后调用此hook函数,可以拿到所有的执行结果(pass, xfail, skip, xpass)
    :param terminalreporter: 内部使用的终端测试报告对象, _pytest.terminal.TerminalReporter
    :param exitstatus: 返回给操作系统的返回码
    :param config: pytest的配置对象
    :return: 
    """

2、此hook函数作用在所有测试用例执行完(与会话相关的报告挂钩)

  terminalreporter是一个TerminalReporter对象,收集了所有测试用例执行结果展示(pass, xfail, skip, xpass等)

  主要用一个属性stats字典类型存放了用例的执行结果。键是测试用例执行的结果状态(warnings,deselected,error,skipped,xfailed,xpassed), 值是由TestReport对象(_pytest.report.py.TestReport)组成的列表

  内部使用_numcollected变量存放了测试用例的数量

3、实战截图

def pytest_terminal_summary(terminalreporter, exitstatus, config):
    """
    执行完所有的测试用例后调用此hook函数,可以拿到所有的执行结果(pass, xfail, skip, xpass)
    :param terminalreporter: 内部使用的终端测试报告对象, _pytest.terminal.TerminalReporter
    :param exitstatus: 返回给操作系统的返回码
    :param config: pytest的配置对象
    :return: None
    """
    print("terminalreporter:", terminalreporter)
    # 测试用例的数量
    print(terminalreporter._numcollected)
    print(terminalreporter.stats)
    print("pass的用例数量:", len(terminalreporter.stats.get("passed", [])))
    print(type(terminalreporter.stats["passed"][1]))

4、执行结果

4
{'': [<TestReport 'testcase/test_getRegionCountry/test_GetRegionCountry.py::test_getRightrequest' when='setup' outcome='passed'>, <TestReport 'testcase/test_getRegionCountry/test_GetRegionCountry.py::test_getRightrequest' when='teardown' outcome='passed'>, <TestReport 'testcase/test_getRegionCountry/test_GetRegionCountry.py::test_postRightrequest' when='setup' outcome='passed'>, <TestReport 'testcase/test_getRegionCountry/test_GetRegionCountry.py::test_postRightrequest' when='teardown' outcome='passed'>, <TestReport 'testcase/test_getRegionCountry/test_GetRegionCountry.py::test_soap11Rightrequest' when='teardown' outcome='passed'>, <TestReport 'testcase/test_getRegionCountry/test_GetRegionCountry.py::test_adc' when='setup' outcome='passed'>, <TestReport 'testcase/test_getRegionCountry/test_GetRegionCountry.py::test_adc' when='teardown' outcome='passed'>], 'passed': [<TestReport 'testcase/test_getRegionCountry/test_GetRegionCountry.py::test_getRightrequest' when='call' outcome='passed'>, <TestReport 'testcase/test_getRegionCountry/test_GetRegionCountry.py::test_postRightrequest' when='call' outcome='passed'>], 'skipped': [<TestReport 'testcase/test_getRegionCountry/test_GetRegionCountry.py::test_soap11Rightrequest' when='setup' outcome='skipped'>], 'xpassed': [<TestReport 'testcase/test_getRegionCountry/test_GetRegionCountry.py::test_adc' when='call' outcome='passed'>]}
pass的用例数量: 2
<class '_pytest.reports.TestReport'>

 

posted @ 2025-11-09 12:33  YouThIU  阅读(5)  评论(0)    收藏  举报