当前位置:首页 > 随笔 > 正文内容

Pytest配置项详解与实战应用

访客 随笔 2026年6月7日 1

配置文件与选项管理

Pytest支持通过多个配置文件统一管理测试行为,常见配置文件包括:pytest.initox.inisetup.cfg。这些文件通常放置在项目根目录下,所有配置项需置于 [pytest] 段中(setup.cfg 中为 [tool:pytest])。

注意:推荐使用 pytest.initox.ini 作为主要配置方式。由于 .cfg 文件采用不同的解析逻辑,可能导致难以排查的问题。仅在极简场景下考虑使用 setup.cfg

命令行可通过 -o/--override 覆盖配置项,支持多次传递,格式为 name=value

pytest -o console_output_style=classic -o cache_dir=/tmp/mycache

核心配置项说明

配置项 作用 默认值
addopts 追加默认命令行参数,等同于用户输入
cache_dir 缓存失败测试结果的路径 .pytest_cache
confcutdir 控制 conftest.py 搜索范围的起始目录
console_output_style 控制台输出样式:classic(经典)、progress(带进度条)、count(计数模式) progress

addopts:预设命令行参数

该选项可将一组命令行参数注入到每次执行中。例如:

[pytest]
addopts = --maxfail=2 -rf

执行 pytest test_hello.py 等价于:

pytest --maxfail=2 -rf test_hello.py

cache_dir:自定义缓存目录

用于存储测试失败状态和中间结果,提升重复运行效率。默认位于项目根目录下的 .pytest_cache 文件夹。

confcutdir:限制 conftest 搜寻范围

指定向上查找 conftest.py 的边界目录。若未设置,pytest 将从配置文件所在目录开始逐级向上搜索,直到系统根目录。

console_output_style:输出风格定制

调整测试执行时的终端显示方式:

  • classic:标准输出,简洁明了
  • progress:带进度条,直观展示执行进度
  • count:以"已运行数量/总数"形式显示进度

示例配置:

[pytest]
console_output_style = classic

empty_parameter_set_mark:空参数集处理策略

当参数化测试遇到空参数列表时的行为:

  • skip(默认):跳过该测试
  • xfail:标记为预期失败(不执行)
  • fail_at_collect:收集阶段即抛出异常

示例:

[pytest]
empty_parameter_set_mark = xfail

filterwarnings:警告过滤规则

定义测试过程中对警告的处理方式。格式为每行一个规则,支持 errorignorewarn 等操作。

[pytest]
filterwarnings =
 error
 ignore::DeprecationWarning

表示将弃用警告视为错误,其他警告一律忽略。

junit_family:JUnit XML 输出格式

控制生成的 JUnit 格式报告版本:

  • xunit1(或 legacy):兼容旧版 xunit 1.0(默认)
  • xunit2:符合 xunit 2.0 规范,更适配现代 CI 工具如 Jenkins

示例:

[pytest]
junit_family = xunit2

junit_suite_name:测试套件名称

自定义 JUnit 报告中根节点的名称:

[pytest]
junit_suite_name = my_custom_suite

日志相关配置

