从接口自动化测试框架设计到开发(二)操作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的发 ...
随机推荐
- 6、RIP
在路由查找时,有类路由查找方式和无类路由查找的区别:有类路由查找:1.首先匹配主网条目.主网信息2.匹配上主网之后,再去查找子网信息3.查找到子网,就会转发,否则就丢弃4.有一种例外,没有找到主网和子 ...
- MyBatis基础_连接池与事务、动态SQL、注解开发
一.MyBatis连接池及事务控制 1.连接池 在实际开发中,都会使用连接池,因为它可以减少获取连接缩消耗的时间.所谓连接池,就是存储数据库连接的容器.连接池中存储一定数量的数据库连接,当线程需要使用 ...
- oracle安装异常汇总
. 运行 ./runInstaller 安装界面出现乱码问题 解决方案: export NLS_LANG=AMERICAN_AMERICA.UTF8 export LC_ALL=C .运行 ./run ...
- API 接口设计规范
概述 这篇文章分享 API 接口设计规范,目的是提供给研发人员做参考. 规范是死的,人是活的,希望自己定的规范,不要被打脸. 路由命名规范 动作 前缀 备注 获取 get get{XXX} 获取 ge ...
- Django 搭建
1.安装python 2.pip 安装 Django 2.1.3 是版本号 命令:pip install Django==2.1.3 3.数据库驱动: mysql 数据库配置文档: 下载 whl 文 ...
- PBFT算法java实现
PBFT 算法的java实现(上) 在这篇博客中,我会通过Java 去实现PBFT中结点的加入,以及认证.其中使用socket实现网络信息传输. 关于PBFT算法的一些介绍,大家可以去看一看网上的博客 ...
- Java开发最佳实践(一) ——《Java开发手册》之"编程规约"
Java开发手册版本更新说明 专有名词解释 一. 编程规约 (一) 命名风格 (二) 常量定义 (三) 代码格式 (四) OOP 规约 (五) 集合处理 (六) 并发处理 (七) 控制语句 (八) 注 ...
- 为什么Linux 实例执行 df 和 du 查看磁盘时结果不一致
问题现象 执行 df -h 查看 ECS Linux 实例文件系统使用率,可以看到 /dev/xvdb1 磁盘占用了约27G,挂载目录为 /opt . 进入到 /opt 目录执行 du -sh ,显示 ...
- [jQuery]jQuery链式编程(六)
链式编程 节约代码量 <button>快速</button> <button>快速</button> <button>快速</butt ...
- mysql出现 Unknown column 'Password' in 'field list'
linux安装了mysql之后初始化密码获取:出现了下面的内容,密码很尴尬,无法用root登录: grep 'temporary password' /var/log/mysqld.log [Note ...