pytest常用选项
Posted wenshu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytest常用选项相关的知识,希望对你有一定的参考价值。
1. 测试代码的命名规则:
测试文件应该用 test_ 开头或者 _test 结尾
测试函数、测试方法应该以 test_ 开头
测试类应该以 Test 开头
2. 如果想指定运行py文件中的某一个,可以使用:在指定文件名之后添加::test_name
3. 运行pytest
pytest
pytest 文件名称
4. pytest -v 进入详细日志模式
5. --collect-only选项
该选项用来显示给定配置下会有哪些测试用例被运行,例如你接手了一个项目,不知道里面有多少测试用例,但又不想直接运行后查看结果(毕竟可能浪费很多时间,而且可能破坏测试环境),就可以使用此选项
6. -k选项
该选项用来使用表达式指定特定的测试用例运行,例如你想选择名字里包含add的测试用例,可以这么写pytest -k add,如果想选择名字里包含one或者two的用例,可以这么写pytest -k "one or two" (注意,这里需要添加双引号),下面让咱们结合上一个--collect-only选项来看看实际效果:
pytest -k "quick"
pytest -k "quick" --collect-only
7. -m选项
该选项用于标记测试并分组,一遍快速选中并运行。例如你有两个名字完全不同的用例,但是关于同个功能模块的,你想让他们一起运行,那么上面提到的-k选项就无能为力了,这时候就需要使用标记。当然,需要你事先在用例上做标记,然后才能去找被你标记过的用例嘛。
那么,怎么标记用例呢?python里有个叫装饰器的东西,就是@开头的,如果不大清楚具体原理,建议百度下。咱们要做的,只是在用例前面加上 @pytest.mark.标记名 就行了
例如:
pytest test_three.py -m "demo" 指定运行带mark标记的函数
拓展:还有更强大的呢,比如你同个用例想分到多个组里,那就可以对其添加多个标记,然后使用的时候,还可以用 -m "mark1 or mark2"这种形式来同时选中具有mark1标记和mark2标记的所有测试用例
8. -x选项
该选项用于断言失败或者触发了异常时立即停止整个会话。正常情况下,pytest会依次执行每条用例,即使某条失败,也会标记失败后继续进行,而添加此选项后则会立即停止,这样可以方便咱们进行调试。下面比较下添加和不添加的效果:
pytest test_three.py -m "demo" -x
9. --maxfail=num选项
-x选项的特点是,遇到失败或者异常就会停止,但是假如你知道有个用例肯定失败,并不想马上停止,那么可以用--maxfail选项来指定失败几次之后才停止,-x的选项其实就是--maxfail=1。由于之前的用例只有2个失败,如果设置为1,那么就和-x效果一样,如果设置为2,那就和没设置一样,咱们试试看吧:
10. -s选项
该选项允许测试运行时输出任何符合标准的输出流信息,例如代码里面的print。例如咱们修改下test_one.py里的用例,加上print一些信息
-v选项
这个是老朋友了,就是啰嗦模式,啥信息都显示,看得眼花缭乱。
-q选项
和-v选项刚好相反,这个是安静模式,只显示关键的信息(例如失败原因)
11. --lf选项
该选项用于重新运行之前失败的用例,如果没有任何失败,则全部重跑。例如上次运行的4个用例中,有2个失败了,那么使用--lf(--last-failed)选项,则当前只会运行上次失败的那两个用例。
12. --ff选项
即先运行失败再运行其他(--failed-first)。如下图,原本正常的顺序应该是test_one.py第一个运行,使用--ff选项后,先运行了2个失败的用例(即使同个文件内的,也是只先运行失败的那个)
13. -l选项
该选项用来失败时显示局部变量(--showlocals),主要是用来调试。那让咱们给用例增加点局部变量来看看效果好了。
14. --tb选项
该选项用于失败时输出哪些信息,有short、line、no三种模式可以选择。
short 仅显示assert的一行以及系统判定内容
line 使用一行输出所有错误信息
no 啥都不显示
--tb=short
--tb=line
--tb=no
简单地说,
no告诉你失败了;
line告诉你哪里失败了;
short告诉你为啥失败了。
除了这些,还有--duration选项用来显示哪个阶段占用时间最长,--version显示版本,--h显示帮助等
以上是关于pytest常用选项的主要内容,如果未能解决你的问题,请参考以下文章