Pytest 使用nodeid运行测试用例
背景
近期在做API接口自动化平台,平台的主要功能是创建自动化任务、查看报告、查看运行失败用例及一些针对不同类型任务的搜索功能。
最近想增加一个失败用例重跑的功能。虽然pytest有针对失败重跑的插件(pytest-rerunfailures),但是插件是集成在pytest的每次任务运行过程中进行的。比如一共跑10个case,第1个case失败后,如果设置了“–reruns”参数,则紧接着就会重新跑这个失败的case。
而我设想的功能是在整个pytest任务执行结束后,再重新批量运行这些失败的cases。大概就是当前任务行,有一个[重跑]按钮,点击这个按钮就可以新建一个任务。
步骤
1. 收集失败case nodeid
想要完成这个目标,做的第一步工作就是收集每次运行失败的case,这个相对简单,使用pytest提供的hook函数即可实现。这里我使用了def pytest_runtest_logreport(report):
实现。
收集到的case nodeid类似这样:
xxx/tests/test_all/test_homepage.py::TestHomePageAPI::test_homepage_api[SA-1-10-200-A_AR]
关于nodeid的描述,pytest的官方文档给出了大概的解释:
Each collected test is assigned a unique nodeid which consist o