Python 有没有更好的方法来确保一个fixture在另一个fixture之后运行,而不在参数中列出这些fixture?

Python 有没有更好的方法来确保一个fixture在另一个fixture之后运行,而不在参数中列出这些fixture?,python,pytest,Python,Pytest,我有一组需要运行的预测试检查,但是其中一个检查需要初始化提供程序。 解决这个问题的方法似乎是将“foo_provider”添加到fixture参数中,以确保它在运行foo_provider之后运行。但是,我不想在预测试夹具的参数中列出20个夹具 我试过使用pytest.mark.trylast,我试过顺序标记。这些都不能正常工作(或者根本不能)。我曾尝试向pytest\u generate\u tests添加各种内容,这往往会增加测试的数量。 最后,我将kwargs添加到fixture定义中,然

我有一组需要运行的预测试检查,但是其中一个检查需要初始化提供程序。 解决这个问题的方法似乎是将“foo_provider”添加到fixture参数中,以确保它在运行foo_provider之后运行。但是,我不想在预测试夹具的参数中列出20个夹具

我试过使用
pytest.mark.trylast
,我试过顺序标记。这些都不能正常工作(或者根本不能)。我曾尝试向
pytest\u generate\u tests
添加各种内容,这往往会增加测试的数量。 最后,我将kwargs添加到fixture定义中,然后通过
pytest\u generate\u tests
中的函数修改
metafunc.\u arg2fixturedefs
,这感觉非常糟糕

我尝试过,但失败了,因为它也太早进行了检查:

@pytest.fixture(参数=[pytest.lazy_fixture('foo_provider')],autouse=True)
def预测试(测试跳过器、记录器、请求):
logger().info('正在运行预测试检查')
test_skipper()
尝试按如下方式重新排列装置,但失败(从
pytest\u generate\u tests
调用):

def execute\u pretest\u last(metafunc):
fixturedef=metafunc.\u arg2fixturedefs[“预测试”]
fixture=metafunc.\u arg2fixturedefs['pretest'][0]
名称\顺序=metafunc.fixturenames
names\u order.insert(len(names\u order)、names\u order.pop(names\u order.index(fixture.argname)))
funcarg_order=metafunc.funcargnames
函数顺序。插入(len(函数顺序),
funcarg_order.pop(funcarg_order.index(fixture.argname)))
下面的代码按预期工作,但有更好的方法吗

def pytest\u generate\u测试(metafunc):
对于metafunc.fixturenames中的装置:
如果提供程序_映射中的设备:
参数化api(metafunc,fixture),间接=真)
将夹具添加到预测试参数(元函数,夹具)
def将夹具添加到预测试参数(元函数,夹具):
pretest_fixtures=list(metafunc._arg2fixturedefs['pretest'][0]。argname)
预测试夹具。附加(夹具)
metafunc._arg2fixturedefs['pretest'][0]。argnames=tuple(pretest_fixture)
@pytest.fixture(autouse=True)
def预测试(测试队长、记录器,**kwargs):
logger().info('正在运行预测试检查')
test_skipper()

看看建议的答案,这里还有一个用于显式设备排序的示例,其中包含一些有用的片段。我试图避免在预测试中列出所有提供商设备,我无法将所有设备重命名为字母顺序,我尝试了顺序标记,但这不起作用。我想我可以试着重新安排设备。我希望有一个更好的更动态的解决方案,因为这是我在找到你链接的两个东西后得出的结论。感谢大家给出了建议的答案,这里还有一个用于显式设备排序的示例,其中包含一些有用的片段。我试图避免在预测试中列出所有提供程序设备,我无法将所有设备重命名为字母顺序,我尝试了顺序标记,但这不起作用。我想我可以试着重新安排设备。我希望有一个更好的更动态的解决方案,因为这是我在找到你链接的两个东西后得出的结论。谢谢