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操作Excel之xlsx文件
Mar 24 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
django之session与分页(实例讲解)
Nov 13 Python
python 筛选数据集中列中value长度大于20的数据集方法
Jun 14 Python
python绘制立方体的方法
Jul 02 Python
Python和Go语言的区别总结
Feb 20 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
Aug 07 Python
python3.7将代码打包成exe程序并添加图标的方法
Oct 11 Python
python+adb命令实现自动刷视频脚本案例
Apr 23 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
May 15 Python
python 5个顶级异步框架推荐
Sep 09 Python
Python TypeError: ‘float‘ object is not subscriptable错误解决
Dec 24 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
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
用js怎么把&字符换成"&amp:"
2006/10/19 Javascript
Javascript 解疑
2009/11/11 Javascript
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
javascript 随机展示头像实现代码
2011/12/06 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
2018/03/13 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
小程序云开发实战小结
2018/10/25 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
JavaScript实现拖动对话框效果的实现代码
2020/10/12 Javascript
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python基础教程之Filter使用方法
2017/01/17 Python
python下读取公私钥做加解密实例详解
2017/03/29 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
2018/04/28 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
django queryset相加和筛选教程
2020/05/18 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
夜大毕业生自我评价分享
2013/11/10 职场文书
优秀英语专业毕业生求职信
2013/11/23 职场文书
自我推荐书
2013/12/04 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
法人代表证明书范本
2015/06/18 职场文书