我查看了py.test文档,到目前为止还没问题。我有这样的测试/测试装置:
@pytest.fixture(scope="session")
def comm_env():
return CommEnv()
def test_write1(comm_env):
'''Write patterns and read them back.'''
... fun stuff goes here ...
这样我就可以创建一个自定义CommEnv()
对象,我的测试可以访问它。
现在我需要在comm_env()
函数中添加命令行参数,这样我就可以传入通信端口名称和波特率。我怎样才能做到这一点?我查看了parametrizing test fixtures页面,但我的眼睛只是釉面。
我确实通过在测试目录中添加一个简短的conftest.py
文件来弄清楚如何add command-line arguments,但我无法弄清楚如何连接它以使其可用于{{1 }}
答案 0 :(得分:3)
我明白了:你可以访问fixture request
对象的config
属性:
@pytest.fixture(scope="session")
def comm_env(request):
commport = request.config.getoption('--port')
baudrate = request.config.getoption('--baud')
print "params: %s, %s" % (commport, baudrate)
return CommEnv(commport, baudrate)
然后我必须在conftest.py中执行此操作:
import pytest
def pytest_addoption(parser):
parser.addoption('--port',help='serial port e.g. COM1')
parser.addoption('--baud',help='baud rate',type=int)
答案 1 :(得分:0)
我认为你需要this section,这意味着它会变成:
@pytest.fixture(scope="session", params=[
(123, 456),
(456, 789),
])
def comm_env(request):
val1, val2 = request.param
return CommEnv()
您可以在params = [(123, 456), (456, 789)]
:
def construct_fixture(params):
@pytest.fixture(scope="session", params=params)
def comm_env(request):
val1, val2 = request.param
return CommEnv()
return comm_env
globals()['comm_env'] = construct_fixture(params)