Pytest的优势是可以自动搜索测试用例并执行,并且还会自动保存上次运行fail的用例列表,但是在实际应用中还是有不方便的地方。
遇到的问题
- 在实际回归中,很可能是这样操作的
- 运行10个case,结果有5个是fail的
- 开始逐个调试这5个case
- 调完之后准备单独把之前fail的5个case连跑
- 此时如果带上“–last-failed”运行pytest,跑的是最后一次fail的case,并不是我想要的结果
分析问题
- 首先要明确fail的case列表存在哪里,其实就存在运行pytest的隐藏目录中
./.pytest_cache/v/cache/lastfailed
- 看一下内容,一下就明白了,原来就是存了一个字典,key是fail的case,value是true表示需要运行
{
“case1.py”:true,
“case2.py”:true
}
解决问题
- 之前已经写了一个脚本,在运行pytest的时候,生成一个包含日期时间字符串的html report
- 只要在脚本的最后,将./.pytest_cache/v/cache/lastfailed文件复制一份出来,命名中包含同样的时间字符串,方便查找
- 脚本中getopts新增一个参数,后面跟的就是类似上步保存的fail list,做两件事
- 用指定的faillist替换./.pytest_cache/v/cache/lastfailed
- 将运行pytest的参数加上“–last-failed”
- 这样一来,就实现了保存fail list,并可以只跑fail list的功能
- 当然,你也可以自己对fail list进行编辑,例如删除添加或者将true改为false