我想使用固定装置作为 pytest.mark.parametrize
的参数或具有相同结果的东西。
例如:
import pytest
import my_package
@pytest.fixture
def dir1_fixture():
return '/dir1'
@pytest.fixture
def dir2_fixture():
return '/dir2'
@pytest.parametrize('dirname, expected', [(dir1_fixture, 'expected1'), (dir2_fixture, 'expected2')])
def test_directory_command(dirname, expected):
result = my_package.directory_command(dirname)
assert result == expected
fixture 参数的问题是 fixture 的每个参数在每次使用时都会运行,但我不希望这样。我希望能够根据测试选择要使用的固定装置。
最佳答案
Will was on the right path ,您应该使用 request.getfixturevalue
来检索 fixture 。
但是你可以在测试中直接做,这样更简单。
@pytest.mark.parametrize('dirname, expected', [
('dir1_fixture', 'expected1'),
('dir2_fixture', 'expected2')])
def test_directory_command(dirname, expected, request):
result = my_package.directory_command(request.getfixturevalue(dirname))
assert result == expected
另一种方法是使用 lazy-fixture插件:
@pytest.mark.parametrize('dirname, expected', [
(pytest.lazy_fixture('dir1_fixture'), 'expected1'),
(pytest.lazy_fixture('dir2_fixture'), 'expected2')])
def test_directory_command(dirname, expected):
result = my_package.directory_command(dirname)
assert result == expected
关于python - pytest 在参数化中使用固定装置作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51439888/