我想使用fixture作为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 param s的问题是,fixture的每个参数在每次使用时都会运行,但我不希望这样。我想能够选择哪些设备将使用取决于测试。
如果您使用的是Pytest3.0或更高版本,我认为您应该能够通过沿着以下几行编写一个fixture来解决这个特定的场景:
这里的文档: http://doc.pytest.org/en/latest/builtin.html#_pytest.fixtures.FixtureRequest.getfixturevalue
但是,如果试图动态加载的设备是参数化的,则不能使用此方法。
或者,您可以使用pytest_generate_tests钩子找出一些问题。不过,我还没来得及调查那么多。
pytest当前不支持此操作。但是有一个开放的特性请求:https://github.com/pytest-dev/pytest/issues/349。
目前,我唯一的解决方案是创建一个fixture,返回fixture字典。
不是最好的,因为它不使用pytest中内置的解决方案,但它对我有效。
相关问题 更多 >
编程相关推荐