pytest中挑选用例执行【pytest】

发布于:2025-07-18 ⋅ 阅读:(22) ⋅ 点赞:(0)

转载自白月黑羽,pytest 框架 - 白月黑羽,仅作学习笔记用途,侵权联系删除

pytest 中灵活选择测试用例的多种方式

在实际自动化测试过程中,我们常常并不需要每次都执行所有测试用例,而是希望根据模块、类、方法、名称关键词或标签等条件,灵活挑选要运行的部分用例。pytest 在这方面提供了非常丰富的控制手段,以下是常用的几种方式:


1. 按文件或目录指定测试范围

指定某个测试模块(文件)

如果你只希望运行某个特定的测试文件,可以直接通过路径指定:

python -m pytest cases/登录/test_错误登录.py
指定整个目录

执行某个目录下的全部测试用例:

python -m pytest cases
同时指定多个目录

如果测试分布在多个目录中,可以一次性指定多个目标路径:

python -m pytest cases1 cases2/登录

2. 精确到类或方法级别的选择

运行指定类下的所有测试方法:
python -m pytest cases/登录/test_错误登录.py::Test_错误密码
仅运行某个类中的某个测试方法:
python -m pytest cases/登录/test_错误登录.py::Test_错误密码::test_C001001

3. 通过关键词匹配(-k)

pytest 提供了 -k 参数用于模糊匹配用例名、类名、模块名或目录名等,只要包含指定关键词即可被选中。

示例:
python -m pytest -k C001001 -s

上述命令会运行所有名称中包含 C001001 的测试项。

多条件匹配:
  • 排除某些用例:
python -m pytest -k "not C001001" -s
  • 同时包含多个关键字
python -m pytest -k "错 and 密码2" -s
  • 满足任意关键字
python -m pytest -k "错 or 密码2" -s

🔍 注意:关键词匹配是区分大小写的,并且不要求完全匹配,只需部分匹配成功即可。


4. 基于标签(mark)运行用例

给测试方法添加标签

使用 @pytest.mark.<标签名> 装饰器可为测试用例打标签,例如:

import pytest

class Test_错误密码2:

    @pytest.mark.webtest
    def test_C001021(self):
        print('\n用例C001021')
        assert 1 == 1

运行指定标签的用例:

python -m pytest cases -m webtest -s
给整个类加标签
@pytest.mark.webtest
class Test_错误密码2:
    ...
使用中文标签也是支持的:
@pytest.mark.网页测试
class Test_错误密码2:
    ...

运行方式相同:

python -m pytest cases -m 网页测试 -s
给用例添加多个标签:
@pytest.mark.网页测试
@pytest.mark.登录测试
class Test_错误密码2:
    ...

5. 为模块统一添加标签

你还可以为整个模块统一设置标签,通过定义模块级变量 pytestmark

import pytest

pytestmark = pytest.mark.网页测试

支持一次性设置多个标签:

pytestmark = [pytest.mark.网页测试, pytest.mark.登录测试]

6. 配置标签说明,避免警告

自定义标签在运行时,pytest 可能会抛出警告提示标签未注册。为避免此类警告,应在项目根目录创建 pytest.ini 配置文件,并添加以下内容:

[pytest]
markers =
    critical: 关键测试
    网页测试: 标记为网页端相关测试
    登录测试: 标记为登录相关测试

通过这种方式,pytest 会正式识别这些标签,执行时不再提示警告信息。


小结

方式

示例命令

应用场景

指定模块

pytest test_xxx.py

只运行一个测试文件

指定目录

pytest tests/

执行整个目录中的测试

精确到类或方法

pytest test_file.py::TestClass::test_method

定位执行具体类或函数

关键字筛选

pytest -k "关键字"

通过模糊匹配名称来选用例

标签筛选

pytest -m 标签名

按测试类型、模块、功能筛选

模块统一标签

pytestmark = [pytest.mark.标签1, ...]

整个文件统一打标签


网站公告

今日签到

点亮在社区的每一天
去签到