如何无需给每个测试函数加@pytest.mark.skipif就批量跳过pytest测试
解决方案
一、批量应用跳过规则,无需逐个加装饰器
有三种常用方案,可按实际场景选择:
- 方案1:模块级标记(适合所有测试在同一个.py文件的场景)
直接在测试文件的顶部添加如下代码,整个文件的所有测试函数都会自动应用该跳过规则:
import os import pytest pytestmark = pytest.mark.skipif( 'password' not in os.environ, reason='Environment variable "password" not set.' )
- 方案2:类级标记(适合测试都封装在同一个测试类的场景)
直接给测试类加装饰器即可,类下所有测试方法都会继承该规则:
@pytest.mark.skipif( 'password' not in os.environ, reason='Environment variable "password" not set.' ) class TestMyFeature: def test_1(self, mock): ... def test_2(self, mock): ...
- 方案3:全局钩子(适合要跨多个测试文件应用规则的场景)
在项目根目录的conftest.py文件中添加pytest_collection_modifyitems钩子,统一给所有收集到的测试用例加跳过逻辑:
import os import pytest def pytest_collection_modifyitems(config, items): if 'password' not in os.environ: skip_mark = pytest.mark.skip(reason='Environment variable "password" not set.') for item in items: item.add_marker(skip_mark)
二、显示跳过的原因说明
运行pytest时加上-r s参数即可打印所有跳过用例的原因:
pytest -r s
如果需要在运行一开始就弹出明显的警告提示,可以在测试文件或者conftest.py的开头加判断逻辑主动输出警告:
import os import warnings if 'password' not in os.environ: warnings.warn("未检测到环境变量password,所有依赖该变量的测试都会被跳过", UserWarning)
运行后会首先输出警告信息,结合-r s参数就能完整展示所有相关提示。
内容的提问来源于stack exchange,提问作者ca9163d9
相关产品推荐
相关产品推荐

