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中的defaultdict与__missing__()使用介绍
Feb 03 Python
一份python入门应该看的学习资料
Apr 11 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
Jul 08 Python
python制作朋友圈九宫格图片
Nov 03 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
PyQt5实现画布小程序
May 30 Python
python怎么提高计算速度
Jun 11 Python
python中return不返回值的问题解析
Jul 22 Python
Python无损压缩图片的示例代码
Aug 06 Python
python通过cython加密代码
Dec 11 Python
Django 实现jwt认证的示例
Apr 30 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
php array_intersect()函数使用代码
2009/01/14 PHP
php学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
PHP获取HTTP body内容的方法
2018/12/31 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
JS数学函数Exp使用说明
2012/08/09 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
2014/07/18 Javascript
jQuery中val()方法用法实例
2014/12/25 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
2016/08/04 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
JQuery.validationEngine表单验证插件(推荐)
2016/12/10 Javascript
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
python检索特定内容的文本文件实例
2018/06/05 Python
pytorch 数据集图片显示方法
2018/07/26 Python
Python生成一个迭代器的实操方法
2019/06/18 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
标准导师推荐信(医学类)
2013/10/28 职场文书
中层干部竞争上岗演讲稿
2014/01/13 职场文书
销售冠军获奖感言
2014/02/03 职场文书
2014财务年度工作总结
2014/11/11 职场文书
模范教师材料大全
2014/12/16 职场文书
Go timer如何调度
2021/06/09 Golang
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js