从接口自动化测试框架设计到开发(二)操作json文件、重构json工具类
用例模板里的请求数据多,看起来很乱,所以可以通过访问另外一个文件的方式获取请求数据

把请求数据都放在一个json文件中

取出login的内容:
import json
fp = open('G:/uni_test/data/请求数据.json') #打开文件
data = json.load(fp) #加载文件
print(data['login']) #取出login的数据
重构json工具类
#operationjson.py
# -*- coding: utf-8 -*-
# @Author: jiujiu
# @Date: 2020-03-04 15:40:55
# @Last Modified time: 2020-03-05 14:42:39
import json
class operation_json:
def __init__(self):
self.data = self.read_data()
#读取json文件
def read_data(self):
with open('G:/uni_test/data/请求数据.json') as fp: #自动会关闭文件,不用再close.()
data = json.load(fp) #加载文件
return data
def get_data(self,requestdata=None):
if requestdata == None:
return ''
return self.data[requestdata]
# 写入json
# def write_data(self, data=None):
# with open("G:/uni_test/data/请求数据.json", 'w') as fp:
# fp.write(json.dumps(data))
if __name__ == '__main__':
operas = operation_json()
# print(operas.read_data())
print(operas.get_data('login'))
运行结果


根据每个字段的行数给模板定义一个固定变量
#data_config.py
#-*- coding: utf-8 -*-
#TypeError: test() takes 0 positional arguments but 1 was given 遇到这个报错信息,把函数默认加上self参数
class global_var:
Id = ''
request_name = ''
url = ''
run = ''
request_way = ''
header = ''
case_depend = ''
data_depend = ''
filid_depend =''
data = ''
expect = ''
result = ''
def get_id(self):
return global_var.Id
def get_url(self):
return global_var.url
def get_run(self):
return global_var.run
def get_request_way(self):
return global_var.request_way
def get_header(self):
return global_var.header
def get_case_depend(self):
return global_var.case_depend
def get_data_depend(self):
return global_var.data_depend
def get_filid_depend(self):
return global_var.filid_depend
def get_data(self):
return global_var.data
def get_expect(self):
return global_var.expect
def get_result(self):
return global_var.result
def get_header_value(self):
header = {
'header':'',
'cookie':'dajiujiu'
}
封装获取变量数据
#get_data.py
# -*- coding: utf-8 -*-
# @Author: jiujiu
# @Date: 2020-02-27 17:32:48
# @Last Modified time: 2020-03-05 14:40:11
import sys
sys.path.append("G:/uni_test")
from util.operation_excel import OperationExcel
from data.data_config import global_var
from util.operationjson import operation_json class GetData:
"""docstring for GetData"""
def __init__(self):
self.opera_excel = OperationExcel()
#之前遇到直接调用data.config.get_url()报错说data.config未定义,就实例化一下global_var类
self.dataconfig = global_var()
self.opera_json = operation_json()
#去获取excel行数,就是我们的case个数
def get_case_lines(self):
return self.opera_excel.get_lines()
#获取是否执行
#list indices must be integers,not str 遇到这个错误,在数据之前加上int
def get_is_run(self,row):
flag = None
col = int(self.dataconfig.get_run())
run_model = self.opera_excel.get_cell_value(row,col)
if run_model == 'yes':
flag = True
else:
flag = False
return flag
#获取是否需要header
def is_header(self,row):
col = int(self.dataconfig.get_header())
header = self.opera_excel.get_cell_value(row,col)
if header =='yes':
return self.dataconfig.get_header_value()
else:
return None
#获取请求方式
def get_request_method(self,row):
col = int(self.dataconfig.get_request_way())
request_method = self.opera_excel.get_cell_value(row,col)
return request_method
#获取url
def get_request_url(self,row):
col = int(self.dataconfig.get_url())
url = self.opera_excel.get_cell_value(row,col)
return url
#获取请求数据
def get_request_data(self,row):
col = int(self.dataconfig.get_data())#第9列
data = self.opera_excel.get_cell_value(row,col)#传入行数,取值
if data:
return data
else:
return None
#通过获取关键字拿到data数据
def get_data_for_json(self,row):
data = self.get_request_data(row) #取到的值
request_data = self.opera_json.get_data(data)#取到的值传入get_data中,然后通过get_read读取到值
return request_data #返回请求数据
#获取预期结果
def get_expect_data(self,row):
col = int(self.dataconfig.get_expect())
get_expect = self.opera_excel.get_cell_value(row,col)
return get_expect
封装get和post基类
#run_method.py
# -*- coding: utf-8 -*-
# @Author: jiujiu
# @Date: 2020-03-04 16:18:07
# @Last Modified time: 2020-03-04 16:18:07
import requests
class RunMethod:
def post_main(self,url,data,header):
res = None
if header != None:
res = requests.post(url=url,data=data,header=None)
else:
res = requests.post(url=url,data=data)
return res def get_main(self,url,data=None,header=None):
res = None
if header != None:
res = requests.get(url=url,data=None,header=header)
else:
res = requests.get(url=url,data=data)
return res def run_main(self,method,url,data=None,header=None):
res = None
if method == 'post':
res = self.post_main(url,data,header)
else:
res = self.get_main(url,data,header)
return res
从接口自动化测试框架设计到开发(二)操作json文件、重构json工具类的更多相关文章
- Python3简易接口自动化测试框架设计与实现(中)
目录 7.Excel数据读取 7.1.读取配置文件 7.1.编写Excel操作类 8.用例组装 9.用例运行结果校验 10.运行用例 11 .小结 上一篇:Python3简易接口自动化测试框架设计与实 ...
- Python3简易接口自动化测试框架设计与实现(上)
目录 1.开发环境 2.用到的模块 3.框架设计 3.1.流程 3.2.项目结构 5.日志打印 6.接口请求类封装 接口开发请参考:使用Django开发简单接口:文章增删改查 1.开发环境 操作系统: ...
- python 做接口自动化测试框架设计
1,明确什么叫自动化测试,什么叫接口自动化测试,如何设计接口测试用例,已登录为例 自动化测试:解放人力来自动完成规定的测试. 自动化测试分层模型:UI层,不论WEB端还是移动端,都是基于页面元素的识别 ...
- Python接口自动化测试框架实战 从设计到开发
第1章 课程介绍(不要错过)本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用本章重点讲解如何抓app\web的htt ...
- ApiTesting全链路接口自动化测试框架 - 新增数据库校验(二)
在这之前我完成了对于接口上的自动化测试:ApiTesting全链路接口自动化测试框架 - 初版(一) 但是对于很多公司而言,数据库的数据校验也尤为重要,另外也有小伙伴给我反馈希望支持. 所以最近几天我 ...
- 性能测试学习之路 (四)jmeter 脚本开发实战(JDBC &JMS &接口脚本 & 轻量级接口自动化测试框架)
1.业务级脚本开发 登录脚本->思路:在线程组下新建两个HTTP请求,一个是完成访问登录页,一个是完成登录的数据提交. 步骤如下: 1) 访问登录页 2) 提交登录数据的HTTP PS:对于 ...
- 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...
- 接口自动化 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)
基于python实现的http+json协议接口自动化测试框架(实用改进版) by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 目录 1. ...
- 接口自动化测试框架-AIM3.0-开源+OOP
这是3.0了,从1.0到2.0直接跨越到3.0,就是这么随意. 3.0的关键词一是开源,源码地址为https://github.com/dongfanger/AIM,二是OOP. 随着python的发 ...
随机推荐
- ubuntu 如何添加alias
公司的nx 上面一般使用gvim 编辑文件.并且为gvim 增加了alias,只要敲 g 就是gvim 的意思,这样编辑一个文件只需要 g xxx.v 就可以了.非常方便. 在自己电脑上安装了ubun ...
- python学习记录(七)
0904--https://www.cnblogs.com/fnng/archive/2013/04/24/3039335.html 0904--https://www.cnblogs.com/fnn ...
- PySpark Rdd Cheat Sheet Python
- ncbi-blast 本地安装
详见:http://blog.shenwei.me/local-blast-installation/ Linux系统中NCBI BLAST+本地化教程 本文面向初学者(最好还是懂得基本的linux使 ...
- 2019ccpc哈尔滨打铜记
小学生日记: 2019.10.13,哈尔滨,打了个铜 开头 先说结论,这次失败,我的锅70%,sdl的锅5%,ykh25% Day0 周五, 我们队出现了奇怪的厄运上身 首先是我中途在飞机上数据线突然 ...
- mongo 集群(副本)搭建过程记录
最近搭建mongo集群,回忆总结,作以记录.整个过程主要参考以下两篇文章,但是过程并不顺利,有些问题需要记录.https://www.cnblogs.com/dba-devops/p/7130710. ...
- Go语言实现:【剑指offer】题目汇总
所列题目与牛客网<剑指offer>专题相对应. 数组: 和为S的两个数字 和为S的连续正数序列 连续子数组的最大和 数字在排序数组中出现的次数 数组中只出现一次的数字 旋转数组的最小数字 ...
- 对c语言中static函数的理解
先看看前两篇博客:个人对头文件的理解.对声明和定义的理解. static 函数只在定义该static函数的cpp中可见,在其他cpp中是不可见的. 举个例子,我建立了一个project,该projec ...
- error C2662
原因:关于const的问题 具体错误:函数的参数列表中参数签名为const,但是却调用了该参数的非const的成员函数 例子: 即使我们知道NoConst()并不会改变类的data成员,编译器依旧会报 ...
- Redis5.xc两种持久化方式以及主从复制配置
关注公众号:CoderBuff,回复"redis"获取<Redis5.x入门教程>完整版PDF. <Redis5.x入门教程>目录 第一章 · 准备工作 第 ...