Pytest 是什么
Pytest 是 Python 生态中最流行的 测试框架,用于编写、运行和组织单元测试、功能测试甚至复杂的集成测试。它以简洁的语法、强大的插件系统和高度可扩展性著称,广泛应用于 Python 项目的自动化测试中。以下是其核心特性和使用详解:
Pytest 的核心特点
-
极简语法
- 无需继承类,使用普通函数和
assert
语句即可编写测试。 - 示例:
def test_add():assert 1 + 1 == 2 # 直接使用 assert,无需复杂断言方法
- 无需继承类,使用普通函数和
-
自动发现测试
- 自动识别以
test_
开头的函数或Test
开头的类中的测试方法。
- 自动识别以
-
丰富的断言
- 直接使用 Python 原生
assert
,失败时输出详细上下文(如变量值)。 - 对比 JUnit 的
assertEquals(expected, actual)
,Pytest 更直观:assert user.name == "Alice" # 失败时会显示 user.name 的实际值
- 直接使用 Python 原生
-
Fixture 机制
- 通过
@pytest.fixture
定义测试依赖(如数据库连接、临时文件),实现复用和依赖注入。@pytest.fixture def database():conn = create_db_connection()yield conn # 测试结束后自动清理conn.close()def test_query(database): # 自动注入 fixtureresult = database.execute("SELECT 1")assert result == 1
- 通过
-
参数化测试
- 用
@pytest.mark.parametrize
轻松测试多组输入。@pytest.mark.parametrize("a, b, expected", [(1, 2, 3), (0, 0, 0)]) def test_add(a, b, expected):assert a + b == expected
- 用
-
插件生态
- 支持 1000+ 插件扩展功能,例如:
pytest-cov
:生成代码覆盖率报告。pytest-xdist
:并行运行测试。pytest-mock
:集成 Mock 功能。
- 支持 1000+ 插件扩展功能,例如:
Pytest 的适用场景
- 单元测试:验证函数或类的逻辑。
- API 测试:结合
requests
库测试 HTTP 接口。 - UI 自动化:与 Selenium 或 Playwright 搭配使用。
- 数据库测试:通过 Fixture 管理测试数据。
Pytest vs. Unittest(Python 标准库)
特性 | Pytest | Unittest |
---|---|---|
语法 | 简洁(assert ) | 冗长(self.assertEqual() ) |
Fixture | 支持(@pytest.fixture ) | 需手动实现 setUp() /tearDown() |
参数化 | 原生支持(@parametrize ) | 需依赖 subTest 或第三方库 |
插件生态 | 丰富 | 有限 |
报告输出 | 彩色输出,详细信息 | 基础格式 |
快速开始
- 安装 Pytest:
pip install pytest
- 编写测试文件(如
test_sample.py
):def func(x):return x + 1def test_answer():assert func(3) == 4 # 测试通过assert func(5) == 6 # 测试通过
- 运行测试:
输出示例:pytest test_sample.py # 运行指定文件 pytest # 自动发现并运行所有测试
================ test session starts ================= collected 2 items test_sample.py .. [100%] ================ 2 passed in 0.01s ==================
高级功能示例
1. Mock 对象测试
from unittest.mock import Mockdef test_mock():mock = Mock(return_value=42)assert mock() == 42 # 模拟函数调用
2. 跳过测试
@pytest.mark.skip(reason="尚未实现")
def test_skip():assert False
3. 异常断言
def test_exception():with pytest.raises(ValueError):int("invalid") # 预期抛出 ValueError
为什么选择 Pytest?
- 减少样板代码:更少的代码,更多的测试。
- 调试友好:失败时自动输出局部变量和调用栈。
- 社区支持:广泛用于开源项目(如 Django、NumPy)。
- 与 CI/CD 集成:无缝对接 GitHub Actions、Jenkins。
总结:Pytest 是 Python 测试的“瑞士军刀”,适合从简单单元测试到复杂系统验证的所有场景。若项目已使用 unittest
,也可通过 pytest
直接运行旧测试,逐步迁移。
相关文章:
Pytest 是什么
Pytest 是 Python 生态中最流行的 测试框架,用于编写、运行和组织单元测试、功能测试甚至复杂的集成测试。它以简洁的语法、强大的插件系统和高度可扩展性著称,广泛应用于 Python 项目的自动化测试中。以下是其核心特性和使用详解: Pytest 的…...

ElasticSearch简介及常用操作指南
一. ElasticSearch简介 ElasticSearch 是一个基于 Lucene 构建的开源、分布式、RESTful 风格的搜索和分析引擎。 1. 核心功能 强大的搜索能力 它能够提供全文检索功能。例如,在海量的文档数据中,可以快速准确地查找到包含特定关键词的文档。这在处理诸如…...
缓存常见问题:缓存穿透、缓存雪崩以及缓存击穿
缓存常见问题 一、缓存穿透 (Cache Penetration) 是什么 缓存穿透是指客户端持续请求一个缓存和数据库中都根本不存在的数据。这导致每次请求都会先查缓存(未命中),然后穿透到数据库查询(也未命中)。如果这类请求量…...

