有没有更好的方法来确保固定装置接连运行而不在参数中列出这些固定装置?

时间:2019-04-11 19:09:22

标签: python pytest

我有一组需要运行的预测试检查,但是其中一项检查需要初始化提供程序。     看来解决此问题的方法是将'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)))

0 个答案:

没有答案