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守护进程和脚本单例运行详解
Jan 06 Python
python使用mysql数据库示例代码
May 21 Python
Django学习教程之静态文件的调用详解
May 08 Python
python实现linux下抓包并存库功能
Jul 18 Python
python创建文件时去掉非法字符的方法
Oct 31 Python
对python模块中多个类的用法详解
Jan 10 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 Python
python进程的状态、创建及使用方法详解
Dec 06 Python
python爬虫模拟浏览器的两种方法实例分析
Dec 09 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
Python中sys模块功能与用法实例详解
Feb 26 Python
使用 django orm 写 exists 条件过滤实例
May 20 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/12/06 PHP
php入门教程 精简版
2009/12/13 PHP
php中http_build_query 的一个问题
2012/03/25 PHP
php线性表的入栈与出栈实例分析
2015/06/12 PHP
php单链表实现代码分享
2016/07/04 PHP
PHP实现的简单路由和类自动加载功能
2018/03/13 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
javascript简单性能问题及学习笔记
2014/02/04 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
实例浅析js的this
2016/12/11 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
python笔记(2)
2012/10/24 Python
python基础教程之lambda表达式使用方法
2014/02/12 Python
python绘图库Matplotlib的安装
2014/07/03 Python
python使用正则搜索字符串或文件中的浮点数代码实例
2014/07/11 Python
python使用chardet判断字符串编码的方法
2015/03/13 Python
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
Python读写文件基础知识点
2019/06/10 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
Rakuten Kobo台湾:电子书、eReaders和Reading应用程式
2017/11/24 全球购物
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
美国正版电视节目和电影在线观看:Hulu
2018/05/24 全球购物
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
班组长的岗位职责
2013/12/09 职场文书
财务总监管理岗位职责
2014/03/08 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
小学教师节活动总结
2015/03/20 职场文书
社区党务工作总结2015
2015/05/19 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技