pytest的Hook函数之pytest.hookimpl(hookwrapper=True):获取测试用例结果
装饰器@pytest.hookimpl(hookwrapper=True)
,它的作用和装饰器@pytest.mark.hookwrapper
是一样的
@pytest.hookimpl(hookwrapper=True)装饰的钩子函数,有以下两个作用:
(1)可以获取到测试用例不同执行阶段的结果(setup,call,teardown)
(2)可以获取钩子方法的调用结果(yield返回一个result对象)和调用结果的测试报告(返回一个report对象)
把这代码放在confest.py文件中
@pytest.hookimpl(hookwrapper=True, tryfirst=True) def pytest_runtest_makereport(item, call): #对于给定的测试用例(item)和调用步骤(call),返回一个测试报告对象(_pytest.runner.TestReport) """ 每个测试用例执行后,制作测试报告 :param item:测试用例对象 :param call:测试用例的测试步骤 执行完常规钩子函数返回的report报告有个属性叫report.when 先执行when=’setup’ 返回setup 的执行结果 然后执行when=’call’ 返回call 的执行结果 最后执行when=’teardown’返回teardown 的执行结果 :return: """ # 获取常规钩子方法的调用结果,返回一个result对象 out = yield # print("用例执行结果", out) # # 获取调用结果的测试报告,返回一个report对象, report对象的属性包括when(steup, call, teardown三个值)、nodeid(测试用例的名字)、outcome(用例的执行结果,passed,failed) report = out.get_result() if report.when == "call": # 只获取call的结果(即只获取测试用例的结果) # print("测试报告: %s" % report) # print("步骤: %s" % report.when) # print("nodeid: %s" % report.nodeid) # print("description: %s" % str(item.function.__doc__)) # print("运行结果: %s" % report.outcome) return report.outcome