【Pytest】从配置到固件的使用指南

掌握高效测试的关键技巧,打造专业级自动化测试框架

一、Pytest框架的核心优势

Pytest作为Python最强大的测试框架之一,以其简洁灵活的语法和丰富的扩展能力深受开发者喜爱。相比unittest,Pytest提供了更直观的测试编写方式和更强大的功能集:

  • 零样板代码:无需继承特定类,函数即测试用例
  • 丰富的断言:自动展示断言失败时的差异信息
  • 插件生态系统:超过1000个插件扩展功能
  • 参数化测试:轻松实现数据驱动测试
  • 兼容性强:完美兼容unittest和nose测试套件

二、Pytest命令行参数化执行大全

1. 基础执行参数

# 显示详细测试信息
pytest.main(["-v"])# 输出print语句内容
pytest.main(["-s"])# 组合使用
pytest.main(["-vs"])

2. 测试筛选参数

# 指定标签执行(冒烟测试)
pytest.main(["-m", "smoke"])# 按关键字筛选用例
pytest.main(["-k", "login"])# 仅执行上次失败的用例
pytest.main(["--lf"])# 指定测试文件
pytest.main(["test_login.py"])

3. 测试控制参数

# 遇到第一个失败用例时停止
pytest.main(["-x"])# 最多允许2个失败
pytest.main(["--maxfail=2"])# 仅收集测试项不执行
pytest.main(["--collect-only"])

4. 报告生成参数

# 生成JUnit格式报告
pytest.main(["--junit-xml=report.xml"])# 生成HTML测试报告
pytest.main(["--html=report.html"])# 生成带截图的报告(需配合插件)
pytest.main(["--html=report.html", "--self-contained-html"])

三、pytest.ini全局配置详解

1. 配置文件规范

[pytest]
# 默认命令行参数
addopts = -vs --tb=short# 自定义标记注册
markers =
smoke: 冒烟测试用例
regression: 回归测试用例
performance: 性能测试用例# 测试文件匹配规则
python_files = test_*.py# 测试目录配置
testpaths = tests# 测试类命名规则
python_classes = Test*# 测试方法命名规则
python_functions = test_*

2. 配置效果说明表

配置项功能说明推荐值
addopts默认命令行参数-vs --tb=short
markers自定义标记注册按团队规范定义
python_files测试文件匹配模式test_*.py
testpaths测试目录路径tests
norecursedirs排除目录.venv node_modules
junit_suite_nameJUnit报告名称${project} Tests

四、测试用例跳过策略详解

1. 无条件跳过

@pytest.mark.skip(reason="功能尚未实现")
def test_unimplemented_feature():
# 此测试暂不执行
assert False

2. 条件跳过

import sys# 根据Python版本跳过
@pytest.mark.skipif(
sys.version_info < (3, 8),
reason="需要Python 3.8+的特性支持"
)
def test_walrus_operator():
assert (result := complex_calculation()) > 0

3. 运行时动态跳过

def test_environment_specific():
# 仅当环境变量PROFILE=production时执行
if os.environ.get("PROFILE") != "production":
pytest.skip("仅在生产环境执行")# 生产环境专属测试逻辑
assert production_only_feature() is True

4. 跳过模块所有测试

import pytestif not config.ENABLE_MODULE_A:
pytest.skip("模块A测试已禁用", allow_module_level=True)

五、测试固件(fixture)高级应用

1. 基础fixture使用

import pytest@pytest.fixture
def database_connection():
# 前置操作:建立数据库连接
conn = create_db_connection()
yield conn# 测试用例在此处执行
# 后置操作:关闭连接
conn.close()def test_query(database_connection):
result = database_connection.execute("SELECT 1")
assert result == 1

2. 作用域控制

@pytest.fixture(scope="module")
def shared_resource():
# 整个测试模块共享的资源
print("\n初始化资源")
resource = Resource()
yield resource
print("\n释放资源")
resource.release()

作用域选项对比:

作用域生命周期适用场景执行次数(100测试用例)
function每个测试函数默认值,独立测试环境100次
class每个测试类类内多测试共享按类数量执行
module每个模块模块级资源共享按模块数量执行
session整个测试会话全局资源共享1次

3. 参数化fixture

@pytest.fixture(params=["mysql", "postgres", "sqlite"])
def database(request):
db = Database(request.param)
db.connect()
yield db
db.disconnect()def test_db_compatibility(database):
assert database.version() >= "5.7"

