第二章 命令行选项
在前一章节中,咱们已经用过了-v(啰嗦模式)选项,其实pytest还有很多选项,可以用pytest –help查看所有选项,下面只讲解一部分常用的选项。举例所用的代码是上一章节创建的,忘记的同学可以翻看前一章节,这里简单说明下:
# F:\Pytest_learning\ch01\test_one.py
def test_passing():
assert (1, 2, 3) == (1, 2, 3)
# F:\Pytest_learning\ch01\test_two.py
def test_failinig():
assert (1, 2, 3) == (3, 2, 1)
# F:\Pytest_learning\ch01\ch01_sub\test_three.py
def add(x, y):
return x + y
def test_add_1():
assert add(1, 2) == 3
def test_add_2():
assert add(2, 2) == 3
–collect-only选项
该选项用来显示给定配置下会有哪些测试用例被运行,例如你接手了一个项目,不知道里面有多少测试用例,但又不想直接运行后查看结果(毕竟可能浪费很多时间,而且可能破坏测试环境),就可以使用此选项。如果嫌太长不好记,可以用缩写–co
咱们用上一章节的ch01目录来实验下,效果如下:
-k选项
该选项用来使用表达式指定特定的测试用例运行,例如你想选择名字里包含add的测试用例,可以这么写pytest -k add,如果想选择名字里包含one或者two的用例,可以这么写pytest -k “one or two” (注意,这里需要添加双引号),下面让咱们结合上一个–collect-only选项来看看实际效果:
当然,你也可以选择直接运行:
-m选项
该选项用于运行做过标记的用例。例如你有两个名字完全不同的用例,但是关于同个功能模块的,你想让他们一起运行,那么上面提到的-k选项就无能为力了,这时候就需要使用标记。当然,需要你事先在用例上做标记,然后才能去找被你标记过的用例嘛。
那么,怎么标记用例呢?python里有个叫装饰器的东西,就是@开头的,如果不大清楚具体原理,建议百度下。咱们要做的,只是在用例前面加上 @pytest.mark.标记名 就行了,是不是很简单。让咱们用上一章节的代码作为例子,如果你想运行test_one.py里的test_passing和test_three.py里面的test_add_2,可以如下修改代码:
test_one.py:
import pytest
@pytest.mark.demo01
def test_passing():
assert (1, 2, 3) == (1, 2, 3)
test_three.py:
import pytest
def add(x, y):
return x + y
def test_add_1():
assert add(1, 2) == 3
@pytest.mark.demo01
def test_add_2():
assert add(2, 2) == 3
可以看到,咱们用demo01进行了标记(需要import pytest),然后再用-m选项来测试一下吧:
可以看到用例 test_passing和test_add_2都被准确地选中了,是不是amazing啊。
还有更强大的呢,比如你同个用例想分到多个组里,那就可以对其添加多个标记,然后使用的时候,还可以用 -m “mark1 or mark2″这种形式来同时选中具有mark1标记和mark2标记的所有测试用例。
-x选项
该选项用于断言失败或者触发了异常时立即停止整个会话。正常情况下,pytest会依次执行每条用例,即使某条失败,也会标记失败后继续进行,而添加此选项后则会立即停止,这样可以方便咱们进行调试。下面比较下添加和不添加的效果:
已知第二个用例失败,不加-x,则继续运行后面的用例;
添加-x,则遇到失败的立即结束
–maxfail=num选项
-x选项的特点是,遇到失败或者异常就会停止,但是假如你知道有个用例肯定失败,并不想马上停止,那么可以用–maxfail选项来指定失败几次之后才停止,-x的选项其实就是–maxfail=1。由于之前的用例只有2个失败,如果设置为1,那么就和-x效果一样,如果设置为2,那就和没设置一样,咱们试试看吧:
–maxfail=1
–maxfail=2
-s选项
该选项允许测试运行时输出任何符合标准的输出流信息,例如代码里面的print。例如咱们修改下test_one.py里的用例,加上print一些信息。
import pytest
@pytest.mark.demo01
def test_passing():
print('测试是否会打印出来')
assert (1, 2, 3) == (1, 2, 3)
然后再来试试-s的效果吧:
不加-s:
加-s:
–lf选项
该选项用于重新运行之前失败的用例,如果没有任何失败,则全部重跑。例如上次运行的4个用例中,有2个失败了,那么使用–lf(–last-failed)选项,则当前只会运行上次失败的那两个用例(可以推论出,每次运行的结果其实会缓存在你电脑本地,如果你关注下用例文件夹,就会发现多了一个F:\Pytest_learning\ch01\.pytest_cache\v\cache,里面缓存着执行的信息之类的东西,后面再了解吧)。
–ff选项
即先运行失败再运行其他(–failed-first)。如下图,原本正常的顺序应该是test_one.py第一个运行,使用–ff选项后,先运行了2个失败的用例(即使同个文件内的,也是只先运行失败的那个),另外两个上次成功的才开始执行。
-v选项
这个是老朋友了,就是啰嗦模式,啥信息都显示,看得眼花缭乱。
-q选项
和-v选项刚好相反,这个是安静模式,只显示关键的信息(例如失败原因)。
-l选项
该选项用来失败时显示局部变量(–showlocals),主要是用来调试。那让咱们给用例增加点局部变量来看看效果好了。如果不知道啥是局部变量也不要紧,后面用到再说,或者可以先百度。
没加选项:
增加选项:
可以看到,最后将局部变量local的值显示了出来。
–tb选项
traceback(回溯)该选项用于失败时输出哪些信息,有short、line、no三种模式可以选择。
- short 仅显示assert的一行以及系统判定内容
- line 使用一行输出所有错误信息
- no 啥都不显示
下面来看看三种模式的不同。
short模式:
line模式:
no模式:
简单地说,
no告诉你失败了;
line告诉你哪里失败了;
short告诉你为啥失败了。
除了这些,还有–duration选项用来显示哪个阶段占用时间最长,–version显示版本,–h显示帮助等,作用不是很大,就不一一赘述了。
下一篇:第三章 编写测试函数
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/4657.html