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

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,并能在项目中高效地使用它进行自动化测试。

相关文章:

pytest 的简单介绍

官方文档:pytest 文档 1. pytest 概述 pytest 是一个功能强大的 Python 测试框架,旨在简化单元测试和功能测试的编写与执行。它不仅支持简单的单元测试,还能进行更复杂的测试,如数据驱动的测试、并发测试等。pytest 支持自动化发…...

【C语言】库函数常见的陷阱与缺陷(2):字符串转化函数

目录 一、atoi 函数 1.1. 功能与用法 1.2. 陷阱与缺陷 1.2.1. 输入验证不足 1.2.2. 溢出问题 1.3 安全替代 1.4. 代码示例 二、atof 函数 2.1. 功能与用法 2.2. 陷阱与缺陷 2.3. 安全使用建议 2.4. 代码示例 三、strtol 函数 3.1. 功能与用法 3.2. 陷阱与缺陷 …...

【LeetCode每日一题】LeetCode 976.三角形的最大周长

LeetCode 976.三角形的最大周长 题目描述 给定一个包含非负整数的数组 nums,其中每个元素表示一个线段的长度。你需要从中选出三个线段,组成一个三角形,使得三角形的周长最大,并返回这个最大周长。如果无法组成三角形&#xff0…...

在 Ubuntu 24 上安装 Redis 7.0.15 并配置允许所有 IP 访问

前提条件 一台运行 Ubuntu 24 的服务器拥有 sudo 权限的用户 步骤一:更新系统包 首先,确保系统包是最新的,以避免潜在的依赖问题。 sudo apt update sudo apt upgrade -y步骤二:安装编译 Redis 所需的依赖 Redis 需要一些编译…...

C# 中的异常处理:构建健壮和可靠的程序

C#中的异常处理(Exception Handling)。异常处理是编程中非常重要的一部分,它允许开发者优雅地处理程序运行时可能出现的错误或意外情况。通过有效的异常处理,可以使应用程序更加健壮、可靠,并提供更好的用户体验。以下…...

Prime2_解法二:openssl解密凭据

Prime2_解法二:openssl解密凭据 本博客提供的所有信息仅供学习和研究目的,旨在提高读者的网络安全意识和技术能力。请在合法合规的前提下使用本文中提供的任何技术、方法或工具。如果您选择使用本博客中的任何信息进行非法活动,您将独自承担全…...

数据结构 ——数状存储的基本概念

数据结构 ——数状存储的基本概念 一、树状存储基本概念 1、 深度(层数):计算一个节点的深度,从根节点算起(从1开始计数),到该节点所经过的节点数(包括此节点)为树的深度…...

【网盘系统】递归删除批量文件、从回收站恢复文件、彻底删除文件

为何需要用到递归? 在网盘系统中,文件的类型分为文件和文件夹两种类型。当我们想要批量删除文件时,不乏其中会包含文件夹,而想要删除这个文件夹,自然其中所包含的文件都要删除,而其中所包含的文件也有可能…...

C++ 列表初始化(initializer_list)

列表初始化(initializer_list) 列表初始化是C中的一种语法特性,引入于C11,用于更简单直观地初始化变量、对象或容器。它使用花括号 {},提供了更安全的初始化方式,避免了类型窄化转换等潜在错误。 定义 列表初始化是用花括号 {}…...

【Keil】Keil MDK 已经不再提供 ARM Compiler v5

该问题出现在 Keil MDK v5.12 之后 用必应搜索相关问题,发现早已在 ARM community 提了 How can I install Compiler Version 5 for Keil vision 5 回答给出了这个文档 Documentation - Arm Developer 文档提到了 ARM Compiler 5 的下载地址,但是得登录 …...

Knowledge Graph Studio:让知识图谱构建更简单、更智能

一、前言 上周和研究院的同事讨论 2025 年大模型产品规划时,让我产生了一些疑惑和不解,因为从大家交流的规划方向来看,更多的还是集中在Prompt提示词工程(包括提示词的管理、测试、评估、调优)这一块规划的确实挺细&a…...

【jvm】垃圾判别阶段算法

目录 1. 说明2. 引用计数算法2. 可达性分析算法3. 垃圾判别阶段的过程 1. 说明 1.JVM主要使用两种垃圾判别算法:引用计数算法和可达性分析算法。 2. 引用计数算法 1.原理:为每个对象维护一个引用计数器,每当有地方引用该对象时&#xff0c…...

