pytest 常用插件
pytest
提供了许多功能强大的插件来增强测试体验和执行能力。以下是一些常用的 pytest
插件介绍,并结合 pytest.main()
进行使用的示例。
1. pytest-xdist
pytest-xdist
插件用于并行化测试的执行,可以将测试分配到多个 CPU 核心并行运行,从而加速测试过程。
功能:
- 并行执行测试:通过
-n
参数指定使用多少个进程进行测试。 - 分布式执行:支持将测试分布到多台机器进行执行。
- 负载均衡:动态分配测试任务,确保测试负载均衡。
安装:
pip install pytest-xdist
使用:
-
命令行使用:
pytest -n 4 # 使用 4 个进程并行运行
-
结合 pytest.main() 使用:
import pytest# 使用 pytest.main() 并启用 pytest-xdist 的并行执行 pytest.main(["-n", "4", "test_module.py"]) # 将 test_module.py 中的测试分配到 4 个进程并行执行
2. pytest-rerunfailures
pytest-rerunfailures
插件用于自动重试失败的测试,避免偶尔的临时问题影响测试结果,适合那些偶尔失败的测试。
功能:
- 重试失败的测试:在测试失败时自动重新运行测试,直到达到指定的重试次数。
- 控制重试次数:你可以设置每个测试的最大重试次数。
安装:
pip install pytest-rerunfailures
使用:
-
命令行使用:
pytest --reruns 3 # 失败的测试最多重试 3 次
-
结合 pytest.main() 使用:
import pytest# 使用 pytest.main() 并启用 pytest-rerunfailures 的失败重试 pytest.main(["--reruns", "3", "test_module.py"]) # 失败的测试重试 3 次
3. pytest-cov
pytest-cov
插件用于测试覆盖率分析,它可以生成代码覆盖率报告,帮助你检查测试的覆盖程度。
功能:
- 生成代码覆盖率报告:可以生成文本、HTML 或 XML 格式的代码覆盖率报告。
- 与 CI 集成:可以与持续集成工具结合使用,生成覆盖率报告并进行分析。
安装:
pip install pytest-cov
使用:
-
命令行使用:
pytest --cov=your_module tests/ # 生成 `your_module` 的代码覆盖率报告
-
结合 pytest.main() 使用:
import pytest# 使用 pytest.main() 生成代码覆盖率报告 pytest.main(["--cov=your_module", "tests/"]) # 在 tests/ 目录下运行测试并生成 `your_module` 的代码覆盖率报告
4. pytest-mock
pytest-mock
插件提供了一个更简便的方式来模拟(mock)对象,尤其是在需要对外部依赖进行测试时,帮助你控制被测试代码的行为。
功能:
- 模拟对象的行为:可以模拟函数或方法,返回指定的值,或者检查是否调用。
- 与 unittest.mock 集成:简化了
unittest.mock
的用法,使其在pytest
中更为方便。
安装:
pip install pytest-mock
使用:
-
命令行使用:
- 在测试函数中使用
mock
进行模拟操作:
def test_mock_example(mocker):mock_func = mocker.patch('module.function_name')mock_func.return_value = 42assert module.function_name() == 42
- 在测试函数中使用
-
结合 pytest.main() 使用:
import pytest# 使用 pytest.main() 来运行包含 mock 的测试 pytest.main(["test_module.py"])
5. pytest-django
pytest-django
插件为 pytest
提供了对 Django 项目的支持,简化了 Django 测试的设置和运行。
功能:
- 支持 Django 测试:自动设置 Django 环境,使得测试更为简便。
- 集成 Django 的测试客户端:通过
pytest
使用 Django 的TestCase
和Client
进行测试。
安装:
pip install pytest-django
使用:
-
命令行使用:
pytest --django-settings=your_project.settings # 指定 Django 配置文件
-
结合 pytest.main() 使用:
import pytest# 使用 pytest.main() 运行 Django 测试 pytest.main(["--django-settings=your_project.settings", "test_module.py"])
6. pytest-html
pytest-html
插件用于生成 HTML 格式的测试报告,便于查看测试结果和统计数据。
功能:
- 生成 HTML 测试报告:输出漂亮的 HTML 格式的报告,包含测试的统计信息、详细的结果和错误日志。
- 定制报告格式:可以自定义报告的样式和内容。
安装:
pip install pytest-html
使用:
-
命令行使用:
pytest --html=report.html # 生成 HTML 格式的测试报告
-
结合 pytest.main() 使用:
import pytest# 使用 pytest.main() 生成 HTML 格式的测试报告 pytest.main(["--html=report.html", "test_module.py"])
7. pytest-sugar
pytest-sugar
插件为 pytest
提供了更友好的输出格式,使得测试结果显示更为美观和清晰。
功能:
- 美化输出:通过改变输出格式,使测试过程更为友好和易读。
- 实时进度显示:显示测试进度,测试通过或失败时的颜色高亮。
安装:
pip install pytest-sugar
使用:
-
命令行使用:
pytest --maxfail=5 --disable-warnings # 启用美化输出,最多失败 5 次并禁用警告
-
结合 pytest.main() 使用:
import pytest# 使用 pytest.main() 并启用美化输出 pytest.main(["--maxfail=5", "--disable-warnings", "test_module.py"])
总结:
这些插件为 pytest
提供了强大的扩展功能,帮助你提升测试的效率、可读性和可维护性。通过结合使用 pytest.main()
,你可以在 Python 脚本中轻松地运行这些插件,灵活地控制测试的执行、输出和结果。
常见插件及功能总结:
插件名 | 功能简介 |
---|---|
pytest-xdist | 支持并行化和分布式测试执行,提升测试效率。 |
pytest-rerunfailures | 自动重试失败的测试,用于偶发故障。 |
pytest-cov | 生成代码覆盖率报告,检查测试覆盖率。 |
pytest-mock | 提供模拟(mock)功能,方便控制被测试对象的行为。 |
pytest-django | 提供对 Django 项目的支持,简化 Django 测试的执行。 |
pytest-html | 生成 HTML 格式的测试报告。 |
pytest-sugar | 美化 pytest 输出格式,增强可读性。 |
通过使用这些插件,你可以根据需求自定义测试的执行过程,增强测试的可视化效果,进而提高测试效率和稳定性。
相关文章:
pytest 常用插件
pytest 提供了许多功能强大的插件来增强测试体验和执行能力。以下是一些常用的 pytest 插件介绍,并结合 pytest.main() 进行使用的示例。 1. pytest-xdist pytest-xdist 插件用于并行化测试的执行,可以将测试分配到多个 CPU 核心并行运行,从…...