4. 自动使用fixture

@pytest.fixture(autouse=True)
def global_setup_teardown():
# 1. 所有测试前执行
print("\n=== 全局测试开始 ===")# 2. 测试执行
yield# 3. 所有测试后执行
print("\n=== 全局测试结束 ===")

5. fixture重写机制

# conftest.py
@pytest.fixture(scope="session")
def config():
return load_config("default.json")# test_prod.py
@pytest.fixture(scope="session")
def config():
return load_config("production.json")

Pytest最佳实践总结

配置集中化:通过pytest.ini统一管理配置
用例原子化:每个测试只验证一个功能点
命名规范化:test_前缀+描述性名称
固件轻量化:避免在fixture中放业务逻辑
报告可视化:结合Allure生成专业报告

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

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

相关文章

[matlab]matlab上安装xgboost安装教程简单版

【前言】 网上基于MATLAB的xgboost安装教程太少了&#xff0c;以至于几乎搜不到&#xff0c;为此做了一个简单安装教程【安装前提】 有matlab软件&#xff0c;版本越高越好&#xff0c;我用的是2023a。理论支持matlab2018a及其以上&#xff0c;因此需要自己提前安装好matlab【安…

基于多种机器学习的成都市二手房房价分析与价格预测【城市可换、算法模型多种对比】

文章目录有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目背景数据来源与采集方式数据预处理与清洗流程探索性数据分析&#xff08;EDA&#xff09;模型构建与预测方法项目意义与应用前景相关可视化展示总结每文一语有需要本项目的代码或文档以及…

PostgreSQL 事务ID环绕问题

事务ID&#xff08;XID&#xff09;基本概念 从Transactions and Identifiers可知&#xff1a; 事务 ID&#xff0c;例如 278394&#xff0c;会根据 PostgreSQL 集群内所有数据库使用的全局计数器按顺序分配给事务。此分配会在事务首次写入数据库时进行。这意味着编号较低的 x…

高等数学-矩阵知识

好的&#xff0c;我们来详细讲解高等数学&#xff08;主要是线性代数部分&#xff09;中的核心矩阵知识。矩阵是线性代数的基石&#xff0c;广泛应用于数学、物理、工程、计算机科学、经济学等众多领域。 一、矩阵的基本概念定义&#xff1a; 一个 m n 矩阵 (Matrix) 是一个由…

React 项目性能优化概要

应用级性能优化&#xff0c;需要结合实际需求展开分析&#xff0c;通常我们需要从以下几个方面来考虑&#xff1a; 1. 识别性能瓶颈 识别性能瓶颈是优化的第一步&#xff0c;通过各种工具和方法找到影响性能的主要原因&#xff1a; React Profiler&#xff1a;使用 React Dev…

【web自动化】-5- fixture集中管理和项目重构

一、投标用例设计 # 定义让前台页面保持自动登录的fixture pytest.fixture() def user_driver():driver webdriver.Chrome()driver.get("http://47.107.116.139/fangwei/")driver.maximize_window()# 创建页面类对象page ReceptionLoginPage(driver)# 通过页面类对…

Dify工作流:爬虫文章到AI知识库

部署Dify 代码拉取 git clone https://github.com/langgenius/dify.git cd dify/docker启动容器 docker-compose up -d启动成功准备知识库 创建知识库 创建一个空的知识库要先从网址中&#xff0c;找到这个知识库的id&#xff0c;记下后面需要用到。新建API密钥 创建密钥&#…

支付鉴权方案介绍

前后端交互中的鉴权是确保请求来源合法、身份可信、权限合适的关键手段。不同系统架构和业务类型下,使用的鉴权方式略有不同,但主要可分为以下几类: ✅ 一、前后端交互常见的鉴权方式概览 鉴权方式 优点 缺点 适用场景 Cookie + Session 简单、成熟,服务端易控制 不适合跨域…

halcon处理灰度能量图

使用halcon处理射线图像&#xff0c;对高能区域和低能区域分割处理感兴趣区域&#xff0c;筛选区域下的灰度值区间范围。图像灰度值为16位深度图。* 读取灰度图像 read_image (Image, /123.tif)** 获取图像尺寸 get_image_size (Image, Width, Height)* 分割图像为左右两部分&a…

