pytest中挑选用例执行【pytest】

转载自白月黑羽,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, ...] | 整个文件统一打标签 |