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

自动化测试用例在执行完成后,我们想要很清楚的查看到测试用例的执行结果,我们可以通过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

图片

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

后置出现错误

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

  1. def teardown():

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

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多维时序 | MATLAB实现SSA-CNN-SVM麻雀算法优化卷积神经网络-支持向量机多变量时间序列预测

多维时序 | MATLAB实现SSA-CNN-SVM麻雀算法优化卷积神经网络-支持向量机多变量时间序列预测 目录 多维时序 | MATLAB实现SSA-CNN-SVM麻雀算法优化卷积神经网络-支持向量机多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | MATLAB实现…

unity2d 关闭全局重力

UNITY2D项目默认存在Y轴方向重力,创建俯视角2D场景时可通过以下配置关闭 Edit > Project Settings > Physics 2D > General Settings > Gravity 设置Y0

vue3引入高德地图报错Uncaught Error: Invalid Object: LngLat(NaN, NaN

问题&#xff1a; 原因&#xff1a;容器高度未设置 解决&#xff1a; 地图容器添加高度。 <style scoped> #map {width: 100%;height: 800px; } </style>

本地配置Java支付宝沙箱环境模拟支付并内网穿透远程调试

文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问 前言 在沙箱环境调试支付SDK的时候&#xff0c;往往沙箱环境部署在本地&#xff0c;局限性大&#xff0c;在沙箱环境…

MySQL是如何保证数据不丢失的?

文章目录 前言Buffer Pool 和 DML 的关系DML操作流程加载数据页更新记录 数据持久化方案合适的时机刷盘双写机制日志先行机制日志刷盘机制Redo Log 恢复数据 总结 前言 上篇文章《InnoDB在SQL查询中的关键功能和优化策略》对InnoDB的查询操作和优化事项进行了说明。但是&#…

如何实现免费无限流量云同步笔记软件Obsidian?

目录 前言 如何实现免费无限流量云同步笔记软件Obsidian&#xff1f; 一、简介 软件特色演示&#xff1a; 二、使用免费群晖虚拟机搭建群晖Synology Drive服务&#xff0c;实现局域网同步 1 安装并设置Synology Drive套件 2 局域网内同步文件测试 三、内网穿透群晖Synol…

嵌入式系统复习--ARM指令集(一)

文章目录 上一篇ARM指令集概述ARM寻址方式下一篇 上一篇 嵌入式系统复习–ARM技术概述 ARM指令集概述 ARM指令集是32位的&#xff0c;程序的启动都是从ARM指令集开始。 指令编码 第一操作数 第二操作数 目的操作数 条件影响标志位 不同功能实现的二进制位 指令编码 第…

模型实战(17)之C++ - tensorRT部署yolov8seg实例分割

模型实战(17)之C++ - tensorRT部署yolov8seg实例分割 yolov8是2023年以来最新的集检测、分割、分类、关键点于一身的模型参考官网文档:添加链接描述本文将详细给出C++ - tensorRT部署yolov8seg模型的详细步骤实现效果的话,精度和python环境下差不多,仅推理时间在RTX30~系列…

怎么选,都得是python!

什么编程语言最好&#xff1f; python!python!python! 天下语言千千万&#xff0c;不行咱就换&#xff01; 但是&#xff0c;兜兜转转&#xff0c;到头来发现还得是你——python 最香! 有一说一&#xff0c;为了早日实现财富自由&#xff0c;开篇建议&#xff1a;专业人士还…

IspSrver-DNS

2023年全国网络系统管理赛项真题 模块B-Windows解析 题目 安装DNS服务器,根据题目创建必要正向区域和反向区域的DNS解析。把当前机器作为互联网根域服务器,创建test1.com~test100.com,并在所有正向区域中创建一条A记录,解析到本机地址。配置步骤 安装DNS服务器,根据题目创…

【Linux】Linux线程概念和线程控制

文章目录 一、Linux线程概念1.什么是线程2.线程的优缺点3.线程异常4.线程用途5.Linux进程VS线程 二、线程控制1.线程创建2.线程终止3.线程等待4.线程分离 一、Linux线程概念 1.什么是线程 线程是进程内的一个执行流。 我们知道&#xff0c;一个进程会有对应的PCB&#xff0c;…

大连海事大学博士学位论文在知网论文提交过程中遇到“去掉辅助和文摘中的多余信息“的解决方案

1. 问题描述 遇到的问题长这样。 辅助指的是中文摘要&#xff1b;文摘指的是英文摘要。 问题说明&#xff0c;每次保存完&#xff0c;都会出现两个多余的空行&#xff1b;你删除了&#xff0c;保存再打开&#xff0c;又出现了两个空行。 2 问题原因 2.1 粘贴摘要操作 如果…

Qt中多线程使用案列

Qt中多线程下载大文件 #pragma once#include <QWidget> #include <QPushButton> #include "ThreadPool.h" #include <QProgressBar> #include <QLabel> #include <QHBoxLayout> #include <QVBoxLayout> class MainWindow : pub…

nginx 离线安装 https反向代理

这里写自定义目录标题 安装步骤1.安装nginx所需依赖1.1 安装gcc和gcc-c1.1.1下载依赖包1.1.2 上传依赖包1.1.3安装依赖 1.2 安装pcre1.2.1 下载pcre1.2.2 上传解压安装包1.2.3 编译安装 1.3 下载安装zlib1.3.1 下载zlib1.3.2 上传解压安装包1.3.3 编译安装 1.4 下载安装openssl…

【K8s】3# 使用kuboard管理K8s集群(NFS存储安装)

文章目录 1.NFS是什么2.配置NFS服务器2.1.执行以下命令安装 nfs 服务器所需的软件包2.2.执行命令 vim /etc/exports&#xff0c;创建 exports 文件&#xff0c;文件内容如下2.3.执行以下命令&#xff0c;启动 nfs 服务2.4.检查配置是否生效 3.在客户端测试NFS3.1.执行以下命令安…

基于51的智能交通信号灯设计

文章目录 概要仿真图程序总结 资料下载地址&#xff1a;基于51的智能交通信号灯设计 概要 可实现东西、南北两个方向的红、黄、绿灯按设定的时间亮灭&#xff0c;用以指引交通通行&#xff0c;以倒计时方向显示时间。红、黄、绿交通灯的变化规律为&#xff1a; 1&#xff09…

在国内如何使用某知名GPT,附在线体验链接

在线体验 三种方式&#xff1a; 一、访问openai&#xff0c;之前需要国外手机号&#xff0c;现在好像不用验证了&#xff0c;但是调用API还是需要验证手机号 二、购买一个海外服务器&#xff0c;然后自行在海外服务器上部署一套调用OpenAI接口的服务 三、通过一些国内封装好的网…

Mybatis基本操作

目录 准备工作 删除操作 预编译SQL 增加操作 获取返回的主键 更新操作 准备工作 准备数据库表 emp创建一个新的springboot工程&#xff0c;选择引入对应的起步依赖&#xff08;mybatis、mysql驱动、lombok&#xff09;application.properties中引入数据库连接信息创建对应…

MDC Manifest Configurator

基于华为手册总结摘要的&#xff0c;有分布手册没写的&#xff0c;我给补充上了&#xff0c;比如&#xff1a;定义启动设定 CM配置流程&#xff1a;配置流程涵盖定义数据类型、服务接口、子网信息、部署通信、部署通信协议、定义可执行程序和进程、定义应用进程信息、创建服务…

c语言错误总结

函数 A:void类型函数可以 B&#xff1a;不需要&#xff0c;如果return 不返回任何值&#xff0c;函数会在return语句执行后终止执行&#xff0c;后面的语句不会执行 C&#xff1a;对的 D&#xff1a;不可能&#xff0c;return只能返回一个数据 A:函数不一定有返回值 B:可以…