浅谈云计算05 | 云存储等级及其接口工作原理
一、云存储设备 在当今数字化飞速发展的时代,数据已然成为个人、企业乃至整个社会的核心资产。从日常生活中的珍贵照片、视频,到企业运营里的关键业务文档、客户资料,数据量呈爆炸式增长。面对海量的数据,如何安全、高效且便捷地存…...

linux:文件的创建/删除/复制/移动/查看/查找/权限/类型/压缩/打包,文本处理sed,awk
关于文件的关键词 创建 touch 删除 rm 复制 cp 权限 chmod 移动 mv 查看内容 cat(全部); head(前10行); tail(末尾10行); more,less,grep 查找 find 压缩 gzip ; bzip 打包 tar 编辑 sed 文本处理 awk 创建文件 格式: touch 文件名 删除文件 复制文…...
CentOS 8 如何安装java与mysql
在CentOS 8上安装Java和MySQL的步骤如下: 1. 安装 Java 1.1 安装 OpenJDK(推荐) CentOS 8 默认的软件仓库提供了 OpenJDK 包,您可以直接使用 dnf 命令安装。 # 更新系统 sudo dnf update -y# 安装 OpenJDK 11(Cent…...
Go语言之路————go基本语法、数据类型、变量、常量、输出
Go语言之路————go基本语法、数据类型、变量、常量 前言一、基本语法知识二、数据类型三、常量四、变量五、作用域六、输入输出 前言 我是一名多年Java开发人员,因为工作需要现在要学习go语言,Go语言之路是一个系列,记录着我从0开始接触G…...

音视频入门基础:MPEG2-PS专题(7)——通过FFprobe显示PS流每个packet的信息
音视频入门基础:MPEG2-PS专题系列文章: 音视频入门基础:MPEG2-PS专题(1)——MPEG2-PS官方文档下载 音视频入门基础:MPEG2-PS专题(2)——使用FFmpeg命令生成ps文件 音视频入门基础…...

