pytest框架 核心知识的系统复习
1. pytest 介绍
-
是什么:Python 最流行的单元测试框架之一,支持复杂的功能测试和插件扩展。
-
优点:
-
语法简洁(用
assert替代self.assertEqual)。 -
自动发现测试用例。
-
丰富的插件生态(如失败重试、并发执行、报告生成)。
-
兼容unittest框架,比自带unittest框架更加简洁高效,在unittest框架迁移到pytest框架时不需要重写代码。
-
-
适用场景:单元测试、接口测试、UI 自动化测试。
2. pytest 环境搭建
安装 pytest
bash
复制
pip install pytest
查看pytest是否安装成功
pip show pytest
常用扩展插件
bash
复制
pip install pytest-html # HTML 报告
pip install pytest-xdist # 并发执行
pip install pytest-rerunfailures # 失败重试
pip install allure-pytest # Allure 报告集成
3. pytest 用例规则
-
文件命名:以
test_开头或结尾(如test_login.py或login_test.py)。 -
函数/类命名:
-
测试函数:以
test_开头(如test_login_success)。 -
测试类:以
Test开头(如TestLogin),且类中不能有__init__方法。
-
-
断言:直接使用
assert(如assert response.status_code == 200)。 - setup和teardown:模块级,类级,方法级,函数级
setup_module和teardown_module,在整个测试用例文件中所有方法运行前后,仅运行1次
setup_class和teardown_class,在一个Class中所有用例前后运行1次
setup_method和teardown_method,在Class下的每个方法前后运行
setup_function和teardown_function,在非Class下的每个方法前后运行
4. pytest 用例编写
示例
python
复制
# 测试函数
def test_add():assert 1 + 1 == 2# 测试类
class TestMath:def test_multiply(self):assert 2 * 3 == 6
5. pytest 用例执行顺序
-
默认顺序:按文件名和测试函数/方法的 ASCII 码顺序执行。
-
自定义顺序:
-
使用
pytest-ordering插件:python
复制
@pytest.mark.run(order=1) def test_login():pass
-
6. pytest 用例重跑
-
使用插件:
pytest-rerunfailures -
命令行参数:
bash
复制
pytest --reruns 3 --reruns-delay 2 # 失败后重试3次,间隔2秒
7. pytest 用例并发
-
使用插件:
pytest-xdist -
命令行参数:
bash
复制
pytest -n 4 # 启动4个进程并发执行
8. pytest 用例跳过
-
无条件跳过:
python
复制
@pytest.mark.skip(reason="功能未实现") def test_unimplemented():pass -
条件跳过:
python
复制
@pytest.mark.skipif(sys.platform == "win32", reason="Windows 不支持") def test_linux_only():pass
9. pytest 用例条件判断
-
结合
pytest.mark.skipif或自定义条件逻辑:python
复制
def test_feature():if not has_feature():pytest.skip("环境不支持此功能")# 正常测试逻辑
10. pytest 数据初始化与清除
fixture(scope='function', params=None, autouse=False, ids=None, name=None)
- pytest提供的fixture实现unittest中setup和teardown功能,可以在每次case执行前初始化数据,不同点是,fixture可以只在执行特定case之前运行,使用更灵活
- autouse参数:默认False须手动调用,只有True时才自动执行
- scope参数: 有四个级别参数
"function": 在conftest作用域下,每一个test开头的测试方法运行前都会执行一次
"class": 在conftest作用域下,每一个Test开头的测试类运行前都会执行一次
"module": 在conftest作用域下,每一个test开头的测试模块运行前都会执行一次
"session": 在conftest作用域下,这个包运行前只会执行一次
fixture的使用方法:
- 使用函数名直接调用,但没有返回值
@pytest.mark.usefixtures('function_name')
- 需要使用到fixture返回值:
直接在对应的接口函数里,加入一个形参,参数名就是fixture函数名
11. pytest 用例定制化执行
添加mark标签,可筛选出对应业务模块的部分接口:
- 对于Pytest,每一个模块,类,方法和用例前都加上mark,那样在pytest运行的时候就可以只运行带有该mark标签的模块,类或用例:
- 在配置文件pytest.ini里注册标签:

