自动化测试用例在执行完成后,我们想要很清楚的查看到测试用例的执行结果,我们可以通过Pytest中的Hooks来进行获取吗?
其中Pytest中存在多个Hooks的函数,小编今天先简单介绍其中一种,通过pytest_runtest_makereport 获取自动化测试用例的执行情况。
获取用例结果
pytest_runtest_makereport 是Pytest中提供的方法,我们可以通过执行自动化测试用例进行获取其对应的结果信息,此函数需要写入到conftest.py文件中,进行简单的二次开发,将执行结果获取出来:
-
# coding:utf-8
-
import pytest
-
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
-
def pytest_runtest_makereport(item, call):
-
# 获取钩子方法的调用结果
-
out = yield
-
report = out.get_result()
-
print(report.__dict__)
通过执行测试用例后会发现,我们已经将一些测试信息打印出来了。
从上图执行结果中可以发现,可以很清楚的看到获取三次执行结果,其中分别是"setup", "call", "teardown",安静这里可以理解成,分别是执行用例前,执行测试用例,执行测试用例后。
案例展示
小编这边通过一个简单的Pytest可以执行的测试用例,再次将pytest_runtest_makereport进行二次开发,将所有的详细参数进行打印出来。
首先进行创建一个测试用例test_01.py:
-
# test01.py
-
# coding:utf-8
-
def test():
-
'''用例描述'''
-
print('测试用例1')
编写pytest_runtest_makereport函数,进行将测试结果不同信息进行打印出来:
-
# conftest.py 文件
-
# coding:utf-8
-
import pytest
-
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
-
def pytest_runtest_makereport(item, call):
-
# 获取钩子方法的调用结果
-
out = yield
-
# 获取执行结果内容
-
report = out.get_result()
-
print('测试报告:{}' .format(report))
-
print('当前执行步骤:{}' .format(report.when))
-
print('当前执行测试用例:{}' .format(report.nodeid))
-
print('当前用例描述:{}' .format(report.nodeid))
-
print('当前执行结果:{}' .format(report.outcome))
-
print('当前报错信息:{}' .format(report.longrepr))
-
print('执行时间:{}' .format(report.duration))
打开cmd窗口,执行pytest -s test_01.py:
可以通过上面的执行结果看到,我们的前置,用例,后置都是执行成功的,那么如果我们加上setup和teardown来看看执行结果如何?
-
# test01.py
-
# coding:utf-8
-
def setup():
-
print('测试执行开始')
-
def teardown():
-
print('测试执行结束')
-
def test():
-
'''用例描述'''
-
print('测试用例1')
再次通过cmd窗口进行运行程序,通过从下图可以看出没有什么整体变化,因为我们这里的测试用例都是成功的。
前置出现错误
首先小编这里先编写一个前置操作时出现错误,也就是代码中的setup中出现错误信息:
-
# 前置代码出现错误
-
def setup():
-
assert 1 == 0
通过执行发现,我们前置操作执行错误或者失败后,执行完测试用例后,后置内容不再进行执行。
后置出现错误
前置错误已经完成了尝试,那么我们通过后置进行尝试出现错误,看看如何执行顺序的。
-
def teardown():
-
assert 1 == 0
通过运行代码后发现,后置出现错误后,代码继续运行完成。
call出现执行错误
前置和后置(setup和teardown)都已经失败过了,那么接下来就是测试用例环节了,当测试用例通过断言失败后:
-
# test01.py
-
# coding:utf-8
-
def setup():
-
print('测试执行开始')
-
def teardown():
-
print('测试执行结束')
-
def test():
-
'''用例描述'''
-
print('测试用例1')
-
assert 1 == 0
通过执行后会发现,我们已经将测试用例的前置和后置执行完成,并将测试用例的错误信息全部打印出来了。
其他
目前小编这里收集了一些关于pytest_runtest_makereport函数中常用到的其他几种方法。
首先我们需要通过yield方法获取到到测试用例的执行结果集合,然后将此结果进行读取出来存放到一个变量中(report = yield(返回值).get_result()),然后通过report.XXXX获取测试用例执行的结果。
当前执行步骤:report.when
当前执行测试用例:report.nodeid
当前用例描述:report.nodeid
当前执行结果:report.outcome
当前报错信息:report.longrepr
当前报错异常信息:call.excinfo
执行时间:report.duration
总结
小编这里通过一个简单的测试用例进行通过Hooks函数进行介绍了该函数方法的使用和结果展示,此方法主要讲我们的测试用例的一些执行结果或者错误信息如何获取。
当然具体获取到这些结果后,后续我们如何使用,这个就需要通过公司项目进行实践操作了。感谢您的阅读,希望小编的文章会对您有所帮助。
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。