pytest 的简单介绍

官方文档:pytest 文档

1. pytest 概述

pytest 是一个功能强大的 Python 测试框架,旨在简化单元测试和功能测试的编写与执行。它不仅支持简单的单元测试,还能进行更复杂的测试,如数据驱动的测试、并发测试等。pytest 支持自动化发现测试、丰富的断言和灵活的插件机制,深受开发者和测试人员的喜爱。

2. 安装 pytest

要使用 pytest,你首先需要安装它,可以通过 pip 安装:

pip install pytest

3. 测试函数与测试类

在 pytest 中,测试函数通常以 test_ 开头,而测试类则是以 Test 开头。这是 pytest 的约定俗成规则。

  • 测试函数:测试用例应该是普通的 Python 函数,且函数名以 test_ 开头。

    def test_addition():assert 1 + 1 == 2
    
  • 测试类:如果需要组织多个相关的测试函数,可以使用测试类。测试类中的每个方法也需要以 test_ 开头。

    class TestMath:def test_addition(self):assert 1 + 1 == 2def test_subtraction(self):assert 2 - 1 == 1
    

4. 断言 (Assertion)

pytest 使用 Python 的内建 assert 语句来进行断言,而不是像其他测试框架那样使用专门的断言函数。pytest 会在断言失败时提供详细的错误信息,使调试更加容易。

def test_addition():assert 1 + 1 == 2

当断言失败时,pytest 会显示断言的表达式、实际结果和期望结果,帮助开发者快速定位问题。

5. 测试执行与输出

你可以使用 pytest 命令运行测试。假设你有一个测试文件 test_example.py,可以通过以下命令执行测试:

pytest test_example.py

pytest 会自动发现以 test_ 开头的函数并运行它们。默认情况下,pytest 会显示测试的简要输出,显示每个测试是否通过(.)、失败(F)或被跳过(s)。

如果想要更详细的输出,可以使用 -v(verbose)选项:

pytest -v test_example.py

6. 测试夹具 (Fixtures)

测试夹具是 pytest 的一大亮点。它们提供了一种在测试执行前准备资源、在测试执行后清理资源的机制。通过 @pytest.fixture 装饰器来定义夹具。

例如,创建一个数据库连接的夹具:

import pytest@pytest.fixture
def db_connection():# 假设这是连接数据库的代码db = create_database_connection()yield dbdb.close()  # 测试结束后关闭数据库连接

在测试函数中,pytest 会自动识别并提供 db_connection 作为参数:

def test_query(db_connection):result = db_connection.execute("SELECT * FROM users")assert len(result) > 0

7. 参数化 (Parametrize)

pytest 支持测试函数的参数化。使用 @pytest.mark.parametrize 装饰器可以自动生成多组测试数据,避免编写重复的测试代码。

例如,测试加法函数:

import pytest@pytest.mark.parametrize("a, b, expected", [(1, 1, 2),(2, 2, 4),(3, 3, 6),
])
def test_add(a, b, expected):assert a + b == expected

这样可以一次性运行多组测试,避免重复编写相似的测试代码。

8. 测试跳过与期望失败

  • 跳过测试:有时你可能需要跳过某个测试,例如在某些条件下(如操作系统版本不符合要求)。可以使用 @pytest.mark.skip@pytest.mark.skipif 来跳过测试。

    @pytest.mark.skip(reason="Test is not relevant for this version")
    def test_old_feature():pass
    
  • 期望失败:如果你知道某个测试会失败,并且希望 pytest 将其标记为失败而不是引发错误,可以使用 @pytest.mark.xfail

    @pytest.mark.xfail
    def test_buggy_feature():assert 1 + 1 == 3
    

9. 测试插件与扩展

pytest 拥有丰富的插件生态系统,可以扩展框架的功能。例如,pytest-cov 插件可以用来测量测试覆盖率,pytest-django 用于测试 Django 应用,pytest-mock 用于提供更强大的 mock 功能。

安装插件的例子:

pip install pytest-cov

使用插件:

pytest --cov=my_module test_my_module.py

10. 并行测试

