我有一组需要运行的预测试检查,但是其中一项检查需要初始化提供程序。 看来解决此问题的方法是将'foo_provider'添加到Fixture参数中,以确保它在foo_provider运行之后运行。但是,我不想在预测试治具的参数中列出20个治具。
我尝试使用import requests
rssFeed = "https://www.dell.com/community/s/vjauj58549/rss/boardmessages?board.id=Inspiron&count=100"
xmlData = requests.get(rssFeed)
... parse xmlData ( i.e., xml to dict) ) ...
,我尝试使用订单标记。这些都不能正常工作(或根本无法工作)。我尝试将各种东西添加到pytest.mark.trylast
中,这往往会使测试数量增加。
我终于通过在夹具定义中添加了kwargs,然后通过pytest_generate_tests
中的一个函数来修改metafunc._arg2fixturedefs
来进行管理,感觉真不好。
我尝试并以失败告终,因为它也过早进行了检查:
pytest_generate_tests
尝试并无法像这样重新排序灯具(从@pytest.fixture(params=[pytest.lazy_fixture('foo_provider')], autouse=True)
def pretest(test_skipper, logger, request):
logger().info('running pretest checks')
test_skipper()
开始):
pytest_generate_tests
下面的代码可以正常工作,但是有更好的方法吗?
def execute_pretest_last(metafunc):
fixturedef = metafunc._arg2fixturedefs['pretest']
fixture = metafunc._arg2fixturedefs['pretest'][0]
names_order = metafunc.fixturenames
names_order.insert(len(names_order), names_order.pop(names_order.index(fixture.argname)))
funcarg_order = metafunc.funcargnames
funcarg_order.insert(len(funcarg_order),
funcarg_order.pop(funcarg_order.index(fixture.argname)))