Python测试框架pytest:常用参数、查找子集、参数化、跳过
Pytest是一个基于python的测试框架,用于编写和执行测试代码。pytest主要用于API测试,可以编写代码来测试API、数据库、UI等。
pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个优点:
简单灵活,容易上手。pytest的语法简洁明了,易于理解和使用。
支持参数化。pytest可以通过装饰器或 fixture 方法对测试用例进行参数化,提高测试用例的覆盖率。
能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)。
pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等。
测试用例的skip和xfail处理。pytest提供了灵活的跳过测试用例或预期失败的机制,可以根据需要在测试过程中跳过某个或某些测试用例。
可以很好的和jenkins集成。pytest可以和Jenkins等持续集成工具无缝集成,方便进行自动化测试和报告生成。
report框架----allure 也支持了pytest。pytest可以和Allure报告框架集成,生成详细的HTML测试报告,方便进行测试结果分析和展示。
pytest是一个功能强大、灵活易用的Python测试框架,适用于各种类型的测试需求,具有很高的实用价值。
安装
# 安装
pip install pytest# 帮助
pytest -h
格式要求
文件名称:test_*.py 或 *_test.py
函数名:test开头
常用参数
-s 显示标准输出,相当于–capture=no,pytest默认是不输出print logging等的输出的,除非assert失败。
-v 显示详细报告。
-k 按照关键词查找测试用例。
-q 显示简洁报告。
-m 只运行被标记的测试用例。
-x 用例失败时立即停止测试。
-c file从 file 加载配置文件。
-l (--showlocals) 用例失败信息回溯时显示局部变量及其值。
-rsxX 报告®测试用例被跳过(s)、预计失败(x)、预计失败但实际通过(X)的原因。
-strict禁止使用未在配置文件(pytest.ini)注册的 mark 标记。
--maxfail=n失败n后停止运行测试。
–reruns=num失败用例重跑num次。需要安装 pytest-rerunfailures 插件模块。
--lf (--last-failed)仅执行上次失败的用例。如果没有失败的用例或者没找到缓存文件,默认是运行所有的用例。
--lfnf =[all, none]与 --lf 同时使用,=all 代表找不到用例或缓存文件时执行所有用例,=none 代表找不到用 例或缓存文件时不执行测试用例。
pytest.main(['--lf','--lfnf=none', "test.py"])
--ff (--failed-first)先执行失败的用例,再执行其他用例。
--nf (--new-first)首先从新文件或新修改的用例开始运行测试。
--sw (--stepwise)在测试失败时退出,且下一次在测试失败的用例开始测试。
--stepwise-skip忽略第一个失败的测试,在第二次测试失败时退出。
--keep-duplicates 不断重复的测试。
--durations=n显示执行最慢的n条用例。注意:除非添加参数 -vv,默认情况下,否则pytest不会显示<0.01s的测试时间。
--fixtures显示所有可用的 fixture。
--tb=style堆栈回溯信息打印模式 (auto/long/short/line/native/no])。
--setup-show显示fixture执行步骤。
--cache-show=[CACHESHOW]显示缓存内容,不执行收集或测试。
--cache-clear运行前清除pytest缓存。
--continue-on-collection-errors即使发生收集(收集用例阶段)错误,也强制执行测试。
--rootdir=ROOTDIR定义测试的根目录。
--color=color终端输出的颜色(yes/no/auto)。
--collect-only只收集用例,不执行。
--assert=MODE “plain”不执行任何断言调试,“rewrite”重写测试模块中的assert语句,以提供assert表达式信息
基础测试
文件名:test_one.py
# 测试函数
def test_division():assert 1/1.0==1# 测试类
class TestOne:def test_addition(self):"""测试方法"""assert 1 + 1 == 2def testsquare(self):"""测试方法"""assert 2*2 == 3def tesequality():"""无效"""assert 10 == 11
运行:
pytest -v
-v表示查看详情。

