news 2026/3/2 8:56:28

Pytest小技巧:高效获取自动化测试结果

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Pytest小技巧:高效获取自动化测试结果

自动化测试用例在执行完成后,我们想要很清楚的查看到测试用例的执行结果,我们可以通过Pytest中的Hooks来进行获取吗?

其中Pytest中存在多个Hooks的函数,小编今天先简单介绍其中一种,通过pytest_runtest_makereport 获取自动化测试用例的执行情况。

获取用例结果

pytest_runtest_makereport 是Pytest中提供的方法,我们可以通过执行自动化测试用例进行获取其对应的结果信息,此函数需要写入到conftest.py文件中,进行简单的二次开发,将执行结果获取出来:

  1. # coding:utf-8

  2. import pytest

  3. @pytest.hookimpl(hookwrapper=True, tryfirst=True)

  4. def pytest_runtest_makereport(item, call):

  5. # 获取钩子方法的调用结果

  6. out = yield

  7. report = out.get_result()

  8. print(report.__dict__)

通过执行测试用例后会发现,我们已经将一些测试信息打印出来了。

从上图执行结果中可以发现,可以很清楚的看到获取三次执行结果,其中分别是"setup", "call", "teardown",安静这里可以理解成,分别是执行用例前,执行测试用例,执行测试用例后。

案例展示

小编这边通过一个简单的Pytest可以执行的测试用例,再次将pytest_runtest_makereport进行二次开发,将所有的详细参数进行打印出来。

首先进行创建一个测试用例test_01.py:

  1. # test01.py

  2. # coding:utf-8

  3. def test():

  4. '''用例描述'''

  5. print('测试用例1')

编写pytest_runtest_makereport函数,进行将测试结果不同信息进行打印出来:

  1. # conftest.py 文件

  2. # coding:utf-8

  3. import pytest

  4. @pytest.hookimpl(hookwrapper=True, tryfirst=True)

  5. def pytest_runtest_makereport(item, call):

  6. # 获取钩子方法的调用结果

  7. out = yield

  8. # 获取执行结果内容

  9. report = out.get_result()

  10. print('测试报告:{}' .format(report))

  11. print('当前执行步骤:{}' .format(report.when))

  12. print('当前执行测试用例:{}' .format(report.nodeid))

  13. print('当前用例描述:{}' .format(report.nodeid))

  14. print('当前执行结果:{}' .format(report.outcome))

  15. print('当前报错信息:{}' .format(report.longrepr))

  16. print('执行时间:{}' .format(report.duration))

打开cmd窗口,执行pytest -s test_01.py:

可以通过上面的执行结果看到,我们的前置,用例,后置都是执行成功的,那么如果我们加上setup和teardown来看看执行结果如何?

  1. # test01.py

  2. # coding:utf-8

  3. def setup():

  4. print('测试执行开始')

  5. def teardown():

  6. print('测试执行结束')

  7. def test():

  8. '''用例描述'''

  9. print('测试用例1')

再次通过cmd窗口进行运行程序,通过从下图可以看出没有什么整体变化,因为我们这里的测试用例都是成功的。

前置出现错误

首先小编这里先编写一个前置操作时出现错误,也就是代码中的setup中出现错误信息:

  1. # 前置代码出现错误

  2. def setup():

  3. assert 1 == 0

通过执行发现,我们前置操作执行错误或者失败后,执行完测试用例后,后置内容不再进行执行。

后置出现错误

前置错误已经完成了尝试,那么我们通过后置进行尝试出现错误,看看如何执行顺序的。

  1. def teardown():

  2. assert 1 == 0

通过运行代码后发现,后置出现错误后,代码继续运行完成。

call出现执行错误

前置和后置(setup和teardown)都已经失败过了,那么接下来就是测试用例环节了,当测试用例通过断言失败后:

  1. # test01.py

  2. # coding:utf-8

  3. def setup():

  4. print('测试执行开始')

  5. def teardown():

  6. print('测试执行结束')

  7. def test():

  8. '''用例描述'''

  9. print('测试用例1')

  10. 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函数进行介绍了该函数方法的使用和结果展示,此方法主要讲我们的测试用例的一些执行结果或者错误信息如何获取。

当然具体获取到这些结果后,后续我们如何使用,这个就需要通过公司项目进行实践操作了。感谢您的阅读,希望小编的文章会对您有所帮助。

最后作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些软件测试的学习资料和我花了3个月整理的软件测试自学全栈,这些资料希望能给你前进的路上带来帮助。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/2 0:22:33

AIGC Bar中的API站最新使用全指南(2025/12/12)

目录 总览:这篇“全指南”到底解决什么问题 站点定位:它不是“某一个模型”,而是“模型入口的兼容层” 中转/聚合的本质:你买的是“稳定接入体验”,不是“换皮接口” “OpenAI 兼容”的意义:把迁移成本…

作者头像 李华
网站建设 2026/2/28 15:49:08

10、深入探索Domino服务器的功能与应用

深入探索Domino服务器的功能与应用 1. 引言 Domino服务器具备众多强大功能,Domino 6更是在其基础上有显著提升。本文将详细介绍Domino用户注册、Active Directory同步等功能,以及相关操作步骤。 2. Domino用户注册 在Domino服务器完成安装与配置后,需对用户进行注册,用…

作者头像 李华
网站建设 2026/2/28 5:07:14

HIWIN直线导轨HG/EG系列怎么选?负载与精度参数对比

最近帮客户做选型时,经常遇到问HG和EG系列直线导轨滑块该怎么挑的问题。其实核心就两个点:设备需要承载多大重量?精度要求到什么程度?作为深圳市海威机电有限公司——HIWIN正式授权经销商的技术支持,我结合日常接触的案…

作者头像 李华
网站建设 2026/2/25 19:13:05

收藏!国自然课题中标应该具备哪些基本条件

✅申请人资格1️⃣具体标准:身份与依托单位 说明与依据:必须是依托单位的科学技术人员,或无固定单位但获依托单位同意。2️⃣具体标准:学历与职称 说明与依据:高级职称或博士学位;不具备者可提供两名同领域…

作者头像 李华
网站建设 2026/2/24 7:27:55

解锁“银发族”安心数字生活!

岁岁重阳,今又重阳。当金黄的秋意漫染街巷,我们总想着为长辈送上一份温暖与关怀。可如今数字化浪潮席卷生活,注册登录要记密码、办业务要跑多地、手机里还藏着各种诈骗陷阱,这些 “数字难题” 让不少长辈望而却步。别担心&#xf…

作者头像 李华
网站建设 2026/2/19 23:19:46

Arduino IDE 2.0高效实战指南:如何快速掌握嵌入式开发?

Arduino IDE 2.0高效实战指南:如何快速掌握嵌入式开发? 【免费下载链接】arduino-ide Arduino IDE 2.x 项目地址: https://gitcode.com/gh_mirrors/ar/arduino-ide Arduino IDE 2.0作为一款现代化的开源开发环境,为嵌入式系统和物联网…

作者头像 李华