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

news2024/9/22 3:48:04

自动化测试用例在执行完成后,我们想要很清楚的查看到测试用例的执行结果,我们可以通过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函数进行介绍了该函数方法的使用和结果展示,此方法主要讲我们的测试用例的一些执行结果或者错误信息如何获取。

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

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1596883.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

若依vue中关于字典的使用

文章目录 字典管理页面列表点击某个字典类型展示具体字典数据修改某一条字典数据 字典的应用一般用于select多选框中代码实现根据字典Dict的value获取Label,类似于通过key获得value 源码解析 字典管理页面 列表 点击某个字典类型展示具体字典数据 修改某一条字典数…

04_UART串口发送数据

1.配置芯片,如果PA9,PA10的UART引脚被占用,会自动进行重映射 2.代码 int main(void) {uint8_t temp[]"test";/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*…

windows的jar包开机自启动【搬代码】

感觉最方便的就是放到启动项目里操作步骤 winR 输入:shell:startup回车或点击确定 3.将自己jar包右键创建快捷方式 4.然后放进去 5.重启电脑,浏览器输入网址,就可以看到重启成功了 另外一个就是放入.exe文件的快捷方式 首先,…

C语言洛谷题目分享(9)奇怪的电梯

目录 1.前言 2.题目:奇怪的电梯 1.题目描述 2.输入格式 3.输出格式 4.输入输出样例 5.说明 6.题解 3.小结 1.前言 哈喽大家好啊,前一段时间小编去备战蓝桥杯所以博客的更新就暂停了几天,今天继续为大家带来题解分享,希望大…

网络管理实验二、SNMP服务与常用的网管命令

1 常用的网管命令 1.1 网络状态监视命令 包括以下命令:Ipconfig、ping、nslookup、dig、host ipconfig 作用:用来显示本机所有网卡的基本信息(IP、掩码、网关、工作状态);用法:ipconfig展示:…

Python的国际化和本地化【第162篇—国际化和本地化】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 随着全球化的发展,多语言支持在软件开发中变得越来越重要。Python作为一种流行的…

软件架构静态演化

1.静态演化需求 软件架构静态演化的需求是广泛存在的,可以归结为两个方面。 (1)设计时演化需求。在架构开发和实现过程中对原有架构进行调整,保证软件实现与架构的一致性以及软件开发过程的顺利进行。 (2)运…

二期 1.3 Spring Cloud Alibaba微服务组件Nacos注册中心介绍

文章目录 一、注册中心有什么用?二、注册中心对比三、Nacos是什么?3.1 Nacos 基本概念3.2 Nacos 主要功能3.3 Nacos 优势一、注册中心有什么用? 谈起微服务架构,总会提到注册中心,它是微服务架构必不可少的组件之一,那么注册中心作用到底是什么? 话说微服务架构下 服务…

Qt---控件的基本属性

文章目录 enabled(控件可用状态)geometry(位置和尺寸)简单恶搞程序 windowIcon(顶层 widget 窗口图标)使用 qrc 机制 windowOpacity(窗口的不透明值)cursor(当鼠标悬停空间上的形状)自定义鼠标图标 toolTip(鼠标悬停时的提示)focusPolicy(控件获取焦点的策略)styleSheet(通过CS…

Navicat连接SQL server出现:[IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序(0)

问题 解决方法 一 找到Navicat的安装路径,然后找到sqlncli_x64.msi文件并安装,安装成功后重启Navicat重新进行连接,看是否成功。 解决方法 二 如果方法一没有找到找到sqlncli_x64.msi 还是Navicat的安装路径,然后找到msodbcsql_64…

【网络编程】Linux网络内核结构以及分布剖析

hello !大家好呀! 欢迎大家来到我的网络编程系列之Linux网络内核结构以及分布剖析,在这篇文章中,你将会学习到在Linux内核中如何实现网络数据的输入和输出的,并且我会给出源码进行剖析,以及手绘UML图来帮助…

实现iOS App代码混淆

简介 在开发iOS应用程序时,保护代码安全是至关重要的。代码混淆是一种常用的技术,可以增加逆向工程的难度,防止他人对代码的篡改和盗用。本文将介绍如何实现iOS App代码混淆的步骤和操作方法。 整体流程 下面是实现iOS App代码混淆的整体流…

Cosmopolitan Libc 工作原理与多平台使用方法教程(x64 Linux / WSL2 / Windows)

⚠️阅读前请注意 本博客适用于Cosmopolitan Libc 3.X版本,不适用于Cosmopolitan Libc 2.X版本。Cosmopolitan Libc 是一个非常年轻的项目,可能存在各种问题。Cosmopolitan Libc 仍处于快速迭代开发之中,本文内容在一定时期内会持续更新。 Co…

xhci 数据结构

xhci 数据结构 xhci 数据结构主要在手册上有详细的定义,本文根据手册进行归纳总结: 重点关注的包括: device contexttrb ringtrb device context设备上下文 设备上下文数据结构由xHC管理,用于向系统软件报告设备配置和状态信息。…

Java反序列化基础-类的动态加载

类加载器&双亲委派 什么是类加载器 类加载器是一个负责加载器类的对象,用于实现类加载的过程中的加载这一步。每个Java类都有一个引用指向加载它的ClassLoader。而数组类是由JVM直接生成的(数组类没有对应的二进制字节流) 类加载器有哪…

Qt 3 QVariant类的使用和实例

QVariant, 类本质为 C联合(Union)数据类型,它可以保存很多Qt 类型的值,包括 QBrush、QColor、QString 等等。也能够存放Qt的容器类型的值。QVariant::StringList 是 Qt定义的一个 QVariant::type 枚举类型的变量,其他常用的枚举类型变量如下表…

《QT实用小工具·二十五》日志重定向输出

1、概述 源码放在文章末尾 日志重定向输出,包含如下功能: 支持动态启动和停止。支持日志存储的目录。支持网络发出打印日志。支持输出日志上下文信息比如所在代码文件、行号、函数名等。支持设置日志文件大小限制,超过则自动分文件&#xf…

FreeBuf 全球网络安全产业投融资观察(3月)

综述 据不完全统计,2024年3月,全球网络安全市场共发生投融资事件53起,其中国内4起,国外49起。 3月全球络安全产业投融资统计表(数据来源:航行资本、36氪) 整体而言,国内4起投融资事…

强化学习-Reinforcement learning | RL

目录 什么是强化学习? 强化学习的应用场景 强化学习的主流算法 强化学习是机器学习的一种学习方式,它跟监督学习、无监督学习是对应的。本文将详细介绍强化学习的基本概念、应用场景和主流的强化学习算法及分类。 什么是强化学习? 强化学习并不是某一种特定的算法,而是…