深入理解Linux进程管理机制

个人主页:chian-ocean 文章专栏-Linux 前言 进程是现代操作系统中一个不可或缺的概念,其主要目的在于管理资源、实现并发、提高系统效率,并确保系统的稳定性和安全性。 进程的定义 进程(Process) 是计算机操作系统中…...

OV2640摄像头模块介绍

目录 一、引言 二、模块概述 三、技术特点 四、工作原理 五、接口类型 六、应用领域 七、使用方法 八、参数设置 九、图像数据处理 十、调试和故障排除 十一、结语 一、引言 在当今的科技时代,图像采集和处理技术在众多领域发挥着至关重要的作用。其中&…...

机器人的动力学前馈控制

机器人前馈技术可加快伺服驱动器内部的误差收敛速度,进而改善机器人的动态响应特性,解决机器人在运动过程中的抖动问题,提升机器人系统的精度和效率。 对于关节型机器人而言,在理想的刚性连接下,若给定每个关节所需要的…...

Python+OpenCV系列:图像的几何变换

Python OpenCV 系列:图像的几何变换 引言 在图像处理领域,几何变换是一个非常重要的操作,它可以改变图像的位置、大小、方向或形状。在计算机视觉中,这些操作对于图像预处理、特征提取和图像增强至关重要。本文将介绍如何利用 …...

IC验证基础知识系列随笔

一、断言 and 和 和 intersect 区别 And 指的是两个序列具有相同的起始点,终点可以不同。 Intersect 指的是两个序列具有相同的起始点和终点。 Or 指的是两个序列只要满足一个就可以 Throughout 指的是满足前面要求才能执行后面的序列 二、Break;co…...

网络测速工具

1. SPEEDTEST https://www.speedtest.net/ 2. 测速网 测速网 - 专业测网速, 网速测试, 宽带提速, 游戏测速, 直播测速, 5G测速, 物联网监测,Wi-Fi 7,Wi-Fi 6,FTTR,全屋Wi-Fi - SpeedTest.cn 3. 字节比特换算 bps(bits per second) 字节和比特的换算…...

windows将文件推给Android真机/实机

记录一下 因为以前只试过从真机实机中将文件推给windows 但是从windows只简单复制粘贴的话会一直报错。 1.电脑安装adb 2.手机开启开发者模式 usb调试 3.usb连接选择文件传输 4.推送命令adb push 文件路径 /sdcard/download 步骤1和2和3不作赘述,可以搜相关配置教程…...

Scratch教学作品 | 3D飞行模拟器——体验飞行的无限乐趣! ✈️

今天为大家推荐一款令人惊叹的Scratch作品——《3D飞行模拟器》!由BamBozzle制作,这款游戏完全用Scratch构建,带你体验开放世界飞行的自由与乐趣。从起飞到降落,每一步都需要你的精准操作!更棒的是,这款游戏…...

nonolog转化为ctf的困难

nonolog转化为ctf的困难 nanolog分析的中间的总结二者之间的差别 nanolog分析的中间的总结 如果目标是转nanolog为CTF格式,最重要的应该是meta的定义的转换的问题了。 目前我是稍有气馁。 感觉这不是一个好的方向。 如果领导能给连续的时间,完全开发自定…...

Sqoop导入数据(mysql---->>hive)

