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 实现链表实例代码
Apr 07 Python
Python基础之getpass模块详细介绍
Aug 10 Python
Python反射用法实例简析
Dec 22 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
python 3.6.5 安装配置方法图文教程
Sep 18 Python
python爬虫之urllib库常用方法用法总结大全
Nov 14 Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 Python
Python3内置函数chr和ord实现进制转换
Jun 05 Python
python mongo 向数据中的数组类型新增数据操作
Dec 05 Python
如何理解python接口自动化之logging日志模块
Jun 15 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/12/29 PHP
php基础教程 php内置函数实例教程
2012/08/21 PHP
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
2019/05/20 PHP
javascript 多浏览器 事件大全
2010/03/23 Javascript
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
2015/03/05 Javascript
Javascript 高阶函数使用介绍
2015/06/15 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
js隐式转换的知识实例讲解
2018/09/28 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
python Django 创建应用过程图示详解
2019/07/29 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
机械设计及其自动化专业推荐信
2013/10/31 职场文书
数学专业推荐信范文
2013/11/21 职场文书
学习党课思想汇报
2013/12/29 职场文书
社会实践感言
2014/01/25 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
学校证明范文
2015/06/24 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书