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用ConfigObj读写配置文件的实现代码
Mar 04 Python
python实现人人网登录示例分享
Jan 19 Python
实例解析Python的Twisted框架中Deferred对象的用法
May 25 Python
8种用Python实现线性回归的方法对比详解
Jul 10 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
原生python实现knn分类算法
Oct 24 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
Apr 14 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
python实现猜单词游戏
May 22 Python
解决pip install psycopg2出错问题
Jul 09 Python
python实现数字炸弹游戏程序
Jul 17 Python
Python OpenCV快速入门教程
Apr 17 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处理图片变得简单 基于gb库的图片处理类附实例代码下载
2011/05/17 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
用JavaScript隐藏控件的方法
2009/09/21 Javascript
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
JQuery datepicker 用法详解
2015/12/25 Javascript
javaScript语法总结
2016/11/25 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
Vue-cli@3.0 插件系统简析
2018/09/05 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
Python 返回汉字的汉语拼音
2009/02/27 Python
Python编码时应该注意的几个情况
2013/03/04 Python
python动态性强类型用法实例
2015/05/09 Python
Python实例一个类背后发生了什么
2016/02/09 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
在CMD命令行中运行python脚本的方法
2018/05/12 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
高中自我鉴定
2013/12/20 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
可怜妈妈观后感
2015/06/09 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python
Pygame如何使用精灵和碰撞检测
2021/11/17 Python
Win11如何查看显卡型号 Win11查看显卡型号的方法
2022/08/14 数码科技