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 枚举的详细…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
