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

把请求数据都放在一个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. java核心技术----Object类

    package java.lang; /** * Class {@code Object} is the root of the class hierarchy. * Every class has ...

  2. C++读取MNIST数据集

    MNIST是一个标准的手写字符测试集. Mnist数据集对应四个文件: train-images-idx3-ubyte: training set images  train-labels-idx1- ...

  3. C语言关于getchar()的小笔记

    #include <windows.h> #include <mmsystem.h> #include <string.h> void main() { int a ...

  4. 使用PyCharm创建并运行一个Python项目

    (1)首先,在欢迎界面点击“Create New Project”: (2)在“New Project“左侧面板点击”Pure Python“,右侧Location选择自己要创建项目的路径(一般情况, ...

  5. HDU_2191_多重背包

    http://acm.hdu.edu.cn/showproblem.php?pid=2191 简单多重背包题. #include<iostream> #include<cstdio& ...

  6. curl 和 tcpdump

    curl: 1.通常使用curl 来监控网址状态, #curl -m 5 -s -o /dev/null -w %{http_code} www.baidu.com #200 -m 设置访问超时时间, ...

  7. Mybatis随记(一)update动态SQL

    <update id="updateUser"> UPDATE user_info SET <if test="gzhOpenId != null an ...

  8. js位运算-按位非

    正数 取得二进制表示 取反(发现符号位是1,表示负数) 符号位不变,其余位取反 取反后加一 负数 取得负数的二进制表示(即绝对值的二进制反码加一) 取反即可

  9. vs工程配置eslint检测环境

    vs工程打开一个js文件,会提示 "No ESLint configuration (e.g .eslintrc) found for file ......." 或 " ...

  10. 2,简单的Python爬虫

    前言 根据上一篇 1,Python爬虫环境的安装我们已经在本地安装好了Python环境,那么这一篇就开始学习如何用Python来爬虫! 环境:操作系统:Windows10 IDE:   PyCharm ...