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打印斐波拉契数列实例
Jul 07 Python
在Django中创建第一个静态视图
Jul 15 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
Jul 30 Python
python批量提取word内信息
Aug 09 Python
Python抓取框架 Scrapy的架构
Aug 12 Python
python实现感知机线性分类模型示例代码
Jun 02 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
python如何从文件读取数据及解析
Sep 19 Python
基于python cut和qcut的用法及区别详解
Nov 22 Python
如何快速一次性卸载所有python包(第三方库)呢
Oct 20 Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 Python
OpenCV-Python使用cv2实现傅里叶变换
Jun 09 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上传图片之时间戳命名(保存路径)
2014/08/15 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
THinkPHP获取客户端IP与IP地址查询的方法
2016/11/14 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
学习YUI.Ext 第七天--关于View&JSONView
2007/03/10 Javascript
jQuery拖拽 & 弹出层 介绍与示例
2013/12/27 Javascript
JavaScript事件委托用法分析
2015/01/24 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
浅谈React 属性和状态的一些总结
2016/11/21 Javascript
vue在使用ECharts时的异步更新和数据加载详解
2017/11/22 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
2018/07/18 Javascript
详解JS中统计函数执行次数与执行时间
2018/09/04 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
webpack实现一个行内样式px转vw的loader示例
2018/09/13 Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
2019/07/23 Javascript
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
python 6种方法实现单例模式
2020/12/15 Python
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
SQL Server面试题
2016/10/17 面试题
企业仓管员岗位职责
2014/06/15 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
apache基于端口创建虚拟主机的示例
2021/04/22 Servers