zl程序教程

您现在的位置是:首页 >  后端

当前栏目

手把手教你pytest测试框架(1)—— 初识框架

pytest测试框架 手把手 初识
2023-09-11 14:14:51 时间

pytest测试框架

简介

pytest是Python的测试框架,类似于unittest,但比unittest更简洁,直接,易上手,功能更强大,且可兼容unittest的代码。

它可以实现,执行用例时跳过某些用例、用例执行失败后可重新执行、对执行失败的用例进行标记等。

pytest有丰富的第三方插件,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等。

pytest还支持自定义扩展。

安装

pip install pytest

安装后,可通过pytest –version命令查看版本

文件、类及函数命名及书写规则

使用pytest,文件、类、函数不能随意命名,必须按照其规则进行命名,否则pytest无法识别。

测试文件以test_开头(以_test结尾也可)

测试类以Test开头,注意,Test首字母要大写

测试类名称后面直接跟冒号,而不能有()

测试类不能带有 init 方法

测试类里的每个函数都必须有参数(self)

测试函数以test_开头,注意,这时首字母要小写

断言使用基本的assert即可

一个简单的pytest实践

先创建一个文件叫做test_study.py,注意文件名是以test_开头的,符合pytest规则,在这个文件里写一段简单的程序:

在这里,test_answer()是以test_开头的,这符合规则,但func(x)则无需按规则命名,因为我们测试的是test_answer()函数,如果想测试func(x)函数,那么也需把它按规则命名

无需import pytest,写完两个函数后也无需调用它们,注意,第二个函数里面调用了第一个函数,且使用了断言,且故意使断言语句发生错误,func(3)的正确值应为4,但故意写成5以制造一个错误

执行的时候,不要在pycharm里直接执行,要在pycharm的terminal里或以管理员身份在命令行窗口里输入pytesttest_study.py(执行方式实际不止这两种,实际是三种,后文书介绍)

执行结果:

terminal:

命令行:

二者的结果是一样的,其中有如下结果:

它告诉我们,def test_answer()这个函数发生错误,断言应为4,但实际给的值是5。

执行方式

Terminal执行

第一是在pycharm的Terminal里输入命令来执行,如pytest -s test_study.py -m=mn1

以管理员身份在命令行执行

第二是以管理员身份在命令行窗口里输入命令来执行,如pytest -stest_study.py -m=mn1

main语句块执行

第三是在python代码本身里执行,这种方式需要:

把命令写到main语句块里

在pytest后面加上.main

把参数、文件名称用引号引起来

如pytest.main([“-s”,“test_study.py”, “-m=mn1”])

调用执行

如果把调用语句单独写出来,并且不放到main语句块里,那么也是可以执行用例的,比如下面的写法:

但是这种写法很容易出错,经常会把用例执行多遍,原因尚不明,所以要杜绝这种写法,解决这个问题的方法有两种:

  1. 把执行语句单独放到一个文件里,如下面的写法:

  1. 直接执行这个文件,就可以正确执行相应的用例了。

  1. 把执行语句封装成函数,再调用这个函数,如下面写法:

execute.py文件里封装了执行语句,再在main.py里调用它:

这样就可以了。

特别注意:如果采用了以上两种方法,仍然出现用例执行多遍的现象,通常是在某个文件里的main语句块外写上了执行语句,再强调一遍,那种写法容易造成用例执行多遍,必须严格杜绝。

需要注意的一个问题

不论是在Terminal、命令行,还在main语句块里,输入执行命令时等号两端都不能有空格,如这样:“-m = mn1”。

虽然等号两端加空格在python里是一种常用写法,但在使用pytest时则不被语法允许,尤其要注意当在main语句块里写命令的时候,由于就是在代码中去写,所以很容易习惯性地把等号两端加上空格。(未完待续)