pytest 的配置非常灵活,支持配置文件和命令行参数来定制测试行为
若没有 pytest 基础,请点击前往:零基础测开学习 10——pytest_基础
若已有 pytest 基础,但不了解 fixture,请点击前往:零基础测开学习 11——pytest_fixture
1.创建文件:
在你的项目根目录下(通常是与 src、tests 文件夹同级的位置),新建一个名为 pytest.ini 的文本文件。文件名必须是这个,不能更改。

2.基本配置示例:
你可以先从一个简单的配置开始。以下是一个最常见的示例,它设置了默认的详细输出、自动注册一些标记,并指定测试文件的位置。
[pytest]
# 默认命令行选项,-v: 详细输出 -s: 打印print信息
addopts = -v -s
# 注册自定义标记,避免使用未注册标记时出现警告
markers =
smoke: 冒烟测试
slow: 运行缓慢的测试
# 指定测试用例的搜索目录
testpaths = tests
3.验证配置是否生效:
创建并保存 pytest.ini 文件后,你可以在项目根目录下打开终端(命令行),运行以下命令来验证:
pytest -v
如果配置成功,可以在命令行输出内容中看到:configfile: pytest.ini
在此处添加的命令行参数,会在 pytest 每次执行时自动生效
-v/--verbose:输出更详细的信息
-s:允许测试中的所有输出打印到控制台
-k<表达式>:通过表达式筛选测试用例(如-k"test_login and not slow")
-m<标记表达式>:运行指定标记的测试(如-m smoke)
用于注册自定义标记,防止 pytest 发出 “未知标记” 的警告。这是使用自定义标记前的必要步骤。
指定测试用例的搜索目录
标记是 pytest 的强大核心功能之一,用于对测试进行分类、筛选和控制执行行为。
你可以创建自己的标记来对测试用例进行分类,例如标记冒烟测试、集成测试等。
1.在 pytest.ini 中注册标记
2.在测试函数/类上使用你的标记 pytest.mark.你的标记
3.运行时使用 pytest -m "你的标记"来执行
支持使用 and,or,not 进行复杂筛选,例如:pytest -m “smoke and not slow”
pytest 提供了一些开箱即用的标记。
数据驱动测试将数据逻辑与数据测试分离,使用多组数据执行相同的测试逻辑,能显著提高测试覆盖率和代码复用性。pytest 主要使用@pytest.mark.parametrize 装饰器实现。
@pytest.mark.parametrize 允许你为测试函数提供多组参数。
import pytest
@user7ize("input, expected", [
(1, 2),
(2, 3),
(3, 4),
])
def test_increment(input, expected):
assert input + 1 == expected
上述测试会独立运行三次
对于大量或复杂的测试数据,可以从外部文件中加载。
通过设置 indirect = True,可以将参数化的值传递给 fixture,实现更复杂的测试数据搭建和环境准备。
示例:
import pytest
# 定义一个接收参数的fixture
@pytest.fixture
def user_login(request):
"""根据参数化数据准备用户登录环境"""
username = request.param # 通过request.param获取参数值
print(f"\n登录用户: {username}")
# 这里可以执行一些预处理,如准备测试数据
user_data = prepare_user_data(username)
yield user_data # 返回用户数据给测试用例
# 测试后清理(可选)
cleanup_user_data(username)
# 参数化数据
usernames = ['admin_user', 'regular_user', 'guest_user']
# indirect=True 表示参数先传递给fixture处理
@user9ize('user_login', usernames, indirect=True)
def test_user_permissions(user_login):
"""测试不同用户的权限"""
print(f"测试用户权限: {user_login}")
# 根据user_login测试用户权限
assert check_permissions(user_login) == expected_permissions
这篇干货有点多,记得喝水,别噎着。