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实现批量读取word中表格信息的方法
Jul 30 Python
Python中enumerate函数代码解析
Oct 31 Python
django的settings中设置中文支持的实现
Apr 28 Python
python 计算一个字符串中所有数字的和实例
Jun 11 Python
python使用if语句实现一个猜拳游戏详解
Aug 27 Python
Python print不能立即打印的解决方式
Feb 19 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
python 用struct模块解决黏包问题
Nov 07 Python
Python基于template实现字符串替换
Nov 27 Python
python读写数据读写csv文件(pandas用法)
Dec 14 Python
Python语言规范之Pylint的详细用法
Jun 24 Python
关于Python中*args和**kwargs的深入理解
Aug 07 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 cli 方式 在crotab中运行解决
2010/02/08 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
php内嵌函数用法实例
2015/03/20 PHP
php遍历CSV类实例
2015/04/14 PHP
php 指定范围内多个随机数代码实例
2016/07/18 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
vue cli3适配所有端方案的实现
2020/04/13 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
美国校园市场:OCM
2017/06/08 全球购物
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
农民工讨薪标语
2014/06/26 职场文书
个人查摆问题及整改措施
2014/10/16 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
作文评语怎么写
2014/12/25 职场文书
幼儿体育课教学反思
2016/02/16 职场文书