带配置文件的Py.Test

9 投票
1 回答
11823 浏览
提问于 2025-04-17 22:16

标题可能有点模糊,所以我在这里解释一下情况。

我想在多个设备上测试一个叫做Foo的Python模块。我已经创建了一个名为test_Foo.py的文件。

现在,这些装有Foo的设备需要不同的设置。例如,设备A需要用参数X来构建和测试Foo,而设备B则需要用参数Y来构建和测试Foo。这里的参数,比如说就是设备的ID。

我想知道是否可以(以及怎么做)让我的test_Foo.py使用一个配置文件。我在其他模块中使用YAML文件作为配置,还有argparse.ArgumentParser,但我想知道是否可以在Py.Test中用同样的概念。

1 个回答

12

你是否可以控制在每个环境中调用 py.test 时使用哪些命令行参数?如果可以的话,你可以配置你的测试套件,添加一些命令行参数,这样其他的测试工具就可以根据这些参数进行相应的配置。

这里有一个例子可以参考:http://pytest.org/latest/example/simple.html#pass-different-values-to-a-test-function-depending-on-command-line-options

根据你的情况调整这个例子,可能会是这样的:

# content of conftest.py
import pytest

def pytest_addoption(parser):
    parser.addoption("--device", action="store", 
        help="device: A or B")

@pytest.fixture
def param(request):
    device = request.config.getoption("--device")
    if device == 'A':
        return X()
    elif device == 'B':
        return Y()

接下来是你的测试文件:

# contents of test_Foo.py
def test_Foo(param):
    foo = Foo(param)
    # test foo

这样你就可以像这样调用 py.test

py.test --device=A

这样的话,test_Foo 就会接收到一个 X 对象。

当然,你也可以扩展这个功能,让它接收一个 yaml 文件名,然后从中读取选项,并相应地实现一个测试工具。

撰写回答