《pytest测试实战》新手友好版——第二章 命令行选项

第二章 命令行选项       

       在前一章节中,咱们已经用过了-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显示帮助等,作用不是很大,就不一一赘述了。

 

下一篇:第三章 编写测试函数

  • 16
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值