用例模板里的请求数据多,看起来很乱,所以可以通过访问另外一个文件的方式获取请求数据

把请求数据都放在一个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工具类的更多相关文章

  1. Python3简易接口自动化测试框架设计与实现(中)

    目录 7.Excel数据读取 7.1.读取配置文件 7.1.编写Excel操作类 8.用例组装 9.用例运行结果校验 10.运行用例 11 .小结 上一篇:Python3简易接口自动化测试框架设计与实 ...

  2. Python3简易接口自动化测试框架设计与实现(上)

    目录 1.开发环境 2.用到的模块 3.框架设计 3.1.流程 3.2.项目结构 5.日志打印 6.接口请求类封装 接口开发请参考:使用Django开发简单接口:文章增删改查 1.开发环境 操作系统: ...

  3. python 做接口自动化测试框架设计

    1,明确什么叫自动化测试,什么叫接口自动化测试,如何设计接口测试用例,已登录为例 自动化测试:解放人力来自动完成规定的测试. 自动化测试分层模型:UI层,不论WEB端还是移动端,都是基于页面元素的识别 ...

  4. Python接口自动化测试框架实战 从设计到开发

    第1章 课程介绍(不要错过)本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用本章重点讲解如何抓app\web的htt ...

  5. ApiTesting全链路接口自动化测试框架 - 新增数据库校验(二)

    在这之前我完成了对于接口上的自动化测试:ApiTesting全链路接口自动化测试框架 - 初版(一) 但是对于很多公司而言,数据库的数据校验也尤为重要,另外也有小伙伴给我反馈希望支持. 所以最近几天我 ...

  6. 性能测试学习之路 (四)jmeter 脚本开发实战(JDBC &JMS &接口脚本 & 轻量级接口自动化测试框架)

    1.业务级脚本开发 登录脚本->思路:在线程组下新建两个HTTP请求,一个是完成访问登录页,一个是完成登录的数据提交.   步骤如下: 1) 访问登录页 2) 提交登录数据的HTTP PS:对于 ...

  7. 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)

    1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...

  8. 接口自动化 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)

    基于python实现的http+json协议接口自动化测试框架(实用改进版)   by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436     目录 1.      ...

  9. 接口自动化测试框架-AIM3.0-开源+OOP

    这是3.0了,从1.0到2.0直接跨越到3.0,就是这么随意. 3.0的关键词一是开源,源码地址为https://github.com/dongfanger/AIM,二是OOP. 随着python的发 ...

随机推荐

  1. 基于 H5与webGL 的低碳工业园区监控系统

    前言 低碳工业园区的建设与推广是我国推进工业低碳转型的重要举措,低碳工业园区能源与碳排放管控平台是低碳工业园区建设的关键环节.如何对园区内的企业的能源量进行采集.计量.碳排放核算,如何对能源消耗和碳排 ...

  2. 《Python学习手册 第五版》 -第11章 赋值、表达式和打印

    上一章对Python的语句和语法已经进行了基本的说明,接下来就是每个章节的详细说明,本章的主要内容就是标题中涵盖的三点:赋值语句.表达式语句.打印语句 本章重点内容如下: 1.赋值语句 1)赋值语句的 ...

  3. 真正解决百度编辑器UEditor上传图片跨域问题

    做前后端分离的项目用到UEditor,把上传图片程序拿出来放到了接口程序中,上传图片接口已经做了跨域处理,按理说编辑器中上传图片应该不会有问题.可是配置好图片上传路径后,运行,打开调试,测试一下,报错 ...

  4. 青石巷-小L的爸爸

    小L有一个和谐的家. 爸爸具体职业不明,在统战部工作,刚开始和妈妈在一起工作. 妈妈是个会跳舞的语文老师. 奶奶之前也是个老师. 爷爷是个建筑师. 爸爸是最有文采的一个.在小L看来,他的一言一行,一举 ...

  5. 用赋值表达式作为bool值

    enum Status { stOk, stQuit, stError }; int main() { Status status; int n; bool b1 = (status = stOk); ...

  6. 【OpenGL】LNK1104 无法打开文件“freeglutd.lib”

    新建的OpenGL程序编译时经常会出现[LNK1104 无法打开文件“freeglutd.lib”]问题,如果freeglutd.lib确实放到了正确的路径下,通常可以通过添加“NDEBUG”宏定义解 ...

  7. python学习(9)字典的基本应用

    字典是一种通过名字或者关键字引用的得数据结构,其键可以是数字.字符串.元组,这种结构类型也称之为映射.字典类型是Python中唯一內建的映射类型.字典可以理解为列表的升级版. dict是无序的 key ...

  8. HDU 5234 背包。

    J - 10 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  9. Python 实现转堆排序算法原理及时间复杂度(多图解释)

    原创文章出自公众号:「码农富哥」,欢迎转载和关注,如转载请注明出处! 堆基本概念 堆排序是一个很重要的排序算法,它是高效率的排序算法,复杂度是O(nlogn),堆排序不仅是面试进场考的重点,而且在很多 ...

  10. 在React中使用WebUploader实现大文件分片上传的踩坑日记!

    前段时间公司项目有个大文件分片上传的需求,项目是用React写的,大文件分片上传这个功能使用了WebUploader这个组件. 具体交互是: 1. 点击上传文件button后出现弹窗,弹窗内有选择文件 ...