pytest 支持并行执行测试,可以通过插件如 pytest-xdist 来实现。这样能够加快测试执行速度,尤其是在测试用例很多时非常有用。

安装并行插件:

pip install pytest-xdist

执行并行测试:

pytest -n 4  # 使用4个进程并行执行测试

11. 总结

pytest 是一个非常强大的测试框架,它不仅能够简化单元测试的编写,还支持许多高级功能,如夹具、参数化测试、并行测试等。通过灵活的插件机制,pytest 还能满足各种测试需求。希望这次的讲解能让你更好地理解 pytest,并能在项目中高效地使用它进行自动化测试。

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

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

相关文章

【ArcGIS微课1000例】0133:二维建筑物依据高度生成三维模型

拓展阅读:【ArcGIS Pro微课1000例】0032:创建具有指定高程Z值的矢量数据 文章目录 一、二维面要素拉伸实现三维显示二、依据高度实现要素转3D一、二维面要素拉伸实现三维显示 打开ArcScene软件,加载实验配套数据0133.rar中的建筑物.shp数据,如下图: 数据属性表中的Z为建筑…

快速搭建SpringBoot3+Vue3+ElementPlus管理系统

快速搭建SpringBoot3Vue3管理系统 前端项目搭建(默认开发环境:node20,Jdk17)创建项目并下载依赖--执行以下命令 前端项目搭建(默认开发环境:node20,Jdk17) 创建项目并下载依赖–执行以下命令 创建项目 y…

力扣--LCR 134.Pow(x,n)

题目 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000 示例 2: 输入:x 2.10000, n 3 输出:9.2610…

道可云人工智能元宇宙每日资讯|全国工商联人工智能委员会成立会议在南京举办

道可云元宇宙每日简报(2024年12月5日)讯,今日元宇宙新鲜事有: 全国工商联人工智能委员会成立会议在南京举办 全国工商联人工智能委员会成立会议日前在江苏省南京市举办。中央统战部副部长、全国工商联党组书记沈莹出席会议并讲话…

基于Qt的文字处理软件(二)

这期文章我们进行主窗口的一些函数的定义,同时导入一些文字处理软件的状态栏会用到的图标。下面图片是图标导入到项目后的一个示例,图标可以到阿里矢量图标库里面找到。 一、导入图标资源: 1.首先在项目目录的位置创建一个images的文件,然后将收集好的图…

如何使用WinCC DataMonitor基于Web发布浏览Excel报表文档

本文介绍使用 WinCC DataMonitor 的 "Excel Workbooks" 功能,通过 Excel 表格显示 WinCC 项目的过程值、归档变量值和报警归档消息。并可以通过 Web 发布浏览访问数据 1.WinCC DataMonitor是什么 ? DataMonitor 是 SIMATIC WinCC 工厂智能中…

element plus table组件多选获取数据id

首先给table加上 selection-change"handleSelectionChange"事件 示例 <el-table selection-change"handleSelectionChange" stripe:data"data?.slice((currentPage3 - 1) * pageSize3, currentPage3 * pageSize3)" style"width: 100%…

信号的捕捉

目录 一、内核态与用户态的切换 二、 sigaction 参数介绍​编辑 三、 signal 四、某个信号在正在捕捉期间&#xff0c;该信号不允许再次被递达 五、可重入与不可重入函数&#xff08;描述函数的特性&#xff09; 六、volatile关键字 七、SIGCHLD信号 一、内核态与用户态的…

UTS 2022 致命问题修复:达梦数据库,记录数支持100万条

UTS 数据传输系统升级说明 升级内容&#xff1a; 致命问题修复 达梦数据库作为数据源&#xff1a; 当单个时间戳的记录数超过 10,000 条时&#xff0c;系统读取可能出现问题&#xff0c;已针对该场景优化数据处理逻辑&#xff0c;提升读取性能与稳定性。当单个时间戳值的重复…

华为HCIE-Datacom认证笔试+实验考试介绍

华为HCIE数通认证考试是面向那些希望成为数通网络领域专家的人员&#xff0c;考试通常两部分&#xff1a;笔试和实验考试。 考试科目&#xff1a; HCIE-Datacom笔试考试内容&#xff1a; HCIE-Datacom V1.0考试覆盖数据通信领域路由交换高阶技术、企业网络架构全景、园区网络…

