参数化pytest夹具对象

时间:2014-11-19 21:37:51

标签: python pytest

我查看了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 }}

2 个答案:

答案 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)