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 相关文章推荐
pygame学习笔记(4):声音控制
Apr 15 Python
Python编程中运用闭包时所需要注意的一些地方
May 02 Python
python3.5使用tkinter制作记事本
Jun 20 Python
利用Python中的pandas库对cdn日志进行分析详解
Mar 07 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
Aug 15 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
Jan 07 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
python实现文件的备份流程详解
Jun 18 Python
Pyqt5实现英文学习词典
Jun 24 Python
Python通过递归获取目录下指定文件代码实例
Nov 07 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 05 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
德生PL330测评
2021/03/02 无线电
PHP面向对象精要总结
2014/11/07 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
JS的反射问题
2010/04/07 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
给文字加上着重号的JS代码
2013/11/12 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
react-router4 嵌套路由的使用方法
2017/07/24 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
python根据文件大小打log日志
2014/10/09 Python
Python中列表的一些基本操作知识汇总
2015/05/20 Python
scrapy爬虫完整实例
2018/01/25 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
Python学习笔记之集合的概念和简单使用示例
2019/08/22 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
教师求职推荐信范文
2013/11/20 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
酒店秘书求职信范文
2014/02/17 职场文书
大学班级学风建设方案
2014/05/01 职场文书
信访维稳工作汇报
2014/10/27 职场文书
离职证明格式样本
2015/06/12 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android