Oracle From查看弹性域设置

打开弹性与设置&#xff1a;【应用开发员->弹性域->说明性->段】打开后界面如下&#xff1a; 把光标定位到标题&#xff0c;然后点击“手电筒”搜索名称&#xff08;名称就是你要查询的那个弹性域的名称&#xff09;我这里就是搜索“附加题头信息”&#xff0…

git初始流程

对于一个新项目&#xff0c;从 Git 仓库拉取 test_tool 分支并进行后续修改提交的完整流程如下&#xff1a; 一、首次拉取项目&#xff08;克隆仓库并切换分支&#xff09;克隆远程仓库到本地 打开终端&#xff08;或 PyCharm 的 Terminal&#xff09;&#xff0c;进入你想存放…

emuelec模拟器 ,s905盒子树莓派街机游戏

EmuELEC支持的盒子类型相当广泛&#xff0c;主要包括使用以下芯片方案的机顶盒等设备&#xff1a; S905系列及其变体&#xff1a;如S905、S905D、S905L、S905M、S905X、S905X2、S905X3、S905X4、S905W、S905Y等。 S912&#xff1a;这也是EmuELEC支持的一个常见芯片方案。 S922x…

Ansible部署

Ansible部署 一、部署环境及前置操作 1、测试环境 注:主机复用原测试环境&#xff0c;主机hostname根据需求调整 硬件环境&#xff1a;N100 x86主机 Proxmox系统 软件环境&#xff1a;Ubuntu 22.04.3 LTS 软件版本&#xff1a;redis-7.4.0.tar.gz 主机环境&#xff1a;主机IP …

智慧教室:科技赋能,奏响个性化学习新乐章

在传统教育模式中&#xff0c;课堂互动的局限性犹如一道无形的枷锁&#xff0c;束缚着学生主动学习的热情与能力。课堂上&#xff0c;往往是教师单向的知识输出&#xff0c;仅有少数学生能获得发言机会&#xff0c;大部分学生只能被动聆听&#xff0c;逐渐在枯燥的学习氛围中丧…

Android埋点实现方案深度分析

埋码是数据驱动业务决策、产品优化、用户行为分析的核心基础&#xff0c;其实现方案的优劣直接影响数据的准确性、完整性、实时性、可维护性以及开发效率。 以下从多个维度对主流方案进行剖析&#xff1a; 一、核心目标与挑战目标&#xff1a; 精准采集&#xff1a; 在用户触发…

万界星空科技铜线/漆包线行业智能化MES系统解决方案

万界星空科技针对铜线及漆包线行业开发的智能化MES系统&#xff0c;专门解决该行业原材料管理复杂、工艺控制严、质量追溯困难等核心痛点。该系统通过数字化手段实现生产全流程的可视化与精准控制&#xff0c;助力企业提升生产效率、降低运营成本并增强市场竞争力。一、行业专属…

Git 完全手册:从入门到团队协作实战(3)

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《C修炼之路》、《Linux修炼&#xff1a;终端之内 洞悉真理…

使用Docker搭建SearXNG搜索引擎

1、安装Docker# 安装Docker https://docs.docker.com/get-docker/# 安装Docker Compose https://docs.docker.com/compose/install/# CentOS安装Docker https://mp.weixin.qq.com/s/nHNPbCmdQs3E5x1QBP-ueA2、安装SearXNG详见&#xff1a; https://docs.searxng.org/admin/inst…

基于pi/4-QPSK扩频解扩和gardner环定时同步的通信系统matlab性能仿真

目录 1.引言 2.算法仿真效果演示 3.数据集格式或算法参数简介 4.算法涉及理论知识概要 4.1 π/4-QPSK 4.2 直接序列扩频与解扩 4.3 Gardner环定时同步 5.参考文献 6.完整算法代码文件获得 1.引言 π/4-QPSK是一种特殊的QPSK调制方式&#xff0c;其相邻符号间的相位跳变…

CGA老年人能力评估师:提升老年生活质量

一、CGA老年人能力评估师是提升老年生活质量的“导航者” 老年生活质量的提升&#xff0c;始于对老年人真实需求的精准把握。CGA老年人能力评估师正是这样一群“导航者”&#xff0c;他们运用CGA老年综合评估系统&#xff0c;深入了解老年人在生理、心理、社会参与等方面的状况…