Docker安装和卸载(centos)
Docker安装和卸载 一,已安装Docker,卸载Docker 1.方法一 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 如果出现以下提示就证明没卸载…...

YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练
数据标注 前期准备 先打开Anaconda Navigator,点击Environment,再点击new(new是我下载anaconda的文件夹名称),然后点击创建 点击绿色按钮,并点击Open Terminal 输入labelimg便可打开它,labelimg是图像标注工具,在上篇…...

Winforms开发基础之非主线程操作UI控件的误区
前言 想象一下,你正在开发一个桌面应用程序,用户点击按钮后需要执行一个耗时操作。为了避免界面卡顿,你决定使用后台线程来处理任务。然而,当你在后台线程中尝试更新UI控件时,程序突然崩溃了。这是为什么呢࿱…...
Flutter中Get.snackbar和Get.dialog关闭冲突问题记录
背景: 在使用GetX框架时,同时使用了Get.snackbar提示框和Get.dialog加载框,当这两个widget同时存在时,Get.dialog加载框调用Get.back()无法正常关闭。 冲突解释: 之所以会产生冲突,是因为Get.snackbar在关…...
springcloudalibaba集成fegin报错ClassNotFoundException解决方案
集成fegin遇到问题: java.lang.ClassNotFoundException: com.netflix.config.CachedDynamicIntProperty 解决方案: 在pom文件中添加依赖 <dependency><groupId>com.netflix.archaius</groupId><artifactId>archaius-core</artifactId><versi…...

【HTML+CSS+JS+VUE】web前端教程-31-css3新特性
圆角 div{width: 100px;height: 100px;background-color: saddlebrown;border-radius: 5px;}阴影 div{width: 200px;height: 100px;background-color: saddlebrown;margin: 0 auto;box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.5);}...
力扣264. 丑数 II
给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是质因子只包含 2、3 和 5 的正整数。 //用一个数组来保存第1到第n个丑数 //一个丑数必须是乘以较小的丑数的 2、3 或 5来得到。 //使用三路合并方法:L2、L3 和 L5三个指针遍历2、3、5倍的丑数序列…...
计算机网络之---TCP连接管理
TCP连接管理 TCP(传输控制协议)是面向连接的协议,在数据传输之前需要建立连接,在数据传输完成后需要断开连接。TCP连接的建立和断开都遵循特定的规则,分别称为三次握手(Three-Way Handshake)和四…...
《CPython Internals》阅读笔记:p118-p150
《CPython Internals》学习第 8 天,p118-p150 总结,总计 33 页。 一、技术总结 补充一些本人整理的关于 Context-Free Grammar(CFG) 的知识。 1.symbol(符号) A mathematical symbol is a figure or a combination of figures that is used to repre…...

C/C++ 数据结构与算法【排序】 常见7大排序详细解析【日常学习,考研必备】带图+详细代码
常见7种排序算法 冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)希尔排序(Shell Sort)归并排序(Merge Sort)快速排序(…...

三只松鼠携手爱零食,社区零售新高峰拔地而起
合纵连横,这是当前零售行业发展的一个主旋律。从商超之王胖东来的全国调改,到社区零售正在进行的渠道变革,竞争的激烈和商业模式的升级令人目不暇接。 量贩零食赛道在过去一年就是如此,有杀伐,有并购,刀光…...

Java聊天小程序
拟设计一个基于 Java 技术的局域网在线聊天系统,实现客户端与服务器之间的实时通信。系统分为客户端和服务器端两类,客户端用于发送和接收消息,服务器端负责接收客户端请求并处理消息。客户端通过图形界面提供用户友好的操作界面,服务器端监听多个客户端的连接并管理消息通…...

Kibana操作ES基础
废话少说,开干!!!!!!!!!!!!截图更清晰,复制在下面 #库操作#创建索引【相当于数据库的库】 PUT /first_index#获…...

MYSQL8创建新用户报错:You have an error in your SQL syntax;check...
本文所用——MYSQL版本:8.0.25 baidu都是直接创建新用户并赋权,如下: GRANT ALL PRIVILEGES ON *.* TO 用户名% IDENTIFIED BY 密码 WITH GRANT OPTION;但是我用的MYSQL版本它就不行,会报错! 经查阅资料发现——MY…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...