- 在类名/方法名前打标签:
@pytest.mark.标签名
- 在类中/方法中打标签:
pytestmark = pytest.mark.标签名
执行时可根据标签名来执行想要的用例,例如,运行所有标记为login的测试:
pytest -m login
其他运行参数:
- '-m','user_add',
- '-m','user_add or user_list',
- '-m','not user_add',
- '-m', 'not (user_add or user_list)'
- '-k',匹配用例文件名,非接口名称,可全部匹配,可模糊匹配
- '-v',节点 --多层化
- '-s' 详细输出打印 '-q' 简化打印
12. pytest 参数化
-
核心装饰器:
@pytest.mark.parametrize -
示例:
python
复制
@pytest.mark.parametrize("a, b, expected", [(1, 2, 3),(0, 0, 0),(-1, 1, 0), ]) def test_add(a, b, expected):assert a + b == expected
13. pytest 插件介绍
-
常用插件:
-
pytest-html:生成 HTML 测试报告。 -
pytest-cov:生成代码覆盖率报告。 -
pytest-mock:集成 Mock 功能。 -
pytest-django:Django 项目测试支持。
-
14. pytest 插件执行
安装与使用
bash
复制
# 安装插件
pip install pytest-html# 执行并生成 HTML 报告
pytest --html=report.html
15. pytest 集成 Allure
步骤
-
安装 Allure 命令行工具(需 Java 环境):
-
下载allure.zip
-
解压allure.zip到一个文件目录中
把解压路径添加到环境变量Path中
pip isntall pytest-allure
验证安装完成
方法一
执行pytest单元测试,生成Allure报告需要的数据存在的目录
pytest -sq --alluredir = ../report/tmp
执行命令生成测试报告
allure generate ../report/tmp -o ../report/report --clean
方法二
-
生成 Allure 结果数据:
bash
复制
pytest --alluredir=./allure-results -
生成可视化报告:
bash
复制
allure serve ./allure-results # 本地查看 allure generate ./allure-results -o ./report --clean # 生成静态报告
16. pytest 生成测试报告
多种报告形式
- Python主流自动化测试报告插件:HTMLTestRunner,BeautifulReport,Allure
- Allure是一款轻量级开源自动化测试报告生成框架,支持绝大部分测试框架,包括TestNG,Junit,pytest,unittest等
- pytest框架结合Allure可生成格式统一,美观的测试报告
-
简单文本报告:
bash
复制
pytest -v # 输出详细结果
-
HTML 报告:
bash
复制
pytest --html=report.html
-
Allure 报告(需集成):
bash
复制
pytest --alluredir=./results && allure serve ./results
总结
-
核心优势:简洁语法 + 插件生态 + 高度可定制化。
-
最佳实践:
-
使用参数化减少重复代码。
-
结合 CI/CD(如 Jenkins、GitHub Actions)自动化测试。
-
通过 Allure 或 HTML 报告直观分析结果。
-
相关文章:
pytest框架 核心知识的系统复习
1. pytest 介绍 是什么:Python 最流行的单元测试框架之一,支持复杂的功能测试和插件扩展。 优点: 语法简洁(用 assert 替代 self.assertEqual)。 自动发现测试用例。 丰富的插件生态(如失败重试、并发执…...
Spring Cloud Alibaba学习 5- Seata入门使用
Spring Cloud Alibaba学习 5- Seata入门使用 Seata是Spring Cloud Alibaba中用于分布式事务管理的解决方案 一. Seata的基本概念 1. Seata的三大角色 1> TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。TC作…...
WebAssembly技术及应用了解
WebAssembly(Wasm)是一种为Web设计的高效、低级的二进制指令格式,旨在提升Web应用的性能并支持多种编程语言。以下是对其核心概念、优势、应用场景及开发流程的系统介绍: 1. 核心概念 二进制格式:Wasm采用紧凑的二进制…...
Deepseek中的MoE架构的改造:动态可变参数激活的MoE混合专家架构(DVPA-MoE)的考虑
大家好,我是微学AI,今天给大家介绍一下动态可变参数激活MoE架构(Dynamic Variable Parameter-Activated MoE, DVPA-MoE)的架构与实际应用,本架构支持从7B到32B的等多档参数动态激活。该架构通过细粒度难度评估和分层专家路由,实现“小问题用小参数,大问题用大参数”的精…...
NodeJS学习笔记
NodeJS软件安装 node环境安装: https://nodejs.org 安装好后的node通常在C:\Program Files\nodejs验证安装是否成功 node -v npm -v 进入REPL模式命令行模式 nodeNodeJS在REPL模式和编辑器使用 windos在dos下常用命令 windos命令: 1、cmd dos系统2、…...
【交通网络拓扑图实现原理深度解析】
交通网络拓扑图实现原理深度解析 简易demo地址 背景故事:交通网络调度可视化的演进 1. 项目背景 在现代城市轨道交通系统中,交通网络线路的可视化展示一直是一个重要而复杂的问题。传统的交通网络线路图往往采用静态图片方式展示,这种方式…...
【极客时间】浏览器工作原理与实践-2 宏观视角下的浏览器 (6讲) - 2.6 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?
https://time.geekbang.org/column/article/118826 2.6 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的? 2.5介绍了渲染流水线中的 DOM 生成、样式计算和布局三个阶段,2.6讲解渲染流水线后面的阶段…...
NO2.C++语言基础|C++和Java|常量|重载重写重定义|构造函数|强制转换|指针和引用|野指针和悬空指针|const修饰指针|函数指针(C++)
6. C 和 Java 区别(语⾔特性,垃圾回收,应⽤场景等) 指针: Java 语⾔让程序员没法找到指针来直接访问内存,没有指针的概念,并有内存的⾃动管理功能,从⽽有效的防⽌了 C 语⾔中的指针…...
【CSS】---- 纯 CSS 实现无限滚动轮播
1. 前言 仅使用 CSS 创建一个具有无限滚动轮播的动画,无需 JavaScript。首先是无限滚动轮播动画效果在我们常见的开发中都是借用 JavaScript 实现,如果纯粹使用 CSS,我觉得还是一个比较有趣的。 2. 效果预览 3. 效果分析 一屏展示了三个图片元素;动画依次向左移动;三个图…...
软考架构师笔记-计算机网络
1.9 计算机网络 OSI/RM 七层模型 物理层 二进制传输(中继器、集线器) (typedef) 数据链路层 传送以帧为单位的信息(网桥、交换机、网卡) 网络层 分组传输和路由选择(三层交换机、路由器)ARP/RARP/IGMP/ICMP/IP 传输层 端到端的连接(TCP/UDP)在前向纠错系统中,当接…...
Spring MVC 页面重定向返回后通过nginx代理 丢失端口号问题处理
Spring MVC页面重定向通过Nginx代理后出现端口丢失问题,通常由以下原因及解决方案构成: ## 一、Nginx配置问题(核心原因) 1. Host头传递不完整 Nginx默认未将原始请求的端口信息传递给后端,导致应用生成重定向…...
道可云人工智能每日资讯|亚马逊云业务部门成立智能体人工智能团队
道可云元宇宙每日简报(2025年3月6日)讯,今日元宇宙新鲜事有: 《杭州市富阳区未来产业培育行动计划(2025-2026年)》发布 3月3日,杭州市富阳区经信局正式发布了《杭州市富阳区未来产业培育行动计划(2025-2026年)》&…...
算力100问☞第72问:算力与算法、数据的关系是什么?
目录 1、数据是基础 2、算法是核心 3、算力是保障 4、三者的关系 5、实际应用中的体现 算力、算法和数据是人工智能和计算机科学领域的三个核心要素,它们之间相互依赖、相互促进,共同构成了现代计算系统的基础。以下是它们之间的关系: 1、数据是基础 定义:数据是信息…...
AI-Ollama本地大语言模型运行框架与Ollama javascript接入
1.Ollama Ollama 是一个开源的大型语言模型(LLM)平台,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。 Ollama 提供了一个简单的方式来加载和使用各种预训练的语言模型,支持文本生成、翻译、代码编写、问答等多种…...
Java开发的AI应用框架简述——LangChain4j、Spring AI、Agent-Flex
LangChain4j LangChain4j官网 star很多,文档齐全,在AI服务中,提供了丰富的功能,示例代码丰富。 简介 是一个功能丰富、易于使用的Java AI开发框架,特别适合需要快速集成和使用大型语言模型的Java开发者。 项目特点 …...
【算法day2】无重复字符的最长子串 两数之和
无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 https://leetcode.cn/problems/longest-substring-without-repeating-characters/ class Solution { public:int lengthOfLongestSubstring(string s) {int sub_length …...
HarmonyOS:基于hmrouter实现Page的生命周期监听
前言:在使用ArkTs语言写鸿蒙的App中,我们发现Page的生命周期函数,如下: 页面的生命周期(32) onPageShow:页面显示触发(页面特有) onPageHide:页面隐藏触发(页面特有) onBackPress:当用户点击返回按钮时…...
DeepSeek + 飞书多维表格搭建你的高效工作流
众所周知,大模型DeepSeek擅长于处理大规模语言模型推理任务,特别是在成本降低和思维链推理方面表现出色,我们一般把大模型必做我们的大脑,但是一个人不能只有大脑,还需要其他输入输出以及操作支配的眼耳鼻嘴手足等。…...
uniapp+<script setup lang=“ts“>使用 uni.$emit和uni.$on全局传递数据
注意: 在A页面直接使用 uni.$emit(changeCategoryKey, childCategory)传递,在B页面使用 uni.$on(changeCategoryKey, (val) > {console.log(val, 取值);});只在组件传递有效,页面跳转后是无效的 跳转页面使用的传递数据的方法如下&…...
综合使用pandas、numpy、matplotlib、seaborn库做数据分析、挖掘、可视化项目
目录 1.结构化数据挖掘 1.1依赖库导入和数据读取 1.2各品牌机型及售价统计 1.3视频录制规格与价格关联性分析 2.结构化数据预处理 2.1筛选特征 2.2特征标签归一化及编码 1.结构化数据挖掘 1.1依赖库导入和数据读取 导入必要的依赖库,读取 csv 格式数据集转化为 Data…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