纤维组织效应偏斜如何影响您的高速设计
随着比特率继续飙升,光纤编织效应 (FWE) 偏移,也称为玻璃编织偏移 (GWS),正变得越来越成为一个问题。今天的 56GB/s 是高速路由器中最先进的,而 112 GB/s 指日可待。而用于个人计算机…...
【深度学习】sglang 的部署参数详解
SGLang 的部署参数详解 SGLang(Structured Generation Language)是一个高性能的大语言模型推理框架,专为结构化生成和多模态应用设计。本文将全面介绍SGLang的部署参数,帮助你充分发挥其性能潜力。 🚀 SGLang 项目概览 SGLang是由UC Berkeley开发的新一代LLM推理引擎,…...
SDL2常用函数:SDL_RendererSDL_CreateRendererSDL_RenderCopySDL_RenderPresent
SDL 渲染器系统详解 SDL_Renderer 概述 SDL_Renderer 是 SDL 2.0 引入的核心渲染抽象,它提供了一种高效的、硬件加速的 2D 渲染方式,比传统的表面(Surface)操作更加高效和灵活。 主要函数 1. SDL_CreateRenderer - 创建渲染器 SDL_Renderer* SDL_Cr…...
[git]忽略.gitignore文件
git rm --cached .gitignore 是一个 Git 命令,主要用于 从版本控制中移除已追踪的 .gitignore 文件,但保留该文件在本地工作目录中。以下是详细解析: 一、命令拆解与核心作用 语法解析 git rm:Git 的删除命令,用于从版本库(Repository)中移除文件。--cached:关键参数…...
FEMFAT许可的有效期限
在工程仿真领域,FEMFAT作为一款领先的疲劳分析软件,为用户提供了强大的功能和卓越的性能。然而,为了确保软件的合法使用和持续合规,了解FEMFAT许可的有效期限至关重要。本文将为您详细解读FEMFAT许可的有效期限,帮助您…...

Rust使用Cargo构建项目
文章目录 你好,Cargo!验证Cargo安装使用Cargo创建项目新建项目配置文件解析默认代码结构 Cargo工作流常用命令速查表详细使用说明1. 编译项目2. 运行程序3.快速检查4. 发布版本构建 Cargo的设计哲学约定优于配置工程化优势 开发建议1. 新项目初始化2. …...

Python训练营打卡Day39
DAY 39 图像数据与显存 知识点回顾 1.图像数据的格式:灰度和彩色数据 2.模型的定义 3.显存占用的4种地方 a.模型参数梯度参数 b.优化器参数 c.数据批量所占显存 d.神经元输出中间状态 4.batchisize和训练的关系 作业:今日代码较少,理解内容…...

UE5蓝图中播放背景音乐和使用代码播放声音
UE5蓝图中播放背景音乐 1.创建背景音乐Cube 2.勾选looping 循环播放背景音乐 3.在关卡蓝图中 Event BeginPlay-PlaySound2D Sound选择自己创建的Bgm_Cube 蓝图播放声音方法二: 使用代码播放声音方法一 .h文件中 头文件引用 #include "Kismet/GameplayS…...

AI 赋能数据可视化:漏斗图制作的创新攻略
在数据可视化的广阔天地里,漏斗图以其独特的形状和强大的功能,成为展示流程转化、分析数据变化的得力助手。传统绘制漏斗图的方式往往需要耗费大量时间和精力,对使用者的绘图技能和软件操作熟练度要求颇高。但随着技术的蓬勃发展,…...

用 Python 模拟下雨效果
用 Python 模拟下雨效果 雨天别有一番浪漫情怀:淅淅沥沥的雨滴、湿润的空气、朦胧的光影……在屏幕上也能感受下雨的美妙。本文将带你用一份简单的 Python 脚本,手把手实现「下雨效果」动画。文章深入浅出,零基础也能快速上手,完…...

C#对象集合去重的一种方式
前言 现在AI越来越强大了,有很多问题其实不需要在去各个网站上查了,直接问AI就好了,但是呢,AI给的代码可能能用,也可能需要调整,但是自己肯定是要会的,所以还是总结一下吧。 问题 如果有一个…...
【LangChain】
以下是关于 LangChain框架 各核心组件的详细解析,结合其功能定位、技术实现和实际应用场景: 一、LangChain Libraries(核心库) 功能定位 跨语言支持:提供Python/JS双版本API,统一不同语言的LLM开发生态 …...
Java 面试实录:从Spring到微服务的技术探讨
在一个明亮的会议室里,严肃的面试官与搞笑的程序员谢飞机正进行一场关于Java技术栈的面试。场景设定在一家知名互联网大厂,他们的对话充满了技术性与娱乐性。 第一轮:Spring框架与数据库 面试官:“谢飞机,能解释一下…...

