Time will tell.
Pytest 提供了很多钩子方法让我们对测试用例框架进行二次开发,可根据自己的需求进行改造。所以接下来就来学习下pytest_runtest_makereport
这个钩子方法,更清晰地了解用例的执行过程,并获取每个用例的执行结果。
pytest_runtest_makereport
来看下相关源码:
from _pytest import runner
# 对应源码
def pytest_runtest_makereport(item, call):
""" return a :py:class:`_pytest.runner.TestReport` object
for the given :py:class:`pytest.Item` and
:py:class:`_pytest.runner.CallInfo`.
"""
这里item
是测试用例,call
是测试步骤,具体过程如下:
- 先执行 when=’setup’ 返回
setup
的执行结果。 - 然后执行 when=’call’ 返回
call
的执行结果。 - 最后执行 when=’teardown’ 返回
teardown
的执行结果。
1、案例
conftest.py
写pytest_runtest_makereport
内容,打印运行过程和运行结果。
# conftest.py
import pytest
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
print('------------------------------------')
# 获取钩子方法的调用结果
out = yield
print('用例执行结果', out)
# 3. 从钩子方法的调用结果中获取测试报告
report = out.get_result()
print('测试报告:%s' % report)
print('步骤:%s' % report.when)
print('nodeid:%s' % report.nodeid)
print('description:%s' % str(item.function.__doc__))
print(('运行结果: %s' % report.outcome))
test_a.py
写一个简单的用例:
def test_a():
'''用例描述:test_a'''
print("123")
运行结果:
D:\soft\code\pytest_jenkins_demo\demo>pytest -s
=============================