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 相关文章推荐
Python 的类、继承和多态详解
Jul 16 Python
Django原生sql也能使用Paginator分页的示例代码
Nov 15 Python
Python图形绘制操作之正弦曲线实现方法分析
Dec 25 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
Python使用win32 COM实现Excel的写入与保存功能示例
May 03 Python
Python基于dom操作xml数据的方法示例
May 12 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
Aug 31 Python
Python3.6实现带有简单界面的有道翻译小程序
Apr 16 Python
基于Python把网站域名解析成ip地址
May 25 Python
Python如何给函数库增加日志功能
Aug 04 Python
理解Django 中Call Stack机制的小Demo
Sep 01 Python
Django如何实现密码错误报错提醒
Sep 04 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
一个域名查询的程序
2006/10/09 PHP
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
jQuery对val和atrr("value")赋值的区别介绍
2014/09/26 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
Bootstrop实现多级下拉菜单功能
2016/11/24 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
清空元素html("") innerHTML="" 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
2020/07/07 Javascript
vue实现图片裁剪后上传
2020/12/16 Vue.js
JS实现公告上线滚动效果
2021/01/10 Javascript
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
python缩进区别分析
2014/02/15 Python
python+selenium+autoit实现文件上传功能
2017/08/23 Python
python opencv读mp4视频的实例
2018/12/07 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
Python变量访问权限控制详解
2019/06/29 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
python实现统计代码行数的小工具
2019/09/19 Python
python time()的实例用法
2020/11/03 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
制药工程专业应届生求职信
2013/09/24 职场文书
十岁生日同学答谢词
2014/01/19 职场文书
工作表现自我评价
2014/02/08 职场文书
忠诚教育心得体会
2014/09/03 职场文书
派出所正风肃纪剖析材料
2014/10/10 职场文书
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
Python实现Hash算法
2022/03/18 Python