在ROS2(humble)+Gazebo+rqt下,实时显示仿真无人机的相机图像
文章目录 前言一、版本检查检查ROS2版本 二、步骤1.下载对应版本的PX4(1)检查PX4版本(2)修改文件名(3)下载正确的PX4版本 2.下载对应版本的Gazebo(1)检查Gazebo版本(2)卸载不正确的Gazebo版本(3)下载正确的Gazebo版本 3.安装bridge包4.启动 总结 前言 在ROS2的环境下ÿ…...

github双重认证怎么做
引言 好久没登陆github了, 今天登陆github后,提醒进行2FA认证。 查看了github通知,自 2023 年 3 月起,GitHub 要求所有在 GitHub.com 上贡献代码的用户启用一种或多种形式的双重身份验证 (2FA)。 假如你也遇到这个问题…...

数据的类型——认识你的数据
第02篇:数据的类型——认识你的数据 写在前面:嗨,大家好!我是蓝皮怪。在上一篇文章中,我们聊了统计学的基本概念,今天我们来深入了解一个非常重要的话题——数据的类型。你可能会想:"数据就…...
DeepSeek与AI提示语设计的全面指南
文章目录 什么是提示语设计?为什么提示语设计如此重要?DeepSeek提示语设计的基本原则1. 明确性是王道2. 结构化你的需求3. 提供上下文4. 指定输出格式5. 使用示例6. 设定角色 进阶技巧:让你的提示语更上一层楼1. 链式思考2. 反向提问3. 限定条…...
Kafka KRaft + SSL + SASL/PLAIN 部署文档
本文档介绍如何在 Windows 环境下部署 Kafka 4.x,使用 KRaft 模式、SSL 加密和 SASL/PLAIN 认证。stevensu1/kafka_2.13-4.0.0 1. 环境准备 JDK 17 或更高版本Kafka 4.x 版本(本文档基于 kafka_2.13-4.0.0) 2. 目录结构 D:\kafka_2.13-4.…...
Codeforces Round 1027 (Div. 3)
A. Square Year 题目大意:拆分完全平方数。 【解题】:如果是完全平方数输出0 平方根就行,不是就输出-1。 code: #include <iostream> #include <string> #include <cmath> using namespace std; typedef long long LL…...
动态内容加载时,爬虫应如何处理?
处理动态内容加载是爬虫开发中的一个常见挑战。许多现代网站使用 JavaScript 动态加载内容,这意味着页面的某些部分可能在初始加载时并不存在,而是通过后续的 AJAX 请求或 JavaScript 执行动态生成的。为了处理这种情况,爬虫需要能够模拟浏览…...

第五十二节:增强现实基础-简单 AR 应用实现
引言 增强现实(Augmented Reality, AR)是一种将虚拟信息叠加到真实世界的技术,广泛应用于游戏、教育、工业维护等领域。与传统虚拟现实(VR)不同,AR强调虚实结合,用户无需完全沉浸到虚拟环境中。本文将通过Python和OpenCV库,从零开始实现一个基础的AR应用:在检测到特定…...
前端高频面试题1:HTML/CSS/浏览器/计算机网络
目录 1.为什么会出现margin塌陷? 2.如何解决margin塌陷? 3.HTML5有哪些新特性? 4.常见的语义化标签有哪些?语义化标签的好处? 5.使用css和js做动画有何优劣 6.如何实现文本超出展示省略号 7.deep在css中存在吗&…...

LLaMaFactory 微调QwenCoder模型
步骤一:准备LLamaFactory环境 首先,让我们尝试使用github的方式克隆仓库: git config --global http.sslVerify false && git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git # 创建新环境,指定 Python 版本(以 3.…...
Git全流程操作指南
Git全流程操作指南 一、Git 环境配置 1. 安装 Git Windows:下载 Git for Windows macOS:brew install git Linux: sudo apt-get update && sudo apt-get install git # Debian/Ubuntu sudo yum install git …...

【最新版】Arduino IDE的安装入门Demo
1、背景说明 1、本教程编写日期为2025-5-24 2、Arduino IDE的版本为:Arduino IDE 2.3.6 3、使用的Arduino为Arduino Uno 1、ArduinoIDE的安装 1、下载。网址如下:官网 2、然后一路安装即可。 期间会默认安装相关驱动,默认安装即可。 3、安…...

不起火,不爆炸,高速摄像机、数字图像相关DIC技术在动力电池新国标安全性能测试中的应用
2026年7月1日,我国将正式实施GB38031-2025《电动汽车用动力蓄电池安全要求》——这项被称为“史上最严电池安全令”的新国标,首次将“热失控不蔓延、不起火、不爆炸”从企业技术储备上升为强制性要求,标志着电池安全进入“零容忍”时代&#…...

thinkadmin中使用layui日期选择器,数据库存储时间戳
form.html <div class="layui-form-item label-required-prev" id="jiezhi_time-div">...