单元测试框架--pytest从入门到精通2021最新教程

详细介绍pytest单元测试框架,这篇文章,准备了好长的时间。写得很全面、介绍得很彻底,我很确定,一定会给你很大的收获。
作者是一个互联网行业的小测试,只为将自已学过的,工作中运用到的,及之前碰到的疑难问题且得到解决方面,和大家分享。作者将从UI自动化测试、接口自动化、简易Web开发框架、各种测试工具、基础运维小知识等方面,跟各位大神一起探讨。

一、pytest简介

1.1 简述pytest

稍微有一点基础的测试,或者接触过python语言,首先想到的肯定是unittest。但是,今天我们再来详细掌握另一款单元测试框架–pytest

官网中是这样描述pytest的:
pytest: helps you write better programs。
CET-4翻译:pytest:帮你们写更好的程序。

The pytest framework makes it easy to write small tests, yet scales to support complex functional testing for applications and libraries.
CET-4翻译:pytest框架让我们更轻松的写更小型的测试,但是它支持扩展应用程序和库的复杂功能测试。

1.2 pytest插件安装

正如上面官网中描述的一样,它有着强大的插件,那先介绍几个基本的插件:

  1. pytest-html -->生成html格式的测试报告
  2. pytest-xdist -->测试用例分布式执行
  3. pytest-ordering -->改变测试用例的执行顺序
  4. pytest-rerunfailures -->用例失败后重新运行
  5. allure-pytest -->生成测试报告

开始安装上述插件,以往我们都是一个一个通过pip install安装,但是,太慢了。现在换一种方式,全部一次性安装。

  1. 首先,在D盘根目录,新建一个txt文件,将上面5个复制到文件中,去掉空格和中文
    在这里插入图片描述
  2. 打开cmd,输入如下命令:
pip install -r d:\py.txt

cmd中安装效果如下:
在这里插入图片描述

1.3 查看是否安装成功

cmd中,直接输入命令:pip list

pip list

在这里插入图片描述
如上图,还多帮我们装了两个。代表安装成功。如不放心,还可通过pip show pytest-html 查看。

pip show pytest-html

在这里插入图片描述

二、pytest的应用

2.1 pytest的使用规则

2.1.1 模块名必须以test_开头或者_test结尾

2.1.2 测试类必须以Test开头,且不能有init方法

2.1.3 测试方法必须以test开头

发现没?这一点,和unittest是一样的。

2.1.4 测试执行顺序

  1. 默认从上到下,与unittest不一样。用例中使用test_01如果不是第一条用例,则不会第一执行它。
  2. 如果想要改变它的执行顺序,可通过pytest独有的方式,来改变执行顺序。
    函数前加:@pytest.mark.run(order=1),则首先执行该函数。(如未安装,则需要安装插件:pytest-ordering,但我们刚才已经批量安装过了)
    在这里插入图片描述

2.2 pytest演示

A. 新建一个pytest_pro项目
B. pytest_pro目录中再新建一个testcase的目录
C. testcase目录中新建一个test_demo.py文件
D. test_demo.py文件中,代码如下(-vs:显示详细信息):
在这里插入图片描述

2.3 pytest的运行

2.3.1 普通线性运行代码

  1. 代码中,直接右键选择run 文件名
    在这里插入图片描述
  2. 命令行中运行
    命令行中又分为直接在IDE中终端运行和cmd中运行。
    A. pycharm终端–>Terminal运行:

=============================================================== 1 passed in 0.07s ================================================================

B. 进入cmd中,切换到当前目录运行
在这里插入图片描述

2.3.2 多线程运行

仍以上面例子为例,增加至四条用例,每条用例等待2秒钟: 在这里插入图片描述
正常来说,运行时间至少是8秒钟。
在这里插入图片描述
但是,现在,我们可以通过(-n times)多线程来运行,快速运行用例。

  1. 代码中直接运行:
    在这里插入图片描述

  2. IDE终端运行:pytest -vs ./test_demo.py -n 2
    在这里插入图片描述

  3. cmd中运行

python test_demo.py -n 2

在这里插入图片描述
很明显,比之前的线性执行更快。-n 后面的数字,根据你的需求进行更改即可。

2.3.3 失败用例的重跑

  1. 将第3条用例,改成失败用例,运行。
    以pycharm终端运行为例:
pytest -vs ./test_demo.py --reruns 3

–reruns 3:代表失败用例的重新运行次数
在这里插入图片描述

2.4 通过ini配置文件运行

2.4.1 编码格式:ANSI

