pytest的常用插件和Allure测试报告
pytest常用插件
pytest-html插件
安装:
pip install pytest-html -U
用途:
生成html的测试报告
用法:
在.ini配置文件里面添加
addopts = --html=report.html --self-contained-html
效果:
执行结果中存在html测试报告路径
pytest-xdist插件
安装:
pip install pytest-xdist -U
用途:
可以使用并发的方式执行用例
用法:
在.ini配置文件中添加
addopte -n 并发数(建议不要超过系统CPU的核心数)
如果并发数为0,相当于没有使用插件
效果:
会减少用例的执行时间,但是由于调用进程也需要消耗资源,所以填写的并发数太多时间并不会得到有效的提升
无并发执行情况:
并发数为2的执行情况:
可以看到效率有所提高
pytest-rerunfailures插件
安装:
pip install pytest-rerunfailures -U
用途:
在用例失败后进行重试,可以执行重试最大次数和每次重试之前的等待时间
用法:
在.ini配置文件中添加
addopts --reruns 重新执行的数量 --reruns-delay 每次重新执行的等待时间
如: --reruns 5 --reruns-delay 1 表示如果失败最多重新执行5次,并且每次重新执行之间间隔一秒
效果:
用例内容:
生成一个随机数范围是[1, 3)
断言这个随机数是否等于1,相当于是50%的概率
def test_1():a = random.randint(1, 3)assert a == 1
使用--reruns 5 --reruns-delay 1的配置执行后
pytest-order插件
安装:
pip install pytest-order -U
用途:
给用例排序,让用例可以按照执行的顺序执行
用法:
在用例上面加上如下标识
@pytest.mark.order(1)
执行时会按照数字从小到大的顺序执行,如果没有填数字或者没有添加标识的用例,会在排序的所有用例执行之后,按照原本的用例顺序执行。
效果:
用例内容:
test_1没有添加标识
test_2添加了标识但没有加入数字
test_3、test_4、test_5添加了标识并且加入了数字
def test_1():print('执行用例test_1')@pytest.mark.order()
def test_2():print('执行用例test_2')@pytest.mark.order(1)
def test_3():print('执行用例test_3')@pytest.mark.order(3)
def test_4():print('执行用例test_4')@pytest.mark.order(2)
def test_5():print('执行用例test_5')
预期执行顺序:
test_3、test_5、test_4、test_1、test_2
执行结果:
符合预期
pytest-base-url插件
安装:
pip install pytest-base-url -U
用途:
在用例中可以使用名为base-url的变量,可以在用例之间传递信息
用法:
在.ini配置文件中添加:
addopts --base-url 内容
或者
base_url = 内容
效果:
用例内容:
打印base-url的内容
def test_abc(base_url):print('正在使用的环境是:', base_url)
base-url的内容为:
base_url = 测试环境
效果:
pytest-result-log插件
安装:
pip install pytest-result-log -U
用途:
打印的日志更详细,并且会对不同用例的日志进行区分
用法:
安装之后即可用
配置格式:
log_file = ./pytest.log
log_file_level = info
log_file_format = %(levelname)-8s %(asctime)s [%(name)s:%(lineno)s] : %(message)s
log_file_date_format = %Y-%m-%d %H:%M:%S# 设置打印日志的级别
result_log_level_verbose = info
效果:
用例内容:
import logginglogger = logging.getLogger()def test_log1():logger.info("哈哈哈,我是日志内容")def test_log2():logger.info("哈哈哈,我也是日志内容")assert 1 == 2
执行结果:
会生成一个.log的文件,文件名为配置中设置的名称
log_file = ./pytest.log
Allure测试报告框架
环境需要
需要安装Allure和jdk11及以上版本(建议17)
并且需要将其加入到系统的环境变量
最终结果就是:在cmd窗口或者终端中输入java和allure都可以出现对应的内容
allure-pytest插件
安装:
pip install allure-pytest -U
用途:
将pytest生成的测试报告转化为Allure可以识别的数据
用法:
在.ini配置文件中添加:
addopts --alluredir=./temps --clean-alluredir
Allure测试报告框架的用法
当生成了pytest的测试报告之后,在终端输入:
allure generate -c -o report temps
其中generate表示生成报告
-c表示清空之前的报告
-o表示报告存放的目录名字(后面的report是我设置的目录名字)
temps表示allure-pytest插件生成的测试结果存放的位置(名字可以自己更换)
可以通过在main.py文件中添加如下代码,用来在用例执行完之后,自动执行该命令
os.system('allure generate -c -o report temps')
效果:
点击你存放allure报告的目录(我的是report),找到index.html用浏览器打开
其中测试套会根据用来存在的目录进行区分
Allure测试报告定制
在Allure目录下找到config/allure.yml
修改成如下内容(就是把 - custom-logo-plugin 那一行加进去):
plugins:- junit-xml-plugin- xunit-xml-plugin- trx-plugin- behaviors-plugin- packages-plugin- screen-diff-plugin- xctest-plugin- jira-plugin- xray-plugin- custom-logo-plugin
然后在来到Allure的plugins\custom-logo-plugin\static路径下
找到图片文件和css文件
设计好对应的logo图片和css样式,加进去Allure报告的logo就会修改了
Allure报告中对用例分类
我们可以在用例加上allure标记
同类型的标记中内容相同的标记会被归为一类
# 对测试用例进行划分,级别从大到小
@allure.epic()
@allure.feature()
@allure.story()
@allure.title()
举例:
@allure.epic('项目标记1')
@allure.feature('模块标记1')
class Test1:@allure.story('场景1')@allure.title('功能1')def test_1(self):print('执行了test_1')@allure.story('场景1')@allure.title('功能2')def test_2(self):print('执行了test_2')@allure.title('功能2')def test_3(self):print('执行了test_3')@allure.epic('项目标记1')
@allure.feature('模块标记2')
class Test2:@allure.title('功能1')def test_1(self):print('执行了test_1')@allure.title('功能1')def test_2(self):print('执行了test_2')@allure.story('场景1')@allure.title('功能2')def test_3(self):print('执行了test_3')
Test1类和Test2类都加上了epic('项目标记1')此时他们会在报告会打包到一个名为"项目标记1"的目录下
又因为他们各自有带有不同的feature()标记,所以在"项目标记1"目录下Test1类和Test2类中的用例会再被分为两个目录:"模块标记1"和"模块标记2"
Test1类中用例又被分为"场景1"目录和直接展示的用例,以此类推
相关文章:

