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下函数参数的传递(参数带星号的说明)
Sep 19 Python
python实现dict版图遍历示例
Feb 19 Python
Python实现的字典值比较功能示例
Jan 08 Python
Python中装饰器学习总结
Feb 10 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
Aug 10 Python
Python下应用opencv 实现人脸检测功能
Oct 24 Python
pytorch中tensor张量数据类型的转化方式
Dec 31 Python
解决Python在导入文件时的FileNotFoundError问题
Apr 10 Python
Python MOCK SERVER moco模拟接口测试过程解析
Apr 13 Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 07 Python
Python实现简单的猜单词
Jun 15 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获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
php中mysql连接方式PDO使用详解
2015/02/25 PHP
PHP最常用的正则表达式
2017/02/13 PHP
PHP的PDO事务与自动提交
2019/01/24 PHP
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
js 调用百度分享功能
2017/02/27 Javascript
ionic实现下拉刷新载入数据功能
2017/05/11 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
pm2启动ssr失败的解决方法
2019/06/29 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
jQuery+ajax实现用户登录验证
2020/09/13 jQuery
如何在JavaScript中正确处理变量
2020/12/25 Javascript
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
[01:04:09]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第二场 2月2日
2021/03/11 DOTA
Python中的tuple元组详细介绍
2015/02/02 Python
Python中type的构造函数参数含义说明
2015/06/21 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
delegate与普通函数的区别
2014/01/22 面试题
大学生职业生涯规划书模板
2014/01/03 职场文书
写给老婆的检讨书
2014/02/21 职场文书
《英英学古诗》教学反思
2014/04/11 职场文书
常务副总经理任命书
2014/06/05 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
仅用几行Python代码就能复制她的U盘文件?
2021/06/26 Python
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server