Cod*_*ice 9 python fixtures pytest
我有一个测试,目前使用这样的单个夹具运行:
@pytest.fixture()
def foo():
return 'foo'
def test_something(foo):
# assert something about foo
Run Code Online (Sandbox Code Playgroud)
现在我正在创建一个稍微不同的夹具,比方说
@pytest.fixture
def bar():
return 'bar'
Run Code Online (Sandbox Code Playgroud)
我需要对第二个夹具重复完全相同的测试.如果不复制/粘贴测试并更改参数名称,我该怎么做?
除了生成测试之外,您还可以对任何数量的动态应用的子夹具进行“夹具方式”。为此,定义要用作参数的实际灯具:
@pytest.fixture
def arg(request):
return request.getfuncargvalue(request.param)
Run Code Online (Sandbox Code Playgroud)
使用间接参数化定义测试(参数名称arg和灯具名称arg必须匹配):
@pytest.mark.parametrize('arg', ['foo', 'bar'], indirect=True)
def test_me(arg):
print(arg)
Run Code Online (Sandbox Code Playgroud)
我们还定义我们引用的那些固定装置:
@pytest.fixture
def foo():
return 'foo'
@pytest.fixture
def bar():
return 'bar'
Run Code Online (Sandbox Code Playgroud)
观察参数化和识别这些测试的效果如何:
$ pytest test_me.py -s -v -ra
collected 2 items
test_me.py::test_me[foo] foo
PASSED
test_me.py::test_me[bar] bar
PASSED
Run Code Online (Sandbox Code Playgroud)