python ddt实现数据驱动


Posted in Python onMarch 14, 2018

ddt 是第三方模块,需安装, pip install ddt

DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据)

通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。

@data(a,b)

那么a和b各运行一次用例

@data([a,d],[c,d])

如果没有@unpack,那么[a,b]当成一个参数传入用例运行

如果有@unpack,那么[a,b]被分解开,按照用例中的两个参数传递 

具体看下面的例子:

import unittest
from ddt import ddt,data,unpack

@ddt
class MyTesting(unittest.TestCase):
  def setUp(self):
    print('this is the setUp')
  @data([1,2,3])
  def test_1(self,value):
    print(value)

  @data([3,2,1],[5,3,2],[10,4,6])
  @unpack
  def test_minus(self,a,b,expected):
    actual = int(a) - int(b)
    expected = int(expected)
    self.assertEqual(actual, expected)

  @data([2,3],[4,5])
  def test_compare(self,a,b):
    self.assertEqual(a,b)

  def tearDown(self):
    print('this is tearDown')

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

结果分析:

1. test_1的测试结果是ok的, 因为 [1,2,3] 作为一个整体传给value,所有value 打印的值是[1,2,3]

test_1_1__1__2__3_ (__main__.MyTesting) ... ok
test_compare_1__2__3_ (__main__.MyTesting) ... ERROR
[1, 2, 3]

2. test_minus的测试结果也是ok的,由于在@data(...)下加了@unpack, 代表会把数据分解,得到3组测试数据,分别为:

1.[3,2,1]
2.[5,3,2]
3.[10,4,6]
test_minus_1__3__2__1_ (__main__.MyTesting) ... ok
test_minus_2__5__3__2_ (__main__.MyTesting) ... ok
test_minus_3__10__4__6_ (__main__.MyTesting) ... ok

3. test_compare的测试结果是fail的,由于没有加@unpack, 虽然还是会被理解成2组测试数据,但是[2,3]作为一个整体被传给了a, 因为b就没有值传入了,所以一执行后报了  TypeError: test_compare() missing 1 required positional argument: 'b'  这句错。

test_compare_1__2__3_ (__main__.MyTesting) ... ERROR
test_compare_2__4__5_ (__main__.MyTesting) ... ERROR
this is the setUp
ERROR: test_compare_1__2__3_ (__main__.MyTesting)
this is tearDown
----------------------------------------------------------------------
Traceback (most recent call last):
 File "D:\python\lib\site-packages\ddt.py", line 139, in wrapper
  return func(self, *args, **kwargs)
TypeError: test_compare() missing 1 required positional argument: 'b'

======================================================================
ERROR: test_compare_2__4__5_ (__main__.MyTesting)
----------------------------------------------------------------------
Traceback (most recent call last):
 File "D:\python\lib\site-packages\ddt.py", line 139, in wrapper
  return func(self, *args, **kwargs)
TypeError: test_compare() missing 1 required positional argument: 'b'

以上就是ddt 的学习总结,ddt 还有file_data(可以从json或者yaml中获取测试数据)的驱动方式,下篇继续啦。

Python 相关文章推荐
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
通过PHP与Python代码对比的语法差异详解
Jul 10 Python
pycharm重命名文件的方法步骤
Jul 29 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 Python
Python 实现大整数乘法算法的示例代码
Sep 17 Python
pytorch中图像的数据格式实例
Feb 11 Python
opencv 图像轮廓的实现示例
Jul 08 Python
Python项目实战之使用Django框架实现支付宝付款功能
Feb 23 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
Jun 05 Python
Python自动化测试PO模型封装过程详解
Jun 22 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
Apr 14 Python
Python使用Django实现博客系统完整版
Sep 29 #Python
Python学生信息管理系统修改版
Mar 13 #Python
python之pandas用法大全
Mar 13 #Python
python使用sqlite3时游标使用方法
Mar 13 #Python
Python打印输出数组中全部元素
Mar 13 #Python
python实现学生信息管理系统
Apr 05 #Python
python针对excel的操作技巧
Mar 13 #Python
You might like
几款免费开源的不用数据库的php的cms
2010/12/19 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
javascript判断非数字的简单例子
2013/07/18 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
JavaScript基础篇(6)之函数表达式闭包
2015/12/11 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
js实现轮播图的完整代码
2020/10/26 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
微信小程序订阅消息(java后端实现)开发
2020/06/01 Javascript
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
python分析作业提交情况
2017/11/22 Python
python3利用venv配置虚拟环境及过程中的小问题小结
2018/08/01 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
Python实现手绘图效果实例分享
2020/07/22 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
2017/10/26 HTML / CSS
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
设备动力科岗位职责范本
2014/02/23 职场文书
医疗器械售后服务承诺书
2014/05/21 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
日本官方排名前10的动漫,名侦探柯南上榜,第一是一部创造历史的动漫
2022/03/18 日漫