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 报告直观分析结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29937.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建BOA服务器

BOA服务器是嵌入式常用的服务器类型,嵌入式程序作为后端时候如果想配合网页进行显示,利用BOA服务器搭建网络界面是不错的选择 首先下载boa官方安装包 Boa Webserver 下载后传输到Ubuntu随便文件夹,解压 tar -xvf boa-0.94.13.tar.gz 进入…

C# OPC DA获取DCS数据(提前配置DCOM)

OPC DA配置操作手册 配置完成后,访问远程ip,就能获取到服务 C#使用Interop.OPCAutomation采集OPC DA数据,支持订阅(数据变化)、单个读取、单个写入、断线重连

Ubuntu20.04搭建gerrit code review

一、环境准备 1. 安装 Java 环境‌ Gerrit 依赖 Java 运行环境(推荐 JDK 8): sudo apt install openjdk-11-jdk 验证安装: java -version ‌2. 安装 Git sudo apt install git ‌3. 可选依赖 数据库‌:Gerrit …

【FSM-3: 串行序列】

FSM-3:串行序列 1 Serial receiver FSM使用总结: 所有涉及输出的driver原则上用cur_sta;若是使用nxt_sta的相当于是提前一拍知道结果,所以对于输出必须要使用clocked reg,这样才能和cur_sta对应起来;描述声…

蓝桥杯 之 前缀和与查分

文章目录 题目求和棋盘挖矿 前缀和有利于快速求解 区间的和、异或值 、乘积等情况差分是前缀和的反操作 前缀和 一维前缀和: # 原始的数组num,下标从1到n n len(num) pre [0]*(n1) for i in range(n):pre[i1] pre[i] num[i] # 如果需要求解num[l] 到num[r] 的区…

国产化板卡设计原理图:2330-基于FMC接口的JFM7K325T PCIeX4 3U PXIe接口卡

基于FMC接口的JFM7K325T PCIeX4 3U PXIe接口卡 一、板卡概述 本板卡基于 FPGAJFM7K325T 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8、64bit DDR3容量2GByte,HPC的FMC连接器,板卡支持PXIE标准协议,其中XJ3…

计算机视觉之dlib人脸关键点绘制及微笑测试

dlib人脸关键点绘制及微笑测试 目录 dlib人脸关键点绘制及微笑测试1 dlib人脸关键点1.1 dlib1.2 人脸关键点检测1.3 检测模型1.4 凸包1.5 笑容检测1.6 函数 2 人脸检测代码2.1 关键点绘制2.2 关键点连线2.3 微笑检测 1 dlib人脸关键点 1.1 dlib dlib 是一个强大的机器学习库&a…

一周学会Flask3 Python Web开发-SQLAlchemy连接Mysql数据库

锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili app.py下,我们先配置数据库连接,然后写一个简单sql测试。 连接配置,包括用户名&#xff…

blender看不到导入的模型

参考:blender 快捷键 常见问题_blender材质预览快捷键-CSDN博客 方法一:视图-裁剪起点,设置一个很大的值 方法二:选中所有对象,对齐视图-视图对齐活动项-选择一个视图

CES Asia 2025增设未来办公教育板块,科技变革再掀高潮

作为亚洲消费电子领域一年一度的行业盛会,CES Asia 2025(第七届亚洲消费电子技术贸易展)即将盛大启幕。今年展会规模再度升级,预计将吸引超过500家全球展商参展,专业观众人数有望突破10万。除了聚焦人工智能、物联网、…

【目标检测】【NeuralPS 2023】Gold-YOLO:通过收集与分发机制实现的高效目标检测器

Gold-YOLO: Efficient Object Detector via Gather-and-Distribute Mechanism Gold-YOLO:通过收集与分发机制实现的高效目标检测器 0.论文摘要 在过去的几年中,YOLO系列模型已成为实时目标检测领域的领先方法。许多研究通过修改架构、增强数…

利用python实现对Excel文件中数据元组的自定义排序

问题引入: 假设你是一个浙江省水果超市的老板,统筹11个下辖地市的水果产量。假设11个地市生产的水果包括:苹果、香蕉和西瓜。你如何快速得到某种水果产量突出(排名前几)的地市?产量落后(排名后…

数学建模笔记——层次分析法(AHP)

本文借鉴了数学建模清风老师的视频和课件,如有错误欢迎大家批评指正。原视频地址:清风数学建模:https://www.bilibili.com/video/BV1DW411s7wihttps://www.bilibili.com/video/BV1DW411s7wi 1.预备知识 层次分析法: 层次分析法(The Analytic Hierarchy Process,AHP)是一…

koa-session设置Cookie后获取不到

在谷歌浏览器中请求获取不到cookie问题之一(谷歌安全策略) 场景 前端使用 axios 请求,项目地址:http://192.168.8.1:5173 import axios from axiosconst request axios.create({baseURL: http://127.0.0.1:3001/,timeout: 60000,…

Greenplum6.19集群搭建

一,安装说明 1.1环境说明 1、首先确定部署的环境,确定下服务器的端口,一般默认是22的端口; 2、当前这份文档是服务器处于10022端口下部署的(现场生产环境要求,22端口在生产环境存在安全隐患)&…

SAP DOI EXCEL宏的使用

OAOR里上传EXCEL模版 屏幕初始化PBO创建DOI EXCEL对象,并填充EXCEL内容 *&---------------------------------------------------------------------* *& Module INIT_DOI_DISPLAY_9100 OUTPUT *&--------------------------------------------…

排序算法漫游:从冒泡到堆排的底层逻辑与性能厮杀

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连,小编尽全力做到更好 欢迎您分享给更多人哦 今天我们来学习七大排序算法 一:直接插入排序 直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序…

【VBA】WPS/PPT设置标题字体

通过VBA,配合左上角的快速访问工具栏,实现自动化调整 选中文本框的 字体位置、大小、颜色。 配合quicker更加便捷 Sub DisableAutoWrapAndFormat()Dim shp As Shape 检查是否选中了一个形状(文本框)If ActiveWindow.Selection.Typ…

大语言模型从理论到实践(第二版)-学习笔记(绪论)

大语言模型的基本概念 1.理解语言是人工智能算法获取知识的前提 2.语言模型的目标就是对自然语言的概率分布建模 3.词汇表 V 上的语言模型,由函数 P(w1w2 wm) 表示,可以形式化地构建为词序列 w1w2 wm 的概率分布,表示词序列 w1w2 wm…

Qt常用控件之 纵向列表QListWidget

纵向列表QListWidget QListWidget 是一个纵向列表控件。 QListWidget属性 属性说明currentRow当前被选中的是第几行。count一共有多少行。sortingEnabled是否允许排序。isWrapping是否允许换行。itemAlignment元素的对齐方式。selectRectVisible被选中的元素矩形是否可见。s…