从接口自动化测试框架设计到开发(二)操作json文件、重构json工具类

时间:2023-03-09 12:55:38
从接口自动化测试框架设计到开发(二)操作json文件、重构json工具类

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

从接口自动化测试框架设计到开发(二)操作json文件、重构json工具类

把请求数据都放在一个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'))

运行结果

从接口自动化测试框架设计到开发(二)操作json文件、重构json工具类

从接口自动化测试框架设计到开发(二)操作json文件、重构json工具类

根据每个字段的行数给模板定义一个固定变量

#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