找到3个测试用例,1个失败,2个通过。
测试子集
按照函数名查找子集
test_sub.py
# 测试子集
class TestSub:def test_compare_one(self):"""测试方法"""assert 1 + 1 == 2def test_compare_two(self):"""测试方法"""assert 1 + 2 == 3
pytest -v -k compare
使用pytest -k <substring>命令的-k参数值来过滤函数名。

分组标记
# -*- coding: utf-8 -*-
import pytest# 测试子集
class TestGroup:@pytest.mark.groupdef test_group_one(self):"""测试方法"""assert 1 + 1 == 2@pytest.mark.groupdef test_group_two(self):"""测试方法"""assert 1 + 2 == 3
pytest -v -m group
这里用装饰器 @pytest.mark.group来标记函数,然后用pytest -v -m group中的-m来寻找这个分组标记。

夹具函数
import pytest# 测试fixture
class TestFixture:@pytest.fixturedef input_value(self):return 36def test_division(self, input_value):"""测试方法"""assert input_value / 6 == 6

这里用@pytest.fixture修饰的函数input_value提前准备了数据,以供test_division用。这种方法只能在一个文件里用,如果想全局使用可以配置Conftest.py。
参数化
import pytest@pytest.mark.parametrize("num, output",[(1,11),(2,22),(3,35),(4,44)])
def test_multiplication_11(num, output):assert 11*num == output
pytest test_parame.py -v

跳过测试
import pytest
@pytest.mark.xfail
@pytest.mark.great
def test_greater():num = 100assert num > 100@pytest.mark.xfail
@pytest.mark.great
def test_greater_equal():num = 100assert num >= 100@pytest.mark.skip
@pytest.mark.others
def test_less():num = 100assert num < 200
pytest test_xfail_skip.py -v
@pytest.mark.xfail标记为xfail状态。
@pytest.mark.skip直接跳过。

