Python接口自动化系列之unittest结合ddt的使用教程详解


Posted in Python onFebruary 23, 2021

前面一篇我们已经把unittest的常用用法都已经讲过了,可能很多小伙伴有个疑问,unittest框架怎么做数据驱动呢?这节我们就来学习一下。
1、unittest 没有自带数据驱动功能。
所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT来完成。
DDT是 “Data-Driven Tests”的缩写。
资料:http://ddt.readthedocs.io/en/latest/
2、什么是ddt?
测试步骤相同,代码一样,测试数据不同,当我们输入一组测试数据的时候,测试框架会自动生成独立的多个测试用例的方法,这就是ddt。(个人理解)
注意:ddt不等于数据驱动,ddt只是实现了数据驱动思想

首先,我们需要下载包,下载方法如下:

Python接口自动化系列之unittest结合ddt的使用教程详解

然后,我们开始学习

import unittest
import ddt
# 首先我们导入ddt

# 我们还是哪官网这个加法方法来做例子,首先我们准备一些测试数据

data = [(1,2,3),
    (1,3,4),
    (1,4,5)]

# 装饰类,也就是继承自TestCase的类,可以理解为给这个类戴了个帽子
@ddt.ddt
class IntegerArithmeticTestCase(unittest.TestCase):
  # 装饰测试方法。参数是一系列的值
  # 注意要加这个*,多组数据,@ddt.data(*data)相当于@ddt.data((1,2,3),(1,3,4),(1,4,5))
  @ddt.data(*data)
  # 每次运行都会从 data中取出一组数据,动态生成一个独立的测试用例方法
  def testAdd(self,test_data):
    print(test_data)
    self.assertEqual((test_data[0] + test_data[1]), test_data[2])
'''
测试用例方法名生成规则
使用ddt后,会产生一个新的测试用例方法名:之前的测试用例方法名_ordinal_data
之前的测试用例方法名:即定义的测试用例方法名。比如def test_large(),这里就是test_large
ordinal:整数,从1开始递加。
data:如果传递过来的数据存在__name__属性,则这里就是该数据的__name__值。如果未定义__name__属性,ddt会尽量将传递过来的数据转化为python标识符,作为data显示。比如(3,2)就转化为3_2。
需要注意的是,如果数据是字典,则这里就是字典的key。
'''
if __name__ == '__main__':
  unittest.main(verbosity=2)

我么执行看一下结果:

Python接口自动化系列之unittest结合ddt的使用教程详解

在看一下HTML的结果报告:

Python接口自动化系列之unittest结合ddt的使用教程详解

3、下面我们就说一下在实际框架中ddt是如何使用的
实际框架中只不过测试数据不是放在代码里,代码要做数据分离,实际是把数据放在Excel,或者yaml,或者json文件中,等等吧,作者实际框架中用的最多的都是这三种。
1)我么你先看一下测试数据放在json中,先建一个json文件

Python接口自动化系列之unittest结合ddt的使用教程详解

import unittest
import ddt


# 装饰类,也就是继承自TestCase的类,可以理解为给这个类戴了个帽子
@ddt.ddt
class IntegerArithmeticTestCase(unittest.TestCase):
  # 装饰测试方法。参数是文件名。文件可以是json 或者 yaml类型。
  # 注意,如果文件以”.yml”或者”.yaml”结尾,ddt会作为yaml类型处理,其他所有文件都会作为json文件处理。
  # 如果文件中是列表,每个列表的值会作为测试用例参数,同时作为测试用例方法名后缀显示。
  # 如果文件中是字典,字典的key会作为测试用例方法的后缀显示,字典的值会作为测试用例参数
  @ddt.file_data('d1.json')
  @ddt.unpack
  # 每次运行都会从 data中取出一组数据,动态生成一个独立的测试用例方法
  def testAdd(self,first,second,values):
    self.assertEqual( (first+ second), values)

if __name__ == '__main__':
  unittest.main(verbosity=2)

执行查看结果如下:

Python接口自动化系列之unittest结合ddt的使用教程详解

2)我么你在看一下测试数据放在yaml中,先建一个yaml文件

到此这篇关于Python接口自动化系列之unittest结合ddt的使用教程详解的文章就介绍到这了,更多相关Python接口自动化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
利用Psyco提升Python运行速度
Dec 24 Python
Ubuntu下安装PyV8
Mar 13 Python
python类:class创建、数据方法属性及访问控制详解
Jul 25 Python
Flask数据库迁移简单介绍
Oct 24 Python
pandas进行数据的交集与并集方式的数据合并方法
Jun 27 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
Python 从列表中取值和取索引的方法
Dec 25 Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 Python
详解python读取image
Apr 03 Python
Django如何防止定时任务并发浅析
May 14 Python
Python中的相关分析correlation analysis的实现
Aug 29 Python
python在linux环境下安装skimage的示例代码
Oct 14 Python
python利用opencv实现颜色检测
Feb 23 #Python
详解Python中openpyxl模块基本用法
Feb 23 #Python
python爬虫今日热榜数据到txt文件的源码
Feb 23 #Python
如何用Python和JS实现的Web SSH工具
Feb 23 #Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 #Python
python解决OpenCV在读取显示图片的时候闪退的问题
Feb 23 #Python
关于探究python中sys.argv时遇到的问题详解
Feb 23 #Python
You might like
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
匹配任意字符的正则表达式写法
2010/04/29 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
Javascript中 关于prototype属性实现继承的原理图
2013/04/16 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
js模仿hover的具体实现代码
2013/12/30 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
AngularJs bootstrap详解及示例代码
2016/09/01 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
决策树的python实现方法
2014/11/18 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
python学生信息管理系统(初级版)
2018/10/17 Python
python用插值法绘制平滑曲线
2021/02/19 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
质量承诺书范文
2014/03/27 职场文书
初一数学教学反思
2016/02/17 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