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

Pytest fixture如何识别测试跳过状态以跳过teardown清理逻辑

解决方案

要让fixture感知关联测试用例是否被跳过,核心是借助pytest内置的request fixture获取测试执行上下文,配合pytest的测试报告钩子存储用例执行状态,步骤如下:

  • 第一步:在项目根目录的conftest.py文件中添加如下钩子函数,将每个测试用例各阶段的执行结果挂载到测试节点对象上,方便fixture后续读取:
import pytest

@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    outcome = yield
    test_report = outcome.get_result()
    setattr(item, f"rep_{test_report.when}", test_report)
  • 第二步:修改原有create_docker_image fixture,注入request对象,在teardown逻辑执行前判断测试用例的执行状态,若测试被跳过则终止删除逻辑:
@pytest.fixture
def create_docker_image(request):
    image_name = get_image_name_for_local_test()

    yield image_name

    # 校验测试执行状态,跳过场景下不执行镜像删除
    if hasattr(request.node, "rep_call") and request.node.rep_call.skipped:
        return
    delete_result = delete_docker(image_name)

补充说明

  • 上面的判断只覆盖test函数运行时触发的跳过,如果测试在fixture初始化(setup)阶段就被跳过,可以再加一层request.node.rep_setup.skipped的判断。
  • 如果测试失败的时候你也不想删镜像,就在判断条件里加上or request.node.rep_call.failed就行。
  • request是pytest自带的内置fixture,不用自己实现,直接在fixture参数里声明就能用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:57:20