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 13 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
Python实现登陆文件验证方法
Oct 06 Python
python实现顺时针打印矩阵
Mar 02 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
Apr 09 Python
详解python执行shell脚本创建用户及相关操作
Apr 11 Python
python创建与遍历List二维列表的方法
Aug 16 Python
pygame实现成语填空游戏
Oct 29 Python
如何使用repr调试python程序
Feb 28 Python
学习Python列表的基础知识汇总
Mar 10 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
Apr 11 Python
python使用yaml 管理selenium元素的示例
Dec 01 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 HTML代码串截取代码
2008/12/29 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
2016/08/15 Javascript
Node.js复制文件的方法示例
2016/12/29 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
Python中@property的理解和使用示例
2019/06/11 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
网站开发实习生的自我评价
2013/12/11 职场文书
县级文明单位申报材料
2014/05/23 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
党建工作汇报材料
2014/12/24 职场文书
毕业生对母校寄语
2015/02/26 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
护士岗前培训心得体会
2016/01/08 职场文书
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
利用python进行数据加载
2021/06/20 Python
Python音乐爬虫完美绕过反爬
2021/08/30 Python
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL