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中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
详解python并发获取snmp信息及性能测试
Mar 27 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
Python3 关于pycharm自动导入包快捷设置的方法
Jan 16 Python
Python3实现汉语转换为汉语拼音
Jul 08 Python
python实现列表中最大最小值输出的示例
Jul 09 Python
Python (Win)readline和tab补全的安装方法
Aug 27 Python
基于梯度爆炸的解决方法:clip gradient
Feb 04 Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 Python
Python的scikit-image模块实例讲解
Dec 30 Python
Python tkinter之ComboBox(下拉框)的使用简介
Feb 05 Python
Python matplotlib绘制雷达图
Apr 13 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程序员面试 切忌急功近利(更需要注重以后的发展)
2010/09/01 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
js实现前端图片上传即时预览功能
2017/08/02 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
Python生成随机验证码的两种方法
2015/12/22 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
Python autoescape标签用法解析
2020/01/17 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
canvas离屏技术与放大镜实现代码示例
2018/08/31 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
2015年语文教学工作总结
2015/05/25 职场文书
护士医德医风心得体会
2016/01/25 职场文书
《静夜思》教学反思
2016/02/17 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书