pytest想要运行指定用例除了可以在命令上加参数,还能通过在文件里配置来实现运行指定的用例
up收到的需求是,在jenkins上通过勾选用例之后构建任务,pytest就能够执行指定的用例
up设计的是通过把想要执行的用例都配置到yml文件中,在jenkins勾选后,就可以修改里面的文件来达到需求
#yml文件
ScriptsFile:
all_script: #这里代表的是所有的用例,方便jenkins去显示所有的用例
- test_a
- test_b
- test_c
- test_d
- test_e
- test_f
- test_g
- test_h
- test_i
- test_j
run_script: #这里代表的是需要执行的用例
- test_a
- test_d
- test_e
- test_c
因为up是通过并行执行用例的方式去执行,所以收集获取是放在了pytest_configure钩子函数中,作为前置函数(具体可以看up之前的帖子)
在前置函数中通过yml读取到需要执行的用例,并保存在环境变量中(不能用全局变量,因为其他进程的worker不能获取到),然后在pytest_collection_modifyitems钩子函数中拿到,就可以去掉不需要的用例了(注意:只能在原items中进行操作,不能新建items对象来替换,否则会失效)
def pytest_collection_modifyitems(items):
'''
收集用例钩子函数:根据配置过滤出不需要的用例
:param session:
:param config:
:param items:
:return:
'''
if len(items) == len(os.environ['runlist'].split(',')):
for i in range(len(items) - 1, -1, -1):
if items[i].name not in os.environ['runlist'].split(','):
items.remove(items[i])