《pytest测试实战》新手友好版——第一章 pytest入门

序言

当当上买了的Brian Okkend 的《pytest测试实战》(《Python Testing with pytest》),就是画着火箭的那本,

看完一遍确实对pytest有了更深一层的了解,但是总觉得有的地方翻译得不是很到位,一些例子也比较晦涩难懂,对于新手入门还是不大友好,然而市面上暂时又没有搜罗到更好一点的书了,所以打算自己以《pytest测试实战》为蓝本,用系列文章把里面的每一章都重新梳理一遍,对于和pytest关联不大的地方进行删减(例如虚拟环境和namedtuple之类的,虽然也是很有用的知识),用一些简单点的例子更加直观显示pytest的功能。这么做的目的,一方面是自己也会使用pytest,可以加深自己的理解,一方面也希望能给新手们提供更好的参考资料,当然,如果有错误也希望大家指出来,一起进步,哈哈哈。

 

 

第一章 pytest入门

1.1 安装pytest

如果你已经安装了Python3.5版本或者更高的版本(如果还没有,强烈建议升级),应该也对pip安装第三方库不陌生了,是的,在CMD里面执行如下命令就能安装pytest了

pip install pytest

建议先修改pip的安装源为国内,可以大大提高安装速度,方法如下:

直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini,内容如下

[global]
index-url = http://pypi.douban.com/simple
[install]
trusted-host=pypi.douban.com

 

1.2 第一个例子

后面咱们的代码都是在Windows环境运行(毕竟新手一般用的都是Windows)。

首先建个学习的目录(F:\Pytest_learning)吧,后面咱们都在这个目录下按章节建子目录和脚本进行练习。

第一章就在ch01目录下(F:\Pytest_learning\ch01)。

编辑器可以使用Windows自带的记事本,或者用sublime,可以参考我这个帖子(https://blog.csdn.net/weijiaxin2010/article/details/89925697)。

那么咱们创建第一个脚本test_one.py(F:\Pytest_learning\ch01\test_one.py),内容如下:

def test_passing():
    assert (1, 2, 3) == (1, 2, 3)

打开CMD,CD到F:\Pytest_learning\ch01,执行如下命令:

pytest test_one.py

结果如下:

可以看到,倒数第二行,test_one.py 后面有一个点号(.), 表示运行了一个测试用例(不是指一个文件哦,而是py文件里的用例数,后面细说),并且测试通过。

如果需要查看更加详细的内容,可以加上选项 -v ,进入啰嗦模式(verbose),如下图:

让咱们再来看一个测试失败的例子。

创建第二个脚本test_two.py,内容如下:

def test_failing():
    assert (1, 2, 3) == (3, 2, 1)

然后咱们再来看执行结果:

是不是非常的详细呢?这就是pytest受欢迎的原因。它有一块专门显示失败信息的区域FAILURES,而且用红色字体提示主要的错误,方便用户阅读。同样的,如果你添加-v参数,能看到更详细的结果。

可以看到,使用啰嗦模式后,增加了^符号来标记出具体的差异,虽然这个例子略显无聊。

 

1.3 运行pytest

在1.2的例子中,我们为pytest命令指定了目标文件,其实pytest也可以批量运行指定目录(如果不指定,就是当前目录)下的测试用例,为了搜索所有的测试代码,pytest会递归遍历每个目录及其子目录。

而你的测试代码,需要满足如下的命名规则:

  1. 测试文件应该用 test_ 开头或者 _test 结尾
  2. 测试函数、测试方法应该以 test_ 开头
  3. 测试类应该以 Test 开头

在ch01文件夹中,咱们已经写了两个用例,现在,让咱们新建一个子目录,然后再添加一个例子:

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

其中add是被测试函数,并对其设计了两条测试用例。

这时候,如果咱们切换到ch01目录下,直接执行pytest命令,那么会运行ch01目录下的3个测试文件。

下面让咱们来讲解下控制台的这些输出信息都是啥意思。

========= test session starts ========

    测试会话(session)的分隔,一段会话就是pytest的一次调用。

platform win32 -- Python 3.7.0, pytest-3.8.0, py-1.6.0, pluggy-0.7.1

     platform后面跟着测试平台,Windows是win32,Mac是darwin,Linux的话就读者自己尝试下吧(其实是我暂时没试)。--后面跟着的就是python和pytest的版本,还有pytest插件包的版本。

rootdir: F:\Pytest_learning\ch01, inifile:

    rootdir表示当前起始目录,inifile后面应该跟着配置文件,不过这里没有指定,所以冒号后面是空的。

collected 4 items

    表示搜索到了4个测试条目(条目=用例)。

test_one.py .                                                            [ 25%]
test_two.py F                                                           [ 50%]
ch01_sub\test_three.py .F                                      [100%]

    文件名+测试结果和条目占比,每个文件占一行,点号表示测试通过,F表示测试失败,中括号里的百分号表示执行到此文件时所执行的测试条目数占总条目的百分比。

可能出现的测试结果有如下几种:

  • PASSED (.):测试通过。
  • FAILED (F):测试失败。
  • SKIPPED (s):跳过,即没有被执行。
  • XFAIL (x):预期测试失败,并且确实失败了。
  • XPASS (X):预期测试失败,但实际上通过了,不符合预期。
  • ERROR (E):测试用例之外的代码出错了(触发了异常)。

========= 2 failed, 2 passed in 0.14 seconds ==========

    表示失败和通过的用例数,以及这段会话(这次运行)耗费的时间。

 

上面的例子中,咱们在test_three中有2个测试条目(用例),如果你只想运行其中的一个,怎么办呢?

答案就是在指定文件名之后添加::test_name(注意是两个冒号),就像下面这样:

 

 

下一章:第二章 命令行选项

  • 31
    点赞
  • 155
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值