以下配置项用于控制日志输出行为:

  • log_cli_format:实时日志格式字符串(如 %(asctime)s %(levelname)s %(message)s
  • log_cli_level:CLI 日志最低级别(如 INFO
  • log_file:日志写入文件路径(如 logs/test.log
  • log_file_level:文件日志最低级别
  • log_format:捕获日志的通用格式
  • log_print:是否在失败时打印捕获的日志信息(False 则隐藏)

所有日志时间格式支持 time.strftime() 语法,例如:

[pytest]
log_cli_date_format = %Y-%m-%d %H:%M:%S

markers:标记白名单

配合 --strict-markers 使用,仅允许配置中列出的标记。多行配置支持:

[pytest]
markers =
 slow
 serial

minversion:最小 Pytest 版本要求

确保测试环境满足最低版本需求:

[pytest]
minversion = 3.0

低于此版本将报错终止。

norecursedirs:禁止递归扫描目录

避免进入特定目录进行测试发现。支持通配符匹配(类似 fnmatch):

  • * 匹配任意字符
  • ? 匹配单个字符
  • [seq] 匹配集合中的任一字符
  • [!seq] 匹配不在集合中的字符

示例:

[pytest]
norecursedirs = .svn _build tmp* .git

同时,pytest 会自动识别虚拟环境目录(如包含 activate 脚本),除非显式使用 --collect-in-virtualenv 否则不会扫描。

python_classes:测试类命名规则

定义哪些类会被当作测试类。默认匹配以 Test 开头的类。可扩展为:

[pytest]
python_classes = *Suite Test*

python_files:测试文件匹配模式

决定哪些 Python 文件被视为测试模块:

[pytest]
python_files = test_*.py check_*.py example_*.py

支持多行写法,便于维护。

python_functions:测试函数命名规则

控制哪些函数被识别为测试函数:

[pytest]
python_functions = *_test

注意:此类规则不影响 unittest.TestCase 派生类的方法收集。

testpaths:测试路径优先级

当未指定具体路径时,限定搜索范围:

[pytest]
testpaths = tests docs

有助于加快测试发现速度并防止误扫非目标目录。

usefixtures:全局固定装置

为所有测试函数自动注入指定 fixture:

[pytest]
usefixtures =
 clean_db
 reset_cache

等价于为每个测试添加 @pytest.mark.usefixtures("clean_db")

xfail_strict:严格 XFail 检查

若启用,标记为 @pytest.mark.xfail 但实际通过的测试将被视为失败:

[pytest]
xfail_strict = True

适用于强调测试预期失败状态的严格验证场景。

相关文章

可以按小时收费的VPS

很多 VPS 提供商都支持 按小时计费(hourly billing),想短期试用 / 临时搭建节点、测试网络、短期项目等场景非常合适。下面是当前最主流且靠谱的按小时 VPS 选项,分别按不同需求场景整理: 1. Vultr(全球节点,包括日本) 按小时计费 可选机房:东京 / 大阪 / 洛杉矶 / 法兰克福 / 伦敦 … 支持 PayPal(部分情况),但更常用信用卡/PayPal+卡价格参考$...

在 iPhone 上下载国外App

地区/国家限制App Store 会根据 Apple ID 的国家或地区限制应用下载。如果你的 Apple ID 绑定的是中国大陆,就可能无法下载 OpenAI 官方的 ChatGPT 应用,因为它在大陆 App Store 不上架。解决办法:换成美国、加拿大、香港等地区的 Apple ID。或者在现有 Apple ID 上更改地区。注册一个国外 Apple ID(推荐)比如注册 美国区 Appl...

Node.js 中的异步编程:回调与 Promise

Node.js 是一个基于 JavaScript 构建的单线程、非阻塞运行环境,它通过异步编程机制来高效处理多个操作。在执行如文件读取、API 请求或数据库查询等任务时,Node.js 不会等待这些操作完成,而是使用回调函数和 Promise 来避免阻塞主线程。 回调方式实现异步 那么当异步操作完成后,Node.js 如何知道接下来要做什么呢?这就要用到 回调函数(callback)。 回调本质上...

Selenium自动化测试入门指南

Selenium自动化测试入门指南

什么是自动化测试? 自动化测试是指利用软件工具自动执行测试用例,模拟用户操作,如打开网页、点击链接、输入文本等,并验证结果是否符合预期。 其主要优点包括: 大幅减少人工成本 测试速度快 可以在非工作时间运行 支持持续集成和交付 然而,它也存在一些局限性,例如开发成本较高、不适合快速变化的项目、依赖稳定的UI界面等。 自动化测试的应用条件 适合引入自动化测试的情况包括: 手动测试耗时且需要大量...

MariaDB Galera集群故障快速恢复指南

OpenStack控制节点采用三节点MariaDB Galera集群架构。当数据库集群因故障重启时,有时会出现Galera集群无法正常启动的问题。虽然有多种方法可以恢复数据库服务,但如何实现快速启动同时确保数据完整性呢? 通过分析日志发现,MariaDB Galera集群节点宕机时会在日志中输出以下信息: [Note] WSREP: 新集群视图:全局状态: 874d8e7e-5980-11e8-8...

Android 中 EventBus 的通信机制与实现原理深度解析

EventBus 核心设计思想 EventBus 是一个基于观察者模式的事件总线框架,广泛应用于 Android 平台以实现组件解耦。它通过中心化的消息分发机制,使不同层级、不同线程的对象能够以"发布-订阅"方式通信,避免了传统接口回调或广播带来的强依赖问题。 核心角色说明 事件(Event):任意 Java 对象,作为数据载体,如网络状态变更通知、用户登录信息等。 发布者(Publi...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。