pytest的常用插件和Allure测试报告
pytest常用插件 pytest-html插件 安装: pip install pytest-html -U 用途: 生成html的测试报告 用法: 在.ini配置文件里面添加 addopts --htmlreport.html --self-contained-html 效果: 执行结果中存在html测试报告路…...

神经网络的权重是什么?
请参考这个视频https://www.bilibili.com/video/BV18P4y1j7uH/?spm_id_from333.788&vd_source1a3cc412e515de9bdf104d2101ecc26a左边是拟合的函数,右边是均方和误差,也就是把左边的拟合函数隐射到了右边,右边是真实值与预测值之间的均方…...
C语言代码 在屏幕上输出9*9乘法口诀表
在屏幕上输出9*9乘法口诀表。 代码示例: #include <stdio.h>int main() {int i 0;for (i 1; i < 9; i)//打印所有行的循环{int j 0;for (j 1; j < i; j)//打印每一行中所有列的循环{printf("%d*%d%-2d ", i, j, i * j);//%-2d的意思是两…...

11.0 Zookeeper watcher 事件机制原理剖析
zookeeper 的 watcher 机制,可以分为四个过程: 客户端注册 watcher。服务端处理 watcher。服务端触发 watcher 事件。客户端回调 watcher。 其中客户端注册 watcher 有三种方式,调用客户端 API 可以分别通过 getData、exists、getChildren …...

HGAME 2024 WEEK 1 :web ezHTTP
题目: 看到这个就知道是文件头伪造 第一想法就是Referer伪造 所以伪造 Referer: vidar.club 然后构造伪造的Referer 然后提示通过那些东西访问页面,User-Agent: 是构造你浏览器访问信息的,所以复制右边那一串替代就好了 然后要求我们从本地…...