【Linux】NUMA如何梆核

在 NUMA&#xff08;非统一内存访问&#xff09;架构中&#xff0c;“绑核” 通常是指将特定的 CPU 核心&#xff08;或者 NUMA 节点&#xff09;与特定的内存区域绑定&#xff0c;以提高内存访问的局部性&#xff0c;减少跨节点的内存访问延迟。这个操作通常用于性能优化&…

vue实现页面自动滚动,鼠标悬浮暂停,移开继续

1、给div一个id <div class"kb_nei_new_left" id"chartsContainer">2、定义一个自动滚动的方法 autoSroll(Id) {// flag 为true时停止滚动var flag false;// 定时器var timer;function roll() {var h -1;timer setInterval(function () {flag …

可靠的人形探测,未完待续(I)

HI&#xff0c;there&#xff01;从紧张的项目中出来冒个泡&#xff01; 刚好想要验证一下mmWave在有人检测方面的应用&#xff0c;就看到了这个活动 - 瞌睡了有枕头属于是&#xff0c;活动策划好评&#xff01; 朋友曾关注汽车相关的技术领域&#xff0c;跟我吐槽过&#xff0…

Fastadmin地图插件在表单中的使用

表单中实现地图选择获取经纬度 1.Fastadmin后台安装地图选择插件地图位置(经纬度)选择插件 - 支持百度地图、高德地图、腾讯地图 – 基于ThinkPHP和Bootstrap的极速后台开发框架 2.腾讯地图开放平台后台创建应用创建KEY&#xff0c;配置逆地址解析额度。插件配置中配置腾讯地图…

如何防范顶级应用程序安全威胁

如今的网络攻击数量是五年前的两倍多。因此&#xff0c;掌握最新的应用程序安全威胁对于防止数据泄露、经济损失和声誉受损至关重要。您还需要实施强大的安全实践&#xff0c;以保护应用程序免受最常见和最危险的威胁。 顶级应用程序安全威胁......以及如何防范这些威胁 1. 注…

普通话水平测试50个命题说话题目(新大纲)

普通话水平测试最后一题为命题说话&#xff08;30 分&#xff0c;限时3分钟&#xff09;&#xff0c;总共 50 个话题。测试的时候从 50 个话题中随机抽取两个。考生从抽到的两个话题中任选一个进行说话测试即可。 以下是 50 个命题说话题目汇总&#xff1a; 1. 我的一天 2. …

2024年超大跨径钢结构桥梁创新技术论坛暨钢桥联盟年度工作会议顺利召开

12月5日&#xff0c;由中交公路规划设计院有限公司、装配化钢结构桥梁产业技术创新战略联盟主办&#xff0c;保利长大工程有限公司、中交第二航务工程局有限公司、中交第二公路工程局有限公司、中交路桥建设有限公司、中交西安筑路机械有限公司、南京现代综合交通实验室、巨力锁…

配置服务器的免密登录

在服务器中配置别名和免密登录 如果没有生成过公钥和密钥 ssh-keygen然后就生成了公钥和密钥&#xff0c;下一步进入.ssh文件夹 cd .ssh/可以看到文件夹中会多出来三个文件 id_rsa&#xff1a;密钥id_rsa.pub&#xff1a;公钥known_hosts&#xff1a;A通过ssh首次连接到B&am…

计算c++11 lambada表达式的大小

lambada表达式是什么? 详解&#xff1a;lambada表达式详解 我们知道lambada其实是一个匿名函数 &#xff0c; 它属于 可调用对象 类型。在 C 中&#xff0c;lambda 表达式会生成一个隐式定义的类&#xff0c;这个类重载了 operator()&#xff0c;使得该对象可以像函数一样被…

BERT的中文问答系统52(项目1,分py文件)

项目目录结构 XihuaChatbot/ ├── data/ │ ├── train_data.jsonl │ └── test_data.jsonl ├── logs/ ├── models/ ├── records/ ├── src/ │ ├── main.py │ ├── dataset.py │ ├── model.py │ ├── utils.py │ └── gui.p…