前言

pytest 运行完用例之后会生成一个 .pytest_cache 的缓存文件夹,用于记录用例的ids和上一次失败的用例。

1、跑自动化时经常会出现这样一个情况,一轮自动化跑完后零星出现了几个失败测试用例,无法断定失败的原因,所以可能需要重新跑一下失败的测试用例去调试,那我们要做的是就去修改脚本把那几个失败的测试用例筛选出来然后重新跑一遍;

2、但是在pytest测试框架因为有缓存功能,就不需要手动去查找上次失败的测试用例并筛选执行。

3、pytest测试框架中执行完所有的测试用例后会在当前目录下生成 .pytest_cache ,里面就保存了上一次用例执行的信息。

pytest测试框架中跟缓存有关的命令行参数

1、 --last-failed : 如重新运行上次运行结果为失败的测试用例, 如果没有执行失败的用例则执行所有的测试用例。【 --lf 】

场景:因为某次改动导致了多个测试用例失败了,那么我可以先执行一次全量测试找出所有失败的用例,待问题修复后,再次执行时带上这个选项就可以快速的进行验证:只执行失败用例验证失败用例是否已修复。

这个的实现原理是:pytest会在每次执行时将该次执行失败的所有用例存到测试文件同级目录下的名为.pytest_cache/v/cache/lastfailed的隐藏文件里,这样就清楚的标明了上次执行失败的用例。

2、 --failed-first :运行所有测试,但首先运行上次运行失败的测试(这可能会重新测试,从而导致重复的 fixture setup/teardown )【 --ff 】

3、 --new-first :根据文件插件的时间,新的测试用例会先运行。【 --nf 】

3、 --cache-show :显示 .pytest_cache 文件内容,不会收集测试用例也不会执行测试用例

4、 --cache-clear :开始执行测试之前先清空 .pytest_cache 文件

 .pytest_cache 文件夹详解

pytest之.pytest_cache文件夹作用【Pytest中的cache缓存功能】_测试框架

1、 .pytest_cache/v/cache/lastfailed :上一次运行失败的测试用例。

pytest之.pytest_cache文件夹作用【Pytest中的cache缓存功能】_用例_02

2、 .pytest_cache/v/cache/nodeids :上一次运行的所有测试用例(无论测试用例的执行结果通过还是失败)。

pytest之.pytest_cache文件夹作用【Pytest中的cache缓存功能】_用例_03

 3、 .pytest_cache/v/cache/stepwise :测试用例的路径。

pytest之.pytest_cache文件夹作用【Pytest中的cache缓存功能】_用例_04

4、 .pytest_cache/v/cache/.gitignore :pytest测试框架 .pytest_cache的自带的 .gitignore 文件。

5、 .pytest_cache/v/cache/CACHEDIR.TAG :pytest创建的缓存目录标签。

pytest之.pytest_cache文件夹作用【Pytest中的cache缓存功能】_用例_05

6、 .pytest_cache/v/cache/README.md : .pytest_cache 文件夹介绍。

pytest之.pytest_cache文件夹作用【Pytest中的cache缓存功能】_测试框架_06

实例

pytest之.pytest_cache文件夹作用【Pytest中的cache缓存功能】_测试用例_07

一共七个测试用例,四个PASSED,三个FAILED

 --last-failed 

pytest之.pytest_cache文件夹作用【Pytest中的cache缓存功能】_测试用例_08

这里只运行了上一次失败的测试用例。

 --failed-first 

pytest之.pytest_cache文件夹作用【Pytest中的cache缓存功能】_测试用例_09

这里首先会执行之前失败的测试用例,然后在运行其他的测试用例。

 --cache-show 

pytest之.pytest_cache文件夹作用【Pytest中的cache缓存功能】_用例_10

【注意】

①重复运行同一组测试用例时(测试套不变), .pytest_cache 目录中的文件不变。

pytest之.pytest_cache文件夹作用【Pytest中的cache缓存功能】_用例_11

②上一次运行的一组测试用例,下一次运行另一组测试用例, .pytest_cache 目录中的文件会改变,会加上另一组测试用例的信息。

pytest之.pytest_cache文件夹作用【Pytest中的cache缓存功能】_用例_12

③继②后,此时若想去除 .pytest_cache 目录中文件的内容,重新运行第一组的测试用例,并带上命令行参数 --cache-clear 。

pytest之.pytest_cache文件夹作用【Pytest中的cache缓存功能】_用例_13

去期待陌生,去拥抱惊喜。