pytest使用参数化传入用例数据时,如何通过用例数据中的level来选择执行?

image
如图,我这边一个方法是一个接口,配备了一个yaml配置文件,用于存放用例数据,然后通过pytest.mark.parametrize,来将yaml中的用例数据进行参数化传入,其中用例的等级就存放在这个case_data中,现在需要通过level来制定执行策略,我通过allure.dynamic将用例等级动态写入到了报告中,也可以查看。但是动态加载写入的等级并不能通过–allure-severities = critical 来选择critical用例执行,而使用@allure.severity装饰器写入的等级则可以。但使用装饰器时,我这个level并不能传进去,@pytest.mark同理,找了很久没有找到实现方法,特来求助各位!

@allure.title 这个装饰器可以接收 参数,
@allure.severity这个装饰器因为是接收的一些它自定义好的参数,所以不能接收自定义的传参,

写在方法里,动态的定义级别,因为初始化的时候不会发现这些动态的定义,也不会找到

可以试着自己写个插件,动态的解析参数是否有severity这个参数,然后解析出来 就可以了。

简单的实现方法,改写hook 函数pytest_collection_modifyitems

写个简单的例子,仅供参考:

def pytest_collection_modifyitems(session, config, items: list):
    for item in items:
        print(item.nodeid)
        if 'normal' in item.nodeid:
            item.add_marker(pytest.mark.normal)

        if 'critical' in item.nodeid:
            item.add_marker(pytest.mark.critical)

感谢老师,这样看来好像的确是原包的局限性了。我水平很一般,还没有动过源码的经验,我尝试理解、试一下吧!

关闭