更多请见官网。
相关文章:
Python测试框架pytest:常用参数、查找子集、参数化、跳过
Pytest是一个基于python的测试框架,用于编写和执行测试代码。pytest主要用于API测试,可以编写代码来测试API、数据库、UI等。 pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个优点: 简单灵活,容易上手。…...
Android 13 Hotseat定制化修改
一.背景 由于需求是需要自定义修改Hotseat,所以此篇文章是记录如何自定义修改hotseat的,应该可以覆盖大部分场景,修改点有修改hotseat布局方向,hotseat图标数量,hotseat图标大小,hotseat布局位置,hotseat图标禁止形成文件夹,hotseat图标禁止移动到Launcher中,下面开始…...
【VUE】7、VUE项目中集成watermark实现页面添加水印
在网站浏览中,常常需要网页水印,以便防止用户截图或录屏暴露敏感信息后,方便追踪用户来源。 1、安装 watermark 在 package.json 文件 dependencies 节点增加 watermark-dom 依赖 "watermark-dom": "2.3.0"然后执行命…...
Rider无法识别Todo Comment
最近因为vs code很难识别到代码中的usage和definition,改用Rider了。 但是一开始就哪里有点不对, 比如我主题的颜色总是有些地方无法识别出来。比如我每次从Unity中点击脚本文件,都只能识别到某一个特定的文件夹,而不能打开整个…...
用 docker 创建 jmeter 容器,能做性能测试?
我们都知道,jmeter 可以做接口测试,也可以用于性能测试,现在企业中性能测试也大多使用 jmeter。docker 是最近这些年流行起来的容器部署工具,可以创建一个容器,然后把项目放到容器中,就可以构建出一个独立的…...
Token 失效退出至登录页面
目录 前端设置: 1. 在登录页面,调用登录的接口后,直接获取当前时间并保存在本地,类似保存token。 2. 在路由守卫 获取本机存储的时间戳,加15分钟与当前时间进行对比,如果大于当前时间说明token失效&…...
微服务系列(2)--注册中心
在博文:微服务系列(1)里我们提到过注册中心的概念,简单来说微服务注册中心是一个用于存储和管理微服务实例信息的组件,它提供了服务注册、服务发现、服务健康检查等功能,以确保微服务之间的稳定通信。在微服务架构中,各…...
VSCode使用CMake断点调试
在 VS Code 中使用 CMake 进行断点运行调试,需要进行以下步骤: 确保已在系统中安装了 CMake 和调试器(如 GDB)。 在项目根目录下创建一个名为 .vscode 的文件夹。 在项目根目录下创建一个名为 build 的文件夹,并在终…...
Python爬虫异常处理心得:应对网络故障和资源消耗
作为一名专业的爬虫代理,我知道在爬取数据的过程中,遇到网络故障和资源消耗问题是再正常不过了。今天,我将与大家分享一些关于如何处理这些异常情况的心得和技巧。不论你是在处理网络不稳定还是资源消耗过大的问题,这些技巧能够帮…...
【CSS】CSS 布局——常规流布局
<h1>基础文档流</h1><p>我是一个基本的块级元素。我的相邻块级元素在我的下方另起一行。</p><p>默认情况下,我们会占据父元素 100%的宽度,并且我们的高度与我们的子元素内容一样高。我们的总宽度和高度是我们的内容 内边距…...
flutter开发实战-实现左右来回移动的按钮引导动画效果
flutter开发实战-实现左右来回移动的按钮引导动画效果 最近开发过程中需要实现左右来回移动的按钮引导动画效果 一、动画 AnimationController用来控制一个或者多个动画的正向、反向、停止等相关动画操作。在默认情况下AnimationController是按照线性进行动画播放的。Animati…...
ROS实现自定义信息以及使用
常见的消息包 消息包定义一般如下👇 (1)创建包和依赖项 (2)在新建的qq_msgs的包新建msgs的文件夹,在该文件夹里面新建Carry.msg类型的文件。 其实,Carry.msg就是你自己定义的消息类型&am…...
初始C语言——详细讲解操作符以及操作符的易错点
系列文章目录 第一章 “C“浒传——初识C语言(更适合初学者体质哦!) 第二章 详细认识分支语句和循环语句以及他们的易错点 第三章 初阶C语言——特别详细地介绍函数 第四章 初始C语言——详细地讲解数组的内容以及易错点 第五章 初始C语言—…...
论文写作常用词句积累
X 连接词 表目的To this end/Toward that endto do soto this aimso as toTo tackle these issuesfor the sake ofaiming to do表转折howeverNevertheless表递进moreverFurthermore表对比on the other hand/On the contraryAlternativelyas in the case ofwhereas表顺序in a f…...
伺服系统::编码器
一、主要分类 二、组成与原理 光电编码器 磁编码器:N-->磁感元件(0);S-->磁感元件(1)》脉冲 增量编码器的分辨率、倍频与细分技术 (99 封私信 / 81 条消息) 编码器有什么分类? - 知乎 (z…...
Git全栈体系(五)
第八章 IDEA 集成 GitHub 一、设置 GitHub 账号 如果出现 401 等情况连接不上的,是因为网络原因,可以使用以下方式连接: 然后去 GitHub 账户上设置 token。 点击生成 token。 复制红框中的字符串到 idea 中。 点击登录。 二、分享工程…...
spring-boot webservice的例子
webservice发布服务 源码下载地址 spring-boot-webservice例子资源-CSDN文库 webservice cilent调用 源码下载地址 spring-boot-clintwebservice调用服务的例子资源-CSDN文库...
第八章 SpringBoot @ConfigurationProperties配置绑定
原始做法:读取到文件内容,再进行bean的绑定 public static void readProperties(String propertiesPath) throws IOException {Properties pps new Properties();pps.load(MainApplication.class.getClassLoader().getResourceAsStream("applicat…...
【SpringBoot】88、SpringBoot中使用Undertow替代Tomcat容器
SpringBoot 中我们既可以使用 Tomcat 作为 Http 服务,也可以用 Undertow 来代替。Undertow 在高并发业务场景中,性能优于 Tomcat。所以,如果我们的系统是高并发请求,不妨使用一下 Undertow,你会发现你的系统性能会得到很大的提升。 1、Tomcat 介绍 Tomcat是一个开源的Ja…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