Linux【docker 设置阿里源】
文章目录 一、查看本地docker的镜像配置二、配置阿里镜像三、检查配置 一、查看本地docker的镜像配置 docker info一般没有配置过是不会出现Registry字段的 二、配置阿里镜像 直接执行下面代码即可,安装1.10.0以上版本的Docker客户端都会有/etc/docker 1.建立配置…...
app逆向-frida-rpc详解
Frida-RPC是Frida工具的一个组件,用于在应用程序和Frida脚本之间进行远程过程调用(RPC)。远程过程调用是一种允许应用程序的不同部分或不同的应用程序之间进行通信的方法。在Frida中,RPC通过JavaScript脚本和应用程序之间建立通信…...
计算机网络(第六版)复习提纲27
7 TCP流量控制 A 利用滑动窗口实现流量控制 所谓流量控制,就是让发送方发送速率不要太快,让接收方来得及接收 1 利用窗口进行流量控制 2 持续计时器和零窗口探测报文(仅携带一字节的数据) B TCP的传输效率(TCP报文段的…...

解析与模拟常用字符串函数strcpy,strcat,strcmp,strstr(一)
今天也是去学习了一波字符串函数,想着也为了加深记忆,所以写一下这篇博客。既帮助了我也帮助了想学习字符串函数的各位。下面就开始今天的字符串函数的学习吧。 目录 strcpy与strncpy strcat与strncat strcmpy strstr strcpy与strncpy 在 C 语言中&…...

node.js后端+小程序前端+mongoDB(增删改查)
前言 今天我对比了以下node.js的express与python的fastAPI,我决定我还是出一期关于node.jsmangoDB小程序的小案例吧。 不是python的fastAPI不好用,因为fastAPI是python较新的技术,我不敢果断发出教学文章(这件事情还是留着给pyt…...

thinkphp数据批量提交(群发消息)
<form id="edit-form" class="form-horizontal" role="form" data-toggle<...

大华 DSS 数字监控系统 attachment_getAttList.action SQL 注入漏洞复现
0x01 产品简介 大华 DSS 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。 0x02 漏洞概述 大华 DSS存在SQL注入漏洞,攻击者 /portal/attachment_getAttList.action 路由发送特殊构造的数据包,利用报错注入获…...

vue2学习笔记(2/2)
vue2学习笔记(1/2) vue2学习笔记(2/2) 文章目录 1. 初始化脚手架2. 分析脚手架&render函数文件结构图示及说明main.jsindex.htmlApp.vueSchool.vueStudent.vue 关于不同版本的Vue修改默认配置vue.config.js配置文件 3. ref属…...
uniapp 之 base64转临时地址播放mp3
需求是:进入页面的时候是先有背景音乐,发送问题请求回答的时候会返回文字和音频,前端要把音频读出来,并且把背景音乐停止,读完音频后再打开背景音乐 一开始用的直接base64直接拼接在地址后 真机放不了 const innerAu…...

【网站项目】038汽车养护管理系统
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
倒计时64天
B-小红的因子数_牛客周赛 Round 31 (nowcoder.com) 超时了(108.33/125) #include <bits/stdc.h> using namespace std; const int N 1e5 5; const int inf 0x3f3f3f3f; #define int long long void solve() {int x;cin>>x;if(x1){cout&…...

003集—三调数据库添加三大类字段——arcgis
在国土管理日常统计工作中经常需要用到三大类数据(农用地、建设用地、未利用地),而三调数据库中无三大类字段,因此需要手工录入三大类字段,并根据二级地类代码录入相关三大类名称。本代码可一键录入海量三大类名称统计…...
python基础使用之excel数据处理
当我们需要用python处理 Excel 表格数据时,Python 提供了一个强大的库pandas。pandas 是一个用于数据分析的开源 Python 库,它可以帮助我们轻松地读取、操作和分析 Excel 表格数据。下面通过一个实例,展示 pandas如何 来处理 Excel 表格数据的…...
【算法】【数据结构】算法与数据结构的关系
程序算法数据结构语言工具和环境 但在算法学习过程中,我认识到算法和数据结构是密不可分的,脱离数据结构谈论算法是空架子。 算法:解决问题的步骤和方法。对数据进行操作和处理的方法。 数据结构:用来存储数据的方式。 数据结构和…...
Libvirt 迁移标志详解
可参考:https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainMigrateFlags 在虚拟化环境中,迁移是一项重要的功能,Libvirt 提供了一系列标志,用于控制迁移过程中的不同行为。以下是 virDomainMigrateFlags 枚举的详细…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...