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 相关文章推荐
深入讲解Python中面向对象编程的相关知识
May 25 Python
Python中atexit模块的基本使用示例
Jul 08 Python
详解python中的Turtle函数库
Nov 19 Python
新手如何发布Python项目开源包过程详解
Jul 11 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
python实现飞机大战小游戏
Nov 08 Python
python如何支持并发方法详解
Jul 25 Python
Python在字符串中处理html和xml的方法
Jul 31 Python
在pycharm创建scrapy项目的实现步骤
Dec 01 Python
matplotlib绘制多子图共享鼠标光标的方法示例
Jan 08 Python
numba提升python运行速度的实例方法
Jan 25 Python
Python测试框架pytest高阶用法全面详解
Jun 01 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
BBS(php & mysql)完整版(三)
2006/10/09 PHP
php计算2个日期的差值函数分享
2015/02/02 PHP
PHP超全局数组(Superglobals)介绍
2015/07/01 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
jquery validate.js表单验证的基本用法入门
2010/05/13 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
浅析Bootstrip的select控件绑定数据的问题
2016/05/10 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
2016/08/20 Javascript
AngularJS实现的base64编码与解码功能示例
2018/05/17 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
Python语言描述机器学习之Logistic回归算法
2017/12/21 Python
python 接口返回的json字符串实例
2018/03/27 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
2019/01/05 Python
python树莓派红外反射传感器
2019/01/21 Python
django解决订单并发问题【推荐】
2019/07/31 Python
python sorted函数原理解析及练习
2020/02/10 Python
Python对象的属性访问过程详解
2020/03/05 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
介绍一下XMLHttpRequest对象
2012/02/12 面试题
高分子材料个人求职信范文
2013/09/25 职场文书
什么是岗位职责
2013/11/12 职场文书
植树节标语
2014/06/27 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
检讨书范文1000字
2015/01/28 职场文书
借款民事起诉状范文
2015/05/19 职场文书
2015年班主任德育工作总结
2015/05/21 职场文书
地震捐款简报
2015/07/21 职场文书
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技