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中使用asyncio 封装文件读写
Sep 11 Python
Python编程对列表中字典元素进行排序的方法详解
May 26 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
Jul 28 Python
python 移除字符串尾部的数字方法
Jul 17 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
对python 匹配字符串开头和结尾的方法详解
Oct 27 Python
解决Django一个表单对应多个按钮的问题
Jul 18 Python
python对csv文件追加写入列的方法
Aug 01 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
Aug 05 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
Aug 12 Python
django 实现手动存储文件到model的FileField
Mar 30 Python
Django调用支付宝接口代码实例详解
Apr 04 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
数字转英文
2006/12/06 PHP
php下实现折线图效果的代码
2007/04/28 PHP
php zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
PHP运行环境配置与开发环境的配置(图文教程)
2013/06/04 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
Laravel 简单实现Ajax滚动加载示例
2019/10/22 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
数组方法解决JS字符串连接性能问题有争议
2011/01/12 Javascript
JavaScript中为元素加上name属性的方法
2011/05/09 Javascript
jQuery图片播放8款精美插件分享
2013/02/17 Javascript
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
Python浅复制中对象生存周期实例分析
2018/04/02 Python
react+django清除浏览器缓存的几种方法小结
2019/07/17 Python
Python对wav文件的重采样实例
2020/02/25 Python
利用Python计算KS的实例详解
2020/03/03 Python
python实现UDP协议下的文件传输
2020/03/20 Python
django中cookiecutter的使用教程
2020/12/03 Python
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
英国最大的海报商店:GB Posters
2018/03/20 全球购物
中专自我鉴定范文
2013/10/16 职场文书
升职演讲稿范文
2014/05/23 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
离婚协议书怎么写的
2014/12/14 职场文书