2.4.2 可以改变pytest默认的规则

如更改test_开头的函数

2.4.2 运行时读取ini文件

在项目目录中,新建一个ini文件,可根据自已喜好,更改默认的姿势。详情见下图:
在这里插入图片描述
如果需要更改,不以test开头的文件,则将:testpath= 后面接所需的名称即可。

2.5 分组执行

可将用例,添加一个类似tag的标记,执行用例的时候,可指定这些标记来执行。先将配置文件增加标记:
在这里插入图片描述
固定格式:**@pytest.mark.[标识]
在这里插入图片描述
运行结果如下:
在这里插入图片描述
结果中可看出,会显示运行了几个,未选中几个。
当然,也可以同时运行几个标记的用例,用or连接即可。如下图
在这里插入图片描述

2.6 跳过用例

2.6.1. 直接跳过

方法中添加命令:

@pytest.mark.skip

在这里插入图片描述

2.6.2. 根据条件跳过

添加代码:

@pytest.mark.skipif(条件,reason='XXX')

假如条件成功,则跳过。
在这里插入图片描述

2.7 pytest的前置和后置

1. setup与teardown,setup_class与teardown_class

1. setup与teardown

pytest与unittest类似,都有setup与teardown,但是不同的是,unittest中setUp与tearDown有大写,而pytest都是小写。如下:
在这里插入图片描述

2. setup_class与teardown_class

每个测试类的开始和结束
在这里插入图片描述

2.8 全局的前置和后置

2.8.1 conftest.py文件

  1. 新建一个confftest.py文件,固定名字。
import pytest

@pytest.fixture(scope='function',params=['irving','james','paul'])
def pz(request): #pz为自定义名
    print('全局前置')
    yield request.param
    print('全局后置')
  1. 再在需要全局变量的用例中,添加pz函数名
    在这里插入图片描述
    如,只在test_01_hua1用例中添加了全局装置pz
    运行后,查看结果:
    在这里插入图片描述
    运行结果中可以看出,只有添加了全局函数的test_01_hua用例中,才有全局前置与后置,其他的用例中则没有。

2.9 数据驱动

代码格式:

@pytest.mark.parametrize(参数名,数据)

示例:

@pytest.mark.parametrize('name,age',[['irving','28'],['james','36']])
    def test_02_hua2(self,name,age):
        print('this is test two------>')
        print(name,age)

运行结果如下:
在这里插入图片描述
会执行2次。这就实现了日子基本的数据驱动,或者说参数化。

三、生成测试报告

1. 通过pytest-html生成测试报告

1.1 配置文件中增加报告路径配置

在这里插入图片描述

1.2 运行后查看报告

终端运行后,查看报告路径中的报告,用浏览器打开,如下图:
在这里插入图片描述
很显示,不是一般的丑。看不下去,接下来,介绍第二种漂亮的报告。

2. 通过pytest+allure生成报告

1. 下载allure

下载allure又需要以下几步来实现:

  1. 下载allure库,上面已经安装过了,不再重复。
  2. 下载allure工具,点击这里下载,如果github打不开,可以联系我。
    在这里插入图片描述
    点击下载

2. 环境变量

  1. 下载到本地后,不需要再安装,直接解压即可。将bin目录添加到环境变量path中
    在这里插入图片描述
  2. 查看是否成功
    cmd中输入:
allure --version

在这里插入图片描述
当然,全局成功,经常会出现在pycharm终端报错的情况,我们也可以在pycharm中输入allure --version验证
在这里插入图片描述
出现这种报错的时候,不要慌,是因为你需要重启IDE工具,重启一下pycharm,再输入命令,就OK了
在这里插入图片描述
ok了。我们生成报告了。

3. 生成allure测试报告

  1. 在全局中添加参数
    在这里插入图片描述

  2. 生成json昨日报告
    在用例中运行后,会在临时文件中生成json文件
    在这里插入图片描述

  3. 生成allure报告
    在运行文件中,添加参数os.system(‘allure generate ./temp -o ./report --clean’)
    allure generate: pytest 规定
    ./temp: json临时报告路径
    -o:output
    ./report:报告路径
    –clean:清空原数据
    在这里插入图片描述
    运行后查看:
    在这里插入图片描述
    已经生成 了一个测试报告,我们通过谷歌打开查看成果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    我们已经生成了一个漂亮的报告:可以从中看到运行时间、测试套件、包名等信息。
    OK,至此pytest已经详细安排上了。从头到尾下来,想念可以给你很多收获。

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值