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 07 Python
Python使用matplotlib填充图形指定区域代码示例
Jan 16 Python
Python实现查看系统启动项功能示例
May 10 Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
Jan 10 Python
解决在pycharm中显示额外的 figure 窗口问题
Jan 15 Python
python实现共轭梯度法
Jul 03 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
python利用opencv实现SIFT特征提取与匹配
Mar 05 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
Jul 14 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 24 Python
yolov5返回坐标的方法实例
Mar 17 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
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
一段多浏览器的"复制到剪贴板"javascript代码
2007/03/27 Javascript
javascript动画效果类封装代码
2007/08/28 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
Jquery之Bind方法参数传递与接收的三种方法
2014/06/24 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
基于JavaScript实现购物网站商品放大镜效果
2016/09/06 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
利用python实现在微信群刷屏的方法
2019/02/21 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
2019/12/12 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
python如何利用paramiko执行服务器命令
2020/11/07 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
Booking.com荷兰:全球酒店网上预订
2017/08/22 全球购物
美国现代家具购物网站:LexMod
2019/01/09 全球购物
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
会计专业自荐信范文
2013/12/02 职场文书
数学检讨书1000字
2014/02/24 职场文书
保研推荐信
2014/05/09 职场文书
工作汇报开头与结尾怎么写
2014/11/08 职场文书
python 三边测量定位的实现代码
2021/04/22 Python
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python
详解Mysq MVCC多版本的并发控制
2022/04/29 MySQL