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的函数闭包使用中应注意的问题
Jun 20 Python
Python实现的堆排序算法示例
Apr 29 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
pandas通过索引进行排序的示例
Nov 16 Python
python列表list保留顺序去重的实例
Dec 14 Python
Python设计模式之状态模式原理与用法详解
Jan 15 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
Python 数据可视化pyecharts的使用详解
Jun 26 Python
python实现证件照换底功能
Aug 20 Python
Python实现遗传算法(二进制编码)求函数最优值方式
Feb 11 Python
使用keras实现孪生网络中的权值共享教程
Jun 11 Python
python 利用 PIL 将数组值转成图片的实现
Apr 12 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 file_get_contents设置超时处理方法
2013/09/30 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
2016/01/08 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
javascript document.execCommand() 常用解析
2009/12/14 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
javascript 数组操作详解
2015/01/29 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
Python返回真假值(True or False)小技巧
2015/04/10 Python
解析Python中while true的使用
2015/10/13 Python
Python如何通过subprocess调用adb命令详解
2017/08/27 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
2019/02/19 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
Python pip安装第三方库实现过程解析
2020/07/09 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
彪马英国官网:PUMA英国
2019/02/11 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
校本教研工作方案
2014/01/14 职场文书
创新比赛获奖感言
2014/02/13 职场文书
项目经理任命书范本
2014/06/05 职场文书
运动会入场口号
2014/06/07 职场文书
2015年团支书工作总结
2015/04/03 职场文书
个人收入证明格式
2015/06/24 职场文书
导游词之山东红叶谷
2019/10/31 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
Django rest framework如何自定义用户表
2021/06/09 Python
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang