python ddt数据驱动(简化重复代码)
在接口自动化测试中,往往一个接口的用例需要考虑 正确的、错误的、异常的、边界值等诸多情况,然后你需要写很多个同样代码,参数不同的用例。如果测试接口很多,不但需要写大量的代码,测试数据和代码柔合在一起,可维护性也会变的很差。数据驱动可以完美的将代码和测试数据分开,将代码进行分装,提高复用性,测试数据维护在本地文件或数据库。
使用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": ""}
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'}", ""],
"second": ["{'isRememberMe': True, 'password': '1111111', 'username': 'root'}", ""],
"third": ["{'isRememberMe': True, 'password': '111111', 'username': 'rot'}", ""]
}
新建文件testdata.yaml:
first: ["{'isRememberMe': True,'password': '111111','username': 'root'}",""]
second: ["{'isRememberMe': True, 'password': '1111111', 'username': 'root'}", ""]
third: ["{'isRememberMe': True, 'password': '111111', 'username': 'rot'}", ""]
新建测试脚本:
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": ""}
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 ddt数据驱动(简化重复代码)的更多相关文章
- python自动化测试之DDT数据驱动
时隔已久,再次冒烟,自动化测试工作仍在继续,自动化测试中的数据驱动技术尤为重要,不然咋去实现数据分离呢,对吧,这里就简单介绍下与传统unittest自动化测试框架匹配的DDT数据驱动技术. 话不多说, ...
- 基于Python的接口自动化-unittest测试框架和ddt数据驱动
引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...
- python+unittest+ddt数据驱动进行接口自动化测试
所谓数据驱动测试,简单的理解为数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.通过使用数据驱动测试的方法,可以在需要验证多组数据测试场景中,使用外部数据源实现对输入输出与期望值的参数化,避 ...
- 【python】以souhu邮箱为例学习DDT数据驱动测试
前言 DDT(Data-Driven Tests)是针对 unittest 单元测试框架设计的扩展库.允许使用不同的测试数据来运行一个测试用例,并将其展示为多个测试用例.通俗理解为相同的测试脚本使用不 ...
- 如何快速掌握DDT数据驱动测试?
1.前言 (网盗概念^-^)相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离, 这样的测试脚本设计模式称为数据驱动.(网盗结束)当我们测试某个网站的登录功能时,我们往往会使用不同的用 ...
- Unittest框架+ddt数据驱动+HTMLTestRunner+sendmail(自动发送测试报告)+git+Jenkins
本次写的是针对有代码基础的,没基础建议先去学基础,以下所有描述内容都是我已经在公司项目实践成功的!仅供参考 整体思路: 1.接口自动化用的是Python中unittest框架 2.所有的测试数据用例存 ...
- Python :编写条件分支代码的技巧
『Python 工匠』是什么? 我一直觉得编程某种意义是一门『手艺』,因为优雅而高效的代码,就如同完美的手工艺品一样让人赏心悦目. 在雕琢代码的过程中,有大工程:比如应该用什么架构.哪种设计模式.也有 ...
- python DDT读取excel测试数据
转自:http://www.cnblogs.com/nuonuozhou/p/8645129.html ddt 结合单元测试一起用 ddt(data.driven.test):数据驱动测试 由外部 ...
- [ddt01篇]十年测试老鸟帮您解析:ddt数据驱动实现自动化测试入门基础应用
一.什么是DDT数据驱动框架 全称:data driver test数据驱动测试框架,可以完美的应用于unittest框架实现数据驱动.ddt使用简介: 1.测试数据为多个字典的list类型 2. ...
随机推荐
- JDBC知识详解
一.相关概念 1.什么是JDBC JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它 ...
- Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上
前言 诞生及优势 MQTT由Andy Stanford-Clark(IBM)和Arlen Nipper(Eurotech,现为Cirrus Link)于1999年开发,用于监测穿越沙漠的石油管道.目标 ...
- 重磅!!!微软发布.NET Core 2.2
我们很高兴地宣布发布.NET Core 2.2.它包括对运行时的诊断改进,对ARM32 for Windows和Azure Active Directory for SQL Client的支持.此版本 ...
- typecho设置文章密码保护
在别人博客看到了一个需要输入密码才能访问文章的功能,像下图一样 typecho也是有这个功能,不需要插件就可以实现.在编辑文章时,右边高级选项,公开度里有个密码保护可以选择 效果图 不过这样的界面不是 ...
- Filter、Interceptor、Aspect 区别及实现
Fliter 过滤器 请求在到达Controller之前进行与返回去之后 调用 入参为 reuqest,response,chian,过滤器获取不了具体调用哪一个类,哪一个方法. 实现: 1.继承 F ...
- 网络协议 22 - RPC 协议(下)- 二进制类 RPC 协议
前面我们认识了两个常用文本类的 RPC 协议,对于陌生人之间的沟通,用 NBA.CBA 这样的缩略语,会使得协议约定非常不方便. 在讲 CDN 和 DNS 的时候,我们讲过接入层的设计 ...
- 工厂方法模式--java代码实现
工厂方法模式 工厂方法模式,对简单工厂模式进行了升级.我们将水果园比作一个工厂,在简单工厂模式下,水果园是一个具体的工厂,直接用来生产各种各样的水果.那么在工厂方法模式下,水果园是一个抽象工厂,那么苹 ...
- es6学习笔记-async函数
1 前情摘要 前段时间时间进行项目开发,需求安排不是很合理,导致一直高强度的加班工作,这一个月不是常说的996,简直是936,还好熬过来了.在此期间不是刚学会了es6的promise,在项目有用到pr ...
- Android注解框架实战-ButterKnife
文章大纲 Android注解框架介绍 ButterKnife实战 项目源码下载 一.框架介绍 为什么要用注解框架? 在Android开发过程中,我们经常性地需要操作组件,操作方法有findVie ...
- 2018-02-24 项目/教程中使用母语命名的"问题"
早先试图找使用中文命名代码的项目, 但所获寥寥: 索引: 用中文编写代码的实用开源项目 · Issue #6 · program-in-chinese/overview. 更不用说教程了: 索引: 用 ...