python ddt数据驱动最简实例代码


Posted in Python onFebruary 22, 2019

在接口自动化测试中,往往一个接口的用例需要考虑 正确的、错误的、异常的、边界值等诸多情况,然后你需要写很多个同样代码,参数不同的用例。如果测试接口很多,不但需要写大量的代码,测试数据和代码柔合在一起,可维护性也会变的很差。数据驱动可以完美的将代码和测试数据分开,将代码进行分装,提高复用性,测试数据维护在本地文件或数据库。

使用python做接口自动化,首要任务是搭建一个自动化测试框架,其中unittest+ddt是一个不错的选择,下文主要介绍ddt在unittest下的使用。

ddt包含两个方法装饰器 ddt.data 和 ddt.file_data

一、ddt.data(直接输入测试数据)

ddt.unpack 的作用是把参数中 元祖 或者 列表 的元素对应到多个参数上,没有加 ddt.unpack 表示把 元祖 或者 列表本身当成一个参数传入。

下面这段代码,ddt.data() 有三组测试数据,每组测试数据都会执行一次 test_login() 。

import json
import unittest
from common.readConfig import readConfig
import requests
from ddt import ddt,data,file_data,unpack

@ddt  # 在测试类前必须首先声明使用 ddt.ddt
class Mytest(unittest.TestCase):
  def setUp(self):
    # 获取测试接口的url
    self.url = readConfig().getHttp('usercenter') + readConfig().get_UC('login')print('setup')

  @data(({"isRememberMe": True ,"password": "111111","username": "root"},200),
     ({"isRememberMe": True, "password": "1111111", "username": "root"},406),
     ({"isRememberMe": True, "password": "111111", "username": "rot"},406))
  @unpack
  # 后台人员登录
  def test_login(self,data,status):
    body = json.dumps(data)
    header = {"Content-Type":"application/json","Accept": "application/json","token": "1231"}
    re = requests.post(self.url,data=body,headers = header,verify = False)
    code = re.status_code
    print(re.text,re.status_code)
    # 断言
    self.assertEqual(int(status),int(code))

  def tearDown(self):
    print('tearDown')

if __name__ == '__main__':
  unittest.main()

二、ddt.file_data (参数是文件名。文件可以是json 或者 yaml类型)

如果文件中是列表,每个列表的值会作为测试用例参数,同时作为测试用例方法名后缀显示。如果文件中是字典,字典的key会作为测试用例方法的后缀显示,字典的值会作为测试用例参数。下文两种类型的文件分别举一个例子。

新建文件testdata.json:

{
  "first": ["{'isRememberMe': True,'password': '111111','username': 'root'}", "200"],
  "second": ["{'isRememberMe': True, 'password': '1111111', 'username': 'root'}", "406"],
  "third": ["{'isRememberMe': True, 'password': '111111', 'username': 'rot'}", "406"]
}

新建文件testdata.yaml:

first: ["{'isRememberMe': True,'password': '111111','username': 'root'}","200"]

second: ["{'isRememberMe': True, 'password': '1111111', 'username': 'root'}", "406"]

third: ["{'isRememberMe': True, 'password': '111111', 'username': 'rot'}", "406"]

新建测试脚本:

import json
import unittest
from common.readConfig import readConfig
import requests
from ddt import ddt,data,file_data,unpack

@ddt  # 在测试类前必须首先声明使用 ddt.ddt
class Mytest(unittest.TestCase):
  def setUp(self):
    # 获取测试接口的url
    self.url = readConfig().getHttp('usercenter') + readConfig().get_UC('login')print('setup')

  @file_data('D:\\automation--interface\\testcase\\UC\\testdata.json')
  # @file_data('D:\\automation--interface\\testcase\\UC\\testdata.yaml')

  # 后台人员登录
  def test_login(self,data):
    body = json.dumps(eval(data[0]))
    status = data[1]
    header = {"Content-Type":"application/json","Accept": "application/json","token": "1231"}
    re = requests.post(self.url,data=body,headers = header,verify = False)
    code = re.status_code
    print(re.text,re.status_code)
    # 断言
    self.assertEqual(int(status),int(code))

  def tearDown(self):
    print('tearDown')

if __name__ == '__main__':
  unittest.main()

以上代码大家可以本地测试下,感谢同学们的学习和对三水点靠木的支持。

Python 相关文章推荐
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
python文件与目录操作实例详解
Feb 22 Python
Django视图和URL配置详解
Jan 31 Python
python实现隐马尔科夫模型HMM
Mar 25 Python
python3之模块psutil系统性能信息使用
May 30 Python
用python统计代码行的示例(包括空行和注释)
Jul 24 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
详解如何设置Python环境变量?
May 13 Python
Keras设置以及获取权重的实现
Jun 19 Python
关于python的缩进规则的知识点详解
Jun 22 Python
Python Selenium自动化获取页面信息的方法
Aug 31 Python
python解决OpenCV在读取显示图片的时候闪退的问题
Feb 23 Python
Flask框架踩坑之ajax跨域请求实现
Feb 22 #Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 #Python
pandas修改DataFrame列名的实现方法
Feb 22 #Python
pyhanlp安装介绍和简单应用
Feb 22 #Python
Python3.7 dataclass使用指南小结
Feb 22 #Python
Python文件读写常见用法总结
Feb 22 #Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
Feb 22 #Python
You might like
十天学会php之第九天
2006/10/09 PHP
队列在编程中的实际应用(php)
2010/09/04 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
基于vue.js中事件修饰符.self的用法(详解)
2018/02/23 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
bootstrap-table后端分页功能完整实例
2020/06/01 Javascript
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
Pandas的Apply函数具体使用
2020/07/21 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
台湾最大银发乐活百货:乐龄网
2018/05/21 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
秸秆管理实施方案
2014/03/15 职场文书
有创意的广告词
2014/03/18 职场文书
2015年林业工作总结
2015/05/14 职场文书
公司借款担保书
2015/09/22 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript
用Python实现屏幕截图详解
2022/01/22 Python