Pytest 测试用例调度与运行
同学们大家好,这个章节我们来学习 pytest 框架中如何调度与运行用例。
简介
在 pytest 中,测试用例的调度与运行指的是 pytest 如何发现、加载、排序并执行测试。
在 pytest 中,测试用例的调度与运行是指 pytest 如何发现、加载、排序并执行测试。这包括从哪些文件中收集测试、按什么顺序执行测试等等。
测试用例执行顺序
默认情况下,pytest 会按照文件名的字母顺序,逐个收集测试文件,并按文件中函数和类的定义顺序运行测试。
- 按文件顺序:测试文件的字母顺序。
- 按函数顺序:在每个文件中,按函数定义的顺序执行。
- 按类顺序:如果测试类内包含多个测试方法,则按方法定义顺序运行。
那 pytest 执行用例的顺序是怎么样的呢?在默认情况下,pytest 会按照文件名的字母顺序来收集和执行测试文件,在每个文件中,会按照函数的定义顺序执行。如果有类,测试方法的执行顺序也是按类中的定义顺序来执行。
控制测试用例的执行顺序
- pytest-order 插件:允许用户显式控制测试执行顺序。
- 只执行失败:
--lf(--last-failed)
,只重新运行上次执行失败的用例 - 失败优先:
--ff(--failed-first)
,先运行上次执行失败的用例,然后再运行其余的测试
如果我们想控制测试用例的执行顺序,可以使用这几种方式。pytest order 插件可以用来显式地控制测试用例的执行顺序。还可以在 pytest 命令中使用 杠杠lf 参数,这个参数可以重新运行上次执行失败的测试用例。也可以使用 杠杠ff 参数,这个参数可以先执行失败的测试用例,然后再执行其余的测试用例。
只重新运行失败的测试用例
pytest test_double.py --lf
比如执行 pytest test double点py 杠杠lf 命令,pytest 只会重新运行上次失败的测试用例,这在调试时非常有用。比如我们修复了一个测试用例的 bug,可以只运行失败的部分,节省时间。
将用例修改成功后再运行这一命令,则会将所有测试用例执行一遍。
如果用例修复成功并且没有失败,可以再次运行命令来执行所有的测试用例,确保一切都通过。
先运行失败的测试用例然后再运行其余的测试用例
pytest test_double.py --ff
如果我们希望在测试时优先运行失败的用例,然后再运行其他用例,就可以使用 pytest test double点py 杠杠ff 命令,这样会先运行之前失败的测试用例,然后再运行其他的测试。
下面给大家演示一下具体操作。我们已经准备好了一个测试文件,然后在里面准备好了被测对象和测试用例,这里有一个用例是会失败的。那么下面我们来执行一下看看效果。先正常执行一遍,进入命令行,通过 pytest 命令指定执行 test run control 文件。好,执行完了之后我们会发现有一个失败的,有三个成功的。那接下来的话我们就来指定只执行失败的,加上 杠杠lf。那这样我们可以看到就是只有失败的这一条用例再次的被执行了,剩下的 3 个是没有执行的。那再看下另一个场景。这里我们可以在命令里通过 杠杠ff 参数来指定一下优先执行失败的用例。然后可以看到我们优先执行了那个失败的。然后我们可以往上翻一下看看日志,大家很明显可以看到其余三条之前成功的用例也被执行了,而且是执行通过了。
./assets/Pytest测试用例调度与运行.mp4
总结
- 测试用例执行顺序
- 控制测试用例的执行顺序
最后我们来总结一下。这个章节了解了 Pytest 默认的测试执行顺序,如何控制测试的执行顺序,尤其是如何通过命令控制只执行失败的用例,或者先执行失败的用例等。这样可以提高测试的效率,特别是在调试过程中。好了,关于 pytest 中测试用例的调度与运行先介绍到这里。