目录 数据传输流程脚本报错和异常说明1. Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf2. 数据导入hive后显示NULL 数据传输流程 mysql---->>hdfs---->>hive 数据从mysql表中取出,放到hdfs上(由targ…...

vivado bd文件复制

不同工程是无法进行BD文件复制的,可以通过将被复制的BD文件添加到需要复制的BD文件的工程中,然后再工程内进行复制...

2024年深圳杯数学建模C题编译器版本的识别问题解题全过程文档及程序

2024年深圳杯数学建模 C题 编译器版本的识别问题 原题再现: 作为一种重要的工具,电子计算机自诞生以来,经历了极为快速的发展。区区百年的时间内,无论从体积、能耗、计算速度,还是应用能力等方面,电子计算…...

介绍一下希尔排序法(c基础)

hi , I am 36 适合对象c语言初学者 希尔排序(Shell Sort)是一种改进的插入排序算法,它通过将原始数据分成多个子序列来改善插入排序在处理大规模无序数组时性能较差的情况。 基本原理 希尔排序的基本思想是先将整个待排序的记录序列分割成为…...

SQL,根据数据的时间跨度进行不同粒度的统计

MSSQL 的某个视图会生成时间跨度不同的数据,当时间跨度小于 30 天时: idbranchIdtotalPricecreatedAt8512718.662022-07-03 08:49:27.7272613832.692022-07-06 09:08:06.8808919569.852022-07-07 04:13:09.2308011523.622022-07-07 04:38:29.3131512500…...

OPenCV 图片局部放大

m_image cv::imread("C:/Code/JPG/1.jpg");if (m_image.empty()) return;cv::imshow("原始图像", m_image); // TODO: 在此添加控件通知处理程序代码int width m_image.cols;int height m_image.rows;// 确定要放大的区域(这里是图像中心部分…...

【C#设计模式(19)——备忘录模式(MementoPattern)】

前言 备忘录模式:将想要备份的信息交给备忘录对象来管理。通过设置初始、备份、修改、恢复等状态展示备忘录模式的使用。 代码 //备忘录类 public class Memento {private string state;public string State { get>state;}public Memento(string state){this.st…...

使用 Nginx 在同一端口部署两个前端项目并配置子路径

在现代 Web 开发中,我们经常需要在同一台服务器上部署多个前端项目。这不仅可以节省资源,还可以简化管理。本文将指导你如何使用Nginx在同一端口上部署两个前端项目,并通过配置子路径来区分它们。 环境准备 首先,我们需要准备两…...

CISC和RISC的区别

CISC是什么 CISC是一种指令集设计方式,全程叫复杂指令集,这种指令设计模式包含大量的复杂指令和复杂的寻址方式, 以下是CISC架构的一些主要特点: 丰富的指令集:CISC处理器通常包含大量的指令,这些指令覆盖…...

学生信息管理系统(简化版)后端接口

目录 allAPI __init__.py是空文件,目的让python知道这个文件夹是个包 ClassInfo.py from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from API.database import get_db, Base from sqlalchemy import Column, String,…...

一、开启 GD32 单片机的学习之门

文章目录 一、开启GD32单片机的学习之门二、筑牢根基:GD32单片机基础知识全解析(一)单片机概述 三、开发环境搭建(一)软件下载与安装(二)安装GD32F450设备支持包(三)编译…...

计算生成报价单小程序系统开发方案

计算生成报价单小程序报价系统,是根据商品品牌、类型、型号、规格、芯数、特性、颜色、分类进行选择不同的参数进行生成报价单,要求报价单支持生成图片、pdf、excel表格。 计算生成报价单小程序系统的主要功能模块有: 1、在线生成报价单&…...

高效整合聚水潭库存数据至MySQL的实现

聚水潭数据集成到MySQL:商品库存查询案例分享 在本次技术案例中,我们将详细探讨如何通过轻易云数据集成平台,将聚水潭的商品库存数据高效、可靠地集成到MySQL数据库中。具体方案为“聚水潭-商品库存查询-->BI彩度-商品库存表”&#xff0…...

深入理解 JVM 的栈帧结构

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...

爬虫基础之HTTP基本原理

URL和URI 我们先了解一下 URI和 URL。URI的全称为 Uniform Resource ldentifer,即统一资源标志符;URL的全称为 Universal Resource Locator,即统一资源定位符。它们是什么意思呢?举例来说,https:/github.com/favicon.ico 既是一个 URI,也是…...

PyQt5:一个逗号引发的闪退血案

【日常小计】 在开发PyQt5程序时,调用了一个写入excel表格的后端方法,但是每次打开页面点击对应的动作,窗口就会闪退,而且Python后台也没有提示出任何的异常堆栈,后来经过在后端一点一点的单点测试,终于发…...

python学opencv|读取图像(五)读取灰度图像像素

【1】引言 前序学习了图像的基本读取,掌握了imread()、imshow()和imwrite()函数的基本功能和使用技巧,参考文章链接为: python学opencv|读取图像-CSDN博客 然后陆续掌握了彩色图像保存、图像放大和缩小以及对imshow()函数的大胆尝试技巧&a…...

LiDAR点云 反射强度 常见物体反射强度

1.激光点云发射的点无法全部被反射回来的原因 激光点云发射的点无法全部被反射回来的原因主要包括以下几点: 目标物表面特性:某些物体表面具有高反射率,导致激光雷达接收到的反射能量过强,从而产生噪点,影响点云数据的…...

零基础微信小程序开发——WXML 模板语法之事件绑定(保姆级教程+超详细)

🎥 作者简介: CSDN\阿里云\腾讯云\华为云开发社区优质创作者,专注分享大数据、Python、数据库、人工智能等领域的优质内容 🌸个人主页: 长风清留杨的博客 🍃形式准则: 无论成就大小,…...

qt QNetworkAccessManager详解

1、概述 QNetworkAccessManager是QtNetwork模块中的一个核心类,它允许应用程序发送网络请求并接收响应。该类是网络通信的基石,提供了一种方便的方式来处理常见的网络协议,如HTTP、HTTPS等。QNetworkAccessManager对象持有其发送的请求的通用…...

在2023idea中如何创建SpringBoot

目录 一.下载和安装 Maven 1.前往 https://maven.apache.org/download.cgi 下载最新版的 Maven 程序 2.将文件解压到D:Program FilesApachemaven目录 3.新建环境变量MAVEN_HOME,赋值D:Program FilesApachemaven 4.编辑环境变量Path,追加%MAVEN_HOME…...

R语言医学数据分析实践-R语言的数据结构

【图书推荐】《R语言医学数据分析实践》-CSDN博客 《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com) R语言编程_夏天又到了的博客-CSDN博客 在R语言中,数据结构是非常关键的部分,它提…...

