带配置文件的Py.Test
标题可能有点模糊,所以我在这里解释一下情况。
我想在多个设备上测试一个叫做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 时使用哪些命令行参数?如果可以的话,你可以配置你的测试套件,添加一些命令行参数,这样其他的测试工具就可以根据这些参数进行相应的配置。
根据你的情况调整这个例子,可能会是这样的:
# 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
文件名,然后从中读取选项,并相应地实现一个测试工具。