当前位置: 首页 > news >正文

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

步骤

  1. 安装 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

方法二

  1. 生成 Allure 结果数据:

    bash

    复制

    pytest --alluredir=./allure-results
  2. 生成可视化报告:

    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可生成格式统一,美观的测试报告
  1. 简单文本报告

    bash

    复制

    pytest -v  # 输出详细结果
  2. HTML 报告

    bash

    复制

    pytest --html=report.html
  3. 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…...

docker中kibana启动后,通过浏览器访问,出现server is not ready yet

问题:当我在浏览器访问kibana时,浏览器给我报了server is not ready yet. 在网上试了很多方法,都未能解决,下面是我的方法: 查看kibana日志: docker logs -f kibana从控制台打印的日志可以发现&#xff…...

十、Redis 主从复制:原理解析、配置实践与优化策略

Redis 主从复制:原理解析、配置实践与优化策略 Redis 作为高性能的 NoSQL 数据库,主从复制(Master-Slave Replication) 是其核心特性之一。主从复制用于数据冗余、读负载分担、故障恢复,是 Redis 构建高可用架构的基础。本文将深入解析 Redis 主从复制的配置方法、复制机…...

使用JMeter(组件详细介绍+使用方式及步骤)

JSON操作符 在我们使用请求时,经常会遇到JSON格式的请求体,所以在介绍组件之前我会将介绍部分操作符,在进行操作时是很重要的 Operator Description $ 表示根元素 当前元素 * 通配符,所有节点 .. 选择所有符合条件的节点 .name 子元素,name是子元素名称 [start:e…...

lamp平台的应用

一.lamp介绍 网站: 静态网站 动态网站 【php语言 .php结尾的文件】 作用:运行php语言编写的动态网站应用 lamp LinuxApache【负责解析静态资源】MySQL【负责存储网站产生的数据】PHP【负责解析动态资源】 如上图所示,是lamp平台中三…...

蓝桥杯4T平台(串口打印电压值)

知识点:串口(单片机发送数据)按键ADC 题目 配置 代码 adc.c uint16_t getadc2(void) {uint16_t adc0;HAL_ADC_Start(&hadc2);adcHAL_ADC_GetValue(&hadc2);return adc; } adc.h uint16_t getadc2(void); main.c #include "lcd.h" #include…...

使用ASIWebPageRequest库编写Objective-C下载器程序

使用 ASIWebPageRequest 库编写 Objective-C 下载器程序是一个简单且高效的方式来处理 HTTP 请求。在 ASIHTTPRequest 和 ASIWebPageRequest 中,ASIWebPageRequest 是专门用于下载网页及其资源的库。 1. 安装 ASIWebPageRequest 首先,你需要安装 ASIHT…...

代码随想录算法训练营 | 图论 | 孤岛总面积、沉没孤岛

101. 孤岛的总面积//思路大概是先计算面积&#xff0c;然后如果有接触路面就返回false。可能稍微多余算了太多无用面积。 #include<bits/stdc.h> using namespace std; void sum(vector<vector<bool>>& finded,const vector<vector<int>>&a…...

迷你世界脚本出生点接口:Spawnport

出生点接口&#xff1a;Spawnport 彼得兔 更新时间: 2023-04-26 10:19:56 具体函数名及描述如下: 序号 函数名 函数描述 1 getSpawnPoint(...) 获取默认出生点 2 setSpawnPoint(...) 设置出生点位置 3 getChunkValidSpawnPos(...) 获取区块有效刷新点…...

双链路提升网络传输的可靠性扩展可用带宽

为了提升网络传输的可靠性或增加网络可用带宽&#xff0c; 通常使用双链路冗余备份或者双链路聚合的方式。 本文介绍几种双链路网络通信的案例。 5GWiFi冗余传输 双Socket绑定不同网络接口&#xff1a;通过Android的ConnectivityManager绑定5G蜂窝网络和WiFi的Socket连接&…...

Pytest测试用例执行跳过的3种方式

文章目录 1.前言2.使用 pytest.mark.skip 标记无条件跳过3.使用 pytest.mark.skipif 标记根据条件跳过4. 执行pytest.skip()方法跳过测试用例 1.前言 在实际场景中&#xff0c;我们可能某条测试用例没写完&#xff0c;代码执行时会报错&#xff0c;或者是在一些条件下不让某些…...