PID算法

PID算法是闭环控制中的核心算法之一,它结合了比例(P)、积分(I)和微分(D)三种控制策略,能够实现对被控对象的精确控制。以下将详细介绍PID算法,并针对P、I、D分别举出三个…...

C++day2

1.利用函数重载&#xff0c;实现对整形数组的冒泡排序&#xff0c;对浮点型数组的冒泡排序 #include <iostream>using namespace std;int bubblesort(int a[]) {int i,j,temp;for(i1;i<5;i){for(j0;j<5-i;j){if(a[j]>a[j1]){temp a[j];a[j] a[j1];a[j1] tem…...

RFdiffusion ContigMap类初始化方法解读

功能概述 __init__ 方法是 ContigMap 类的初始化函数,其核心任务是构建和管理一个蛋白质序列和结构的映射系统,处理用户提供的输入数据(如片段信息、参考序列、掩码等),并生成内部所需的各种索引和映射,以便在蛋白质设计中有效地定义、解析和操作不同区域的结构和序列。…...

LeetCode 每日一题 2024/12/2-2024/12/8

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 12/2 52. N 皇后 II12/3 3274. 检查棋盘方格颜色是否相同12/4 2056. 棋盘上有效移动组合的数目12/5 3001. 捕获黑皇后需要的最少移动次数12/6 999. 可以被一步捕获的棋子数…...

5G模组AT命令脚本-关闭模组的IP过滤功能

关闭模组的IP过滤功能 关闭模组的IP过滤功能 5G 模组通常使用nat方式为 下挂设备或上位机提供上网服务&#xff0c;默认情况&#xff0c;不做NAt的包无法经由 模组转发&#xff0c;如果禁掉这个限制 &#xff0c;可使用本文中的配置命令本脚本用于关闭模组的IP过滤功能&#xf…...

得力DL-720C(new)标签热敏打印机

特点 适配标签宽度20-90mm的热敏标签纸&#xff0c;无需碳带。不适用于使用碳带上色的热转印纸&#xff08;如铜版纸&#xff09;。标签纸类型支持&#xff1a; 间隙纸&#xff08;靠间隙定位&#xff09;。得力自配的纸就是间隙纸&#xff0c;不透明。黑标纸&#xff08;靠背…...

openjdk17 jvm加载class文件,解析字段和方法,C++源码展示

##构造方法ClassFileParser&#xff0c;parse_stream解析文件流 ClassFileParser::ClassFileParser(ClassFileStream* stream,Symbol* name,ClassLoaderData* loader_data,const ClassLoadInfo* cl_info,Publicity pub_level,TRAPS) :_stream(stream),_class_name(NULL),_load…...