详细介绍:python pytest 学习笔记 Day02

news/2025/11/20 16:54:45/文章来源:https://www.cnblogs.com/gccbuaa/p/19247699

深入理解与使用 Pytest 缓存机制

概述:缓存是什么?失败运行管理的原理

Pytest 的缓存机制由 cacheprovider 内置插件提供,主要用途有二:

  1. 记录测试会话状态:自动记录上一次运行的成功/失败用例等信息,用于支持 --lf(只运行失败用例)、--ff(先运行失败用例)等命令行功能。
  2. 跨用例共享数据:通过 cache fixture,允许测试用例有意识地设置和获取缓存值,实现测试间的数据传递(如共享登录 Token)。

缓存目录(默认 .pytest_cache)和文件由 pytest 在首次运行时自动创建和管理。

缓存的应用场景与核心操作

1. 利用会话状态缓存提高效率

这是缓存最常用的功能,旨在快速验证问题。

  • 重新运行上次失败的测试pytest --last-failed (或 --lf
  • 先运行失败用例,再运行其他pytest --failed-first (或 --ff
  • 显示当前缓存内容(不运行测试):pytest --cache-show
  • 清空缓存pytest --cache-clear
  • ​预览测试集合pytest --collect-only

2. 使用 cache Fixture 共享数据

当测试用例间存在依赖时,可以使用 cache fixture 来显式地读写数据。

python
import pytest
def test_login(cache):token = "sample_token_123"# 将 token 存入缓存,key 建议用 '项目名/模块名/变量名' 格式cache.set("my_project/auth/token", token)assert True
def test_access_protected_resource(cache):# 从缓存中获取 token,如果不存在则返回 Nonetoken = cache.get("my_project/auth/token", None)assert token is not None# ... 使用 token 进行后续测试

注意cache.set() 和 cache.get() 的值需要是 JSON 可序列化的类型。

最佳实践与工作流

智能化测试工作流

结合缓存与标记,可以建立高效的工作流。

  1. 快速迭代:只运行上次失败的用例

    pytest --lf -v

  2. 运行核心功能(标记为 'smoke' 的测试)

    pytest -m "smoke" -v

  3. 提交前运行完整套件,但遇到少量失败即停止(避免长时间等待)

    pytest --maxfail=5 -v

测试集合预览:--collect-only参数

核心功能

--collect-only

是 pytest 的诊断和预览参数,它让 pytest 只收集和显示测试用例,而不实际执行任何测试代码。

主要用途​预览测试集合​:查看哪些测试用例会被 pytest 发现和执行

​验证测试筛选​:确认 -k、-m等参数是否正确工作

​调试测试发现​:排查为什么某些测试用例没有被发现

​获取测试统计​:快速了解测试套件的规模和结构

基本用法

基本收集:显示所有测试用例

pytest --collect-only

结合详细模式:显示更详细信息

pytest --collect-only -v

结合缓存功能预览失败测试

pytest --lf --collect-only -v

验证筛选条件

pytest --collect-only -k "login" -vpytest --collect-only -m "smoke" -v

在 CI/CD 中的策略

在持续集成环境中,通常每次会是一个全新的环境,因此缓存可能不持久。但你可以:

  • 使用 pytest --cache-clear 作为流水线第一步,确保测试环境纯净。
  • 主要依赖 cache fixture 来在同一次测试会话的用例间传递数据,而非跨流水线构建。

Pytest 跳过测试用例指南

在 pytest 中跳过测试用例是非常实用的功能,允许您根据特定条件不执行某些测试。以下是几种主要的跳过方法:

1. 无条件跳过测试

使用 @pytest.mark.skip 装饰器可以无条件跳过测试:

import pytest
@pytest.mark.skip(reason="此功能尚未实现")
def test_feature_not_implemented():assert False  # 这个测试不会运行
@pytest.mark.skip("跳过原因:等待外部依赖")
def test_with_external_dependency():# 这个测试也不会运行pass

2. 有条件跳过测试

使用 @pytest.mark.skipif 装饰器可以根据条件跳过测试:

import pytest
import sys
### 根据Python版本跳过
@pytest.mark.skipif(sys.version_info < (3, 8), reason="需要 Python 3.8 或更高版本")
def test_python38_feature():assert True
### 根据操作系统跳过
@pytest.mark.skipif(sys.platform != "win32", reason="仅支持 Windows 平台")
def test_windows_only():assert True
### 自定义条件跳过
IS_CI = os.environ.get('CI') == 'true'
@pytest.mark.skipif(IS_CI, reason="不在CI环境中运行此测试")
def test_local_only():assert True

3. 运行时动态跳过

在测试函数内部使用 pytest.skip() 函数:

def test_dynamic_skip():# 检查某些条件if not some_condition:pytest.skip("条件不满足,跳过测试")# 正常的测试逻辑assert something == expected_value

4. 跳过整个测试模块

在模块顶部使用 pytestmark

import pytest
### 跳过整个模块
pytestmark = pytest.mark.skip("整个模块被跳过")
### 或者有条件跳过整个模块
pytestmark = pytest.mark.skipif(condition, reason="条件跳过整个模块")

5. 跳过类中的所有测试

@pytest.mark.skip(reason="跳过整个测试类")
class TestSkipEntireClass:def test_method1(self):assert False  # 不会运行def test_method2(self):assert False  # 不会运行

6. 预期失败测试(XFail)

虽然不是真正的跳过,但 xfail 用于标记预期会失败的测试:

@pytest.mark.xfail(reason="已知问题,正在修复")
def test_known_bug():assert False  # 预期会失败,但还会运行
@pytest.mark.xfail(condition, reason="条件性预期失败")
def test_conditionally_expected_to_fail():# 某些操作pass

7. 跳过与参数化结合

import pytest
@pytest.mark.parametrize("input_value", [pytest.param(1, id="case_1"),pytest.param(2, id="case_2"),pytest.param(3, marks=pytest.mark.skip(reason="跳过大于2的值")),pytest.param(4, marks=pytest.mark.skip(reason="跳过大于2的值"))
])
def test_with_skip_and_parametrize(input_value):assert input_value <= 2

查看跳过的测试

运行测试时,可以使用 -v 参数查看跳过的测试:

pytest -v

输出会显示: SKIPPED [1] test_file.py:3: 此功能尚未实现

使用 -rs 参数可以查看跳过的详细原因:

pytest -rs

✅ 关键收获

1. 缓存是基础:理解缓存机制是高效使用 pytest 的前提

2. 预览保安全:运行前先用 --collect-only 验证测试范围

3. 跳过得精准:合理跳过测试可以大幅提升执行效率

4. 组合出效果:这些功能组合使用才能发挥最大价值

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

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

相关文章

2025云南冻品批发供应商最新TOP5权威推荐 餐饮店优质冻品源头厂家、烧烤食材品牌选购指南

当前冻品批发领域需求稳步增长,餐饮企业、食品加工厂等采购方对产品品质、品类丰富度及冷链稳定性的要求不断提高,行业竞争也愈发激烈。部分商家存在品质管控缺失、冷链供应链薄弱、产品创新不足等问题,让采购方难以…

赛后总结---Codeforces Round 1064 (Div. 2)(虚拟参赛)

Codeforces Round 1064 (Div. 2) A. Same Difference给定一个长度为 \(n\) 的字符串 \(\{s_i\}\),一次操作可以将 \(s_i\) 替换为 \(s_{i+1}\)。求最终使得 \(\{s_i\}\) 内每个字符都相同的最小操作次数。显然最后一个…

低功耗抗干扰液晶驱动工控仪表段码驱动显示IC VK2C21BA LCD驱动原厂

VK2C21BA是一个点阵式存储映射的LCD驱动器,可支持最大64点(16SEGx4COM)或者最大96点(12SEGx8COM)的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据,也可通过指令进入省电模式。其高抗干扰,低功耗的特性…

我们的多商户在线客服系统:支持对接多商户商城

vx: llike620 gofly.v1kf.com 嗨,大家好!今天我想跟大家分享我们为多商户在线商城量身打造的客服系统——一个真正为中小企业和商家着想的解决方案。 为什么我们的客服系统与多商户商城完美契合? 想象一下,如果你有…

04 opencv必知必会基础

opencv必知必会基础 颜色 颜色格式: bgr,rgb,hsv,yuv。opencv默认使用bgr 颜色转换: cv2.cvtColor() 图像操作基础NumPy 1 矩阵的创建: 创建数组 array() 全0数组 zero()/ones 全值数组 full() 单元矩阵 identity/e…

如果idea -java 编译内存不够修改这个地方

如果idea -java 编译内存不够修改这个地方

四川评价高的网站建设公司哪家好,新闻发布/抖音推广/网站建设/小红书推广/快手代运营/GEO优化公司推荐排行榜

网站建设行业现状分析 随着数字化转型浪潮席卷各行各业,网站建设作为企业线上形象展示与业务拓展的重要载体,其市场需求持续攀升。据相关数据显示,四川省网站建设市场规模年均增长率达15%以上,各类服务商如雨后春笋…

【完整版】Grok 4.1全面官方解析:功能详解+API调用+在线使用入口

【完整版】Grok 4.1全面官方解析:功能详解+API调用+在线使用入口Grok 4.1 是 xAI 在 2025 年发布的重大版本升级,聚焦于 情感智能、创造力、对话协作和事实准确性。在一次为期两周(11 月 1–14 日)的“静默上线”中…

[豪の算法奇妙冒险] 代码随想录算法训练营第二天 | 209-长度最小的子数组、59-螺旋矩阵II

LeetCode209 长度最小的子数组、LeetCode59 螺旋矩阵II代码随想录算法训练营第二天 | 209-长度最小的子数组、59-螺旋矩阵IILeetCode209 长度最小的子数组题目链接:https://leetcode.cn/problems/minimum-size-subarr…

Ubuntu22.04.3安装docker、docker compose

更新系统并安装依赖 bash 运行 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common 添加 Docker 官方 GPG 密钥 bash 运行 curl -fsSL https://downl…

2025 年 11 月上料机厂家推荐排行榜,单工位上料机,双工位上料机,四工位上料机,四工位圆盘上料机,自动化设备,工业自动化设备,工业机器人公司推荐

2025年11月上料机厂家推荐排行榜:自动化设备与工业机器人企业深度解析 行业背景与发展趋势 随着制造业智能化转型的深入推进,上料机作为工业自动化生产线的重要组成设备,正迎来前所未有的发展机遇。单工位上料机、双…

es 线程池状态

1. 查看当前线程池状态 通过 Elasticsearch API 查看bash# 查看所有线程池状态 curl -X GET "localhost:9200/_cat/thread_pool?v&s=name"# 查看特定线程池(如搜索线程池) curl -X GET "localho…

12种k线图

光头阳线,在行情启动的初期:比较好的入场信号,说明庄家在建仓出现在反复拉伸的后期:庄家出货的征兆

yield 模拟 async/await

您说得对!Generator 的 yield 配合执行器确实可以模拟 await 的效果。让我用一个更直观的例子展示这种对应关系。 Generator 模拟 async/await// 模拟异步函数 function delay(ms, value) {return new Promise(resolv…

2025年矩形花键轴企业权威推荐榜单:内花键轴/铣花键轴/精密花键轴源头厂家精选

在工业传动部件领域,花键轴作为连接与传递动力的核心元件,其加工精度直接影响机械设备的传动效率与可靠性。随着高端装备制造业向高精度、高可靠性方向发展,矩形花键轴的市场需求持续增长。为协助采购企业精准对接优…

2025年工业凉水塔制造企业权威推荐榜单:水冷却塔/冷却塔冷水塔/方形冷却塔源头厂家精选

在工业节水与节能改造的双重驱动下,一批掌握核心技术的凉水塔制造企业正凭借其创新产品赢得市场认可。 工业凉水塔(又称冷却塔)作为工业生产循环水系统的关键散热设备,其性能优劣直接关系到生产效率和运行成本。随…

开源AI工具MindGridAI

MindGridAI 介绍 这是一个小的AI工具,他可以: 1、网页变脑图 2、用自然语言提取网页结构化信息到表格 开源地址: https://gitee.com/zxporz/MindGridAI https://github.com/X-Pacific/MindGridAI 本地安装 1. pip …

2025年机场广告品牌口碑大比拼,前三名实力惊人!电梯视频广告/高铁广告/地铁广告/户外LED广告/户外农村墙体/主流网络媒体品牌有哪些

行业背景分析 随着2025年航空客运量的持续回升,机场广告市场迎来新一轮发展机遇。作为高端消费场景的重要营销阵地,机场广告已成为品牌商抢占高端客群心智的关键渠道。根据最新行业数据显示,2025年第一季度机场广告…

高效构建 CHI 架构

在多核 SoC 设计领域,CHI(Coherent Hub Interface)协议以其高性能与可扩展性,已成为实现缓存一致性与系统加速的关键技术。本文深入剖析 CHI 的架构优势、应用场景与前沿集成方式。 1、什么是 CHI? CHI 是 ARM AM…