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文件比较示例分享
Jan 10 Python
Python算法之求n个节点不同二叉树个数
Oct 27 Python
谈谈python中GUI的选择
Mar 01 Python
pandas数据筛选和csv操作的实现方法
Jul 02 Python
python pandas 时间日期的处理实现
Jul 30 Python
解决Djang2.0.1中的reverse导入失败的问题
Aug 16 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
Jan 28 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
Python unittest如何生成HTMLTestRunner模块
Sep 08 Python
Window10上Tensorflow的安装(CPU和GPU版本)
Dec 15 Python
Python LMDB库的使用示例
Feb 14 Python
Django debug为True时,css加载失败的解决方案
Apr 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
用PHP和MySQL保存和输出图片
2006/10/09 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
PHP利用递归函数实现无限级分类的方法
2019/03/22 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
2013/03/18 Javascript
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
js实现的捐赠管理完整实例
2015/01/20 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
Python记录详细调用堆栈日志的方法
2015/05/05 Python
python 字典(dict)按键和值排序
2016/06/28 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
python队列Queue的详解
2019/05/10 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
归元寺导游词
2015/02/06 职场文书
党员个人总结自评
2015/02/14 职场文书
庆祝教师节主题班会
2015/08/17 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python