首页 > 解决方案 > Pytest 使用可选择的设置夹具运行整个测试套件

问题描述

我想基本上“继承”一个 pytest 套件,以使用相同的测试函数集测试库的不同实现。我正在努力在 Google 和 Stack Overflow 中寻找答案,但我认为我的问题很大一部分是我不知道我想要的正确的 pytest 命名法。

我正在开发一个包含多个接口实现的库。让我们称它们为Aand B

我已经针对实现开发了一个相当大的测试套件A,现在我还想运行相同的套件来B避免代码重复。

我为每个实现都有一个固定装置,它为Aand的测试实例提供必要的资源B

@pytest.fixture(scope='function')
def get_an_A():
    yield A(..)

B 的夹具取决于其他一些第 3 方夹具。

@pytest.fixture(scope='function')
def get_a_B(some_other_fixture):
    yield B(..)

还有一个很高兴运行的测试套件_either

def test_add_values_should_be_correct(my_A_or_B):
    assert my_A_or_B.of(1) + my_A_or_B.of(2) == my_A_or_B.of(3)

我想要做的是构建my_A_or_B可以提供AsA在一个上下文中B使用该B夹具并在另一个上下文中使用该夹具的夹具。

理想情况下,我希望能够运行这样的东西:

运行测试套件A

> pytest tests/A

运行测试套件B

> pytest tests/B

A然后运行测试套件B

> pytest tests/

有没有办法布置我的测试套件,让我可以做到这一点?

标签: pythonpython-3.xpytest

解决方案


最简单的方法是将所有测试放在同一个文件夹中并运行它(在文件名和方法名上,名称必须以test_前缀开头)

python -m unittest discover <PATH_TO_THE_FOLDER>

推荐阅读