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

如何配置pytest-dependency让TestSetB仅在TestSetA全通过后运行?

解决pytest-dependency跨文件测试类依赖失效问题

环境与问题描述

使用pytest-dependency 0.6.0版本,tests目录下有两个测试文件:

test_set_a.py代码:

class TestSetA:
    def test_always_passes():
        pass

test_set_b.py尝试多种配置让其测试仅在TestSetA所有测试通过后运行,但始终被跳过:

  1. 直接依赖类名:
@pytest.mark.dependency(depends=["TestSetA"])
class TestSetB:
    def please_dont_skip_me():
        pass
  1. 指定文件名:
@pytest.mark.dependency(depends=["test_set_a.py::TestSetA"])
class TestSetB:
    def please_dont_skip_me():
        pass
  1. 设置class作用域:
@pytest.mark.dependency(depends=["TestSetA"], scope="class")
class TestSetB:
    def please_dont_skip_me():
        pass
  1. 同时指定文件名和作用域:
@pytest.mark.dependency(depends=["test_set_a.py::TestSetA"], scope="class")
class TestSetB:
    def please_dont_skip_me():
        pass

执行日志显示TestSetA的测试通过,但TestSetB的测试被跳过:

collected 2 items
[2024-10-18 17:12:24] test_set_a.py::TestSetA::test_always_passes PASSED  [  100%]
[2024-10-18 17:12:25]
test_set_b.py::TestSetB::please_dont_skip_me
SKIPPED (please_dont_skip_me depends on
TestSetA)

问题根源

  1. 类中的测试方法缺少self参数,导致pytest无法将其识别为类的成员测试方法,而是当作独立函数处理,依赖匹配失败。
  2. pytest-dependency的依赖目标默认指向可执行的测试项(即测试方法),而非测试类本身,直接依赖类名无法找到有效依赖项。

解决方案

步骤1:修正test_set_a.py

给测试方法添加self参数,并通过@pytest.mark.dependency显式标记依赖名:

import pytest

class TestSetA:
    @pytest.mark.dependency(name="test_set_a_all_passed")
    def test_always_passes(self):
        pass

如果TestSetA包含多个测试方法,要确保所有方法通过才触发依赖,可给每个方法标记同一个名称:

import pytest

class TestSetA:
    @pytest.mark.dependency(name="test_set_a_all_passed")
    def test_1(self):
        pass

    @pytest.mark.dependency(name="test_set_a_all_passed")
    def test_2(self):
        pass

步骤2:修正test_set_b.py

给测试方法添加self参数,依赖指定的标记名称,并设置scope="class":

import pytest

@pytest.mark.dependency(depends=["test_set_a_all_passed"], scope="class")
class TestSetB:
    def please_dont_skip_me(self):
        pass

验证结果

执行测试后,TestSetA的测试通过后,TestSetB的测试会正常运行,不会被跳过:

collected 2 items
test_set_a.py::TestSetA::test_always_passes PASSED  [ 50%]
test_set_b.py::TestSetB::please_dont_skip_me PASSED  [100%]

内容的提问来源于stack exchange,提问作者Pea Kay See Es

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:34:55