You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pytest脚本中仅运行setup/cleanup 跳过全部测试用例

核心解决思路

pytest的setup/cleanup(fixture)逻辑必须依赖至少一个可执行的测试用例被收集到才会触发,原有方案过滤掉所有用例后pytest会直接忽略当前脚本,因此需要同时满足两个条件:1、保留至少一个简单的兜底用例,保证fixture触发;2、实现批量跳过业务测试用例的逻辑,不需要手动罗列用例名。

方案1:自定义标记+全局跳过(推荐,可维护性最高)

代码实现(修改test1.py)

import pytest
import os

# 注册自定义标记,避免pytest告警
def pytest_configure(config):
    config.addinivalue_line(
        "markers", "business_test: 标记业务测试用例,可通过环境变量批量跳过"
    )

# 全局控制跳过业务测试的钩子
def pytest_collection_modifyitems(config, items):
    if os.getenv("SKIP_BUSINESS_TEST") != "1":
        return
    skip_mark = pytest.mark.skip(reason="配置为仅执行setup/cleanup,跳过业务测试")
    for item in items:
        if "business_test" in item.keywords:
            item.add_marker(skip_mark)

# 你的setup/cleanup逻辑,示例为会话级别自动执行的fixture
@pytest.fixture(scope="session", autouse=True)
def global_setup_cleanup():
    # setup部分
    print("执行全局setup逻辑")
    yield
    # cleanup部分,兼容原有的SKIP_CLEANUP_ON_SOMETHING逻辑
    if os.getenv("SKIP_CLEANUP_ON_SOMETHING") != "1":
        print("执行全局cleanup逻辑")

# 兜底测试用例,保证至少有一个用例被执行,触发fixture
def test_dummy_trigger_fixture():
    # 无实际业务逻辑,仅做占位
    assert True

# 所有业务测试用例统一打business_test标记
@pytest.mark.business_test
def test_abc():
    assert 1 == 1

@pytest.mark.business_test
def test_def():
    assert 2 == 2

# 后续新增业务测试只需加@pytest.mark.business_test即可,无需修改执行命令

执行命令

# 场景1:仅执行setup/cleanup,跳过所有业务测试
SKIP_BUSINESS_TEST=1 pytest test1.py

# 场景2:正常执行所有测试用例+setup/cleanup
pytest test1.py

# 场景3:执行指定测试用例+setup/cleanup
pytest test1.py -k "test_abc"

方案2:测试用例分组+--deselect参数(无需改代码,适合临时使用)

如果不想修改现有测试代码,可将所有业务测试用例放到同一个测试类下,执行时直接排除整个类即可,无需罗列单个用例:

代码示例

# test1.py
import pytest

@pytest.fixture(scope="module", autouse=True)
def module_setup_cleanup():
    print("执行setup")
    yield
    print("执行cleanup")

# 所有业务测试都放在这个类里
class TestBusinessCases:
    def test_abc(self):
        pass
    def test_def(self):
        pass
    # 新增用例都写在这个类内部

# 兜底用例
def test_dummy():
    assert True

执行命令

# 仅执行setup/cleanup,跳过所有业务测试
pytest test1.py --deselect test1.py::TestBusinessCases

内容的提问来源于stack exchange,提问作者Qiang Xu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:45:01