pytest
固定装置可以通过将它们作为参数传递来处理其他固定装置:
@pytest.fixture(scope='module')
def wrapper_fixture1(fixture1):
fixture1.do_something()
return fixture1
现在我有多个不同的装置
fixture1
、 fixture2
和 fixture3
它们是不同的,但有相似之处(例如一个名为 do_something()
的函数),我想应用到它们中的每一个。但不是定义三个新的装置(如示例中所示),我想定义一个通用的装置/函数来创建三个我可以传递给测试的装置。我在想这样的事情:
def fixture_factory():
for index in range(3):
fixture = pytest.get_fixture('fixture%d'%(index+1))
fixture.do_something()
pytest.set_fixture('wrapper_fixture%d'%(index+1), fixture, scope='module')
这可以以某种方式完成吗?或者我是否必须为每个原始装置编写三个包装装置,一遍又一遍地重复相同的代码?
最佳答案
要通过字符串获取夹具,您可以在测试函数或其他夹具中使用 request.getfuncargvalue()
。
您可以尝试以下方法:
import pytest
@pytest.fixture
def fixture1():
return "I'm fixture 1"
@pytest.fixture(scope='module')
def fixture2():
return "I'm fixture 2"
@pytest.fixture(params=[1, 2])
def all_fixtures(request):
your_fixture = request.getfuncargvalue("fixture{}".format(request.param))
# here you can call your_fixture.do_something()
your_fixture += " with something"
return your_fixture
def test_all(all_fixtures):
assert 0, all_fixtures
关于python - 如何通过字符串访问 pytest 固定装置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24140639/