Mock Server之接口信息从DB获取
上一篇,写了Mock Server的基础实现与被测系统的对接
当我们mock的接口信息、返回值等时不时维护时,都要在代码中编辑,那体验就不太好了,如果这些可以直接在浏览器编辑就好了。
因此对后端部分做下调整,再加个前端,前端页面大致如下:
新增、修改接口:
接口返回值管理:
一、后端path参数化
对于path部分做下参数化:
@db_response_app.route('/<path:url_path>', methods=['GET', 'POST'])
def db_response(url_path):
check_data = CheckData(url_path,request.method)
return check_data.check_data_list()
对获取到的返回值做下检查及处理后返回:
from mysql_operate.mock_config_opt import MockConfigOperate
from data_manage.resp_param_replace import RespParamReplace class CheckData():
def __init__(self,url, method):
self.mock_config_operate = MockConfigOperate()
self.resp_param_replace = RespParamReplace(url, method)
self.data_list = self.mock_config_operate.get_resp(url, method) def check_data_list(self):
if len(self.data_list) == 1:
response_data = self.resp_param_replace.param_replace()
return response_data
elif len(self.data_list) > 1:
return '相同的路径和请求方法存在多条,请检查!'
else:
return 'not defined'
返回值从数据库获取:
from common.db_common import DBCommon class MockConfigOperate(): def __init__(self):
self.dbCommon = DBCommon() def get_resp(self, url_path, method): resp_sql = "SELECT md.resparams from mock_detail md,mock_config mc WHERE mc.respid=md.id and " \
"mc.domain='{url_path}' and mc.methods='{method}';".format(method=method, url_path=url_path)
resp_list = self.dbCommon.query_list(resp_sql)
return resp_list
表设计:
mock_config:respid决定启用的resp
mock_detail:
获取到的返回值处理:
from mysql_operate.mock_config_opt import MockConfigOperate
from common.get_time import GetTime
from data_manage.update_param import UpdateParam
import re class RespParamReplace():
def __init__(self,url,method):
self.time_stamp = GetTime()
self.mock_config_operate = MockConfigOperate()
self.resp_list = self.mock_config_operate.get_resp(url, method)
self.update_param = UpdateParam() self.param_dict = {'@{param_uuid}': self.update_param.update_uuid(),
'@{param_time_stamp}': self.update_param.update_time_stamp(),
'@{param_id}':self.update_param.update_id()} def __get_param(self):
param_key = re.findall(r'@{.*?}', self.resp_list[0]['resparams'])
return param_key def param_replace(self):
resp_value = self.resp_list[0]['resparams']
param_list = self.__get_param()
if param_list:
for param in param_list:
if self.param_dict.has_key(param):
resp_value = re.sub(param,str(self.param_dict[param]),resp_value)
return resp_value
else:
return resp_value
Mock Server之接口信息从DB获取的更多相关文章
- 使用 http 请求方式获取 eureka server的服务信息
对于一些系统不能接入 eureka server,又需要访问接入eureka server 的服务. 方法一:直接调用服务的地址是一种实现方式,弊端就是地址是写死的,万一服务地址变更则访问不到. 方法 ...
- Mock Server 实现post方法的接口(三)
Mock Server 实现post方法的接口(三) 1.mock server实现的接口,当request中未设置"method"时,会自动将所有method试一次,所以一定要指 ...
- mock server 实现get方法的接口(二)
mock server 实现get方法的接口(二) 下面是实现查询品牌的接口demo: 1.当response数据量小的时候,可以直接使用json, mock会自动设置headers为applicat ...
- 利用eolinker实现api接口mock测试(mock server)
转载:http://blog.csdn.net/naicha_qin/article/details/78276172 前后端分离或者是进行单元测试的时候,必须要用mock api替换掉第三方调用或者 ...
- 获取项目中所有URL--获取swagger上展示的接口信息
有时我们需要接口的一些基本信息,比如接口请求路径,接口请求方式等,我们用这些信息来做判断,或者入库. 我在开发接口权限的时候就遇到了这个问题,之前写的接口很多,现在需要将这些接口信息存到数据库中, 用 ...
- Fiddler-009-AutoResponder 简单的 MOCK SERVER 应用实例
在我们日常的测试中经常需要测试特定的响应对应的客户端展示样式是否正确无误,实现测试方法一般有如下三种: 创建新的测试数据(工作量较大) 修改已有测试数据(例如修改对应的状态码,若是最终需要测试的按钮状 ...
- Python接口测试实战5(下) - RESTful、Web Service及Mock Server
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Mock Server实践
转载自 https://tech.meituan.com/mock-server-in-action.html 背景 在美团服务端测试中,被测服务通常依赖于一系列的外部模块,被测服务与外部模块间通过R ...
- [转]使用flask实现mock server
什么是mock server: http://www.testclass.net/interface/mock_server 使用flask 实现 mock server : http://www. ...
随机推荐
- How to convert a std::string to const char* or char*?
How to convert a std::string to const char* or char*? 1. If you just want to pass a std::string to a ...
- [算法模板]SOS DP
[算法模板]SOS DP 正文 SOS-DP(\(\text{Sum over Subsets}\))是用来解决这样的问题的: 其实就是子集和DP.上面每个\(F[mask]\)里面包含了\(mask ...
- 超强在线考试系统源码(私有部署&二次开发)
随着信息化技术的发展,考试系统也在进行着深入的变革.从传统的纸质考试人工评分到现在的在线考试自动评分. 在线考试系统的应用场景也在逐渐扩宽,例如:学校的学生考试.员工培训考试.招聘考试.职称考试等等. ...
- Lab3:虚拟内存管理
前言 虚拟内存是计算机系统内存管理的一种技术.它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要 ...
- 【07月01日】A股滚动市净率PB历史新低排名
2010年01月01日 到 2019年07月01日 之间,滚动市净率历史新低排名. 上市三年以上的公司,2019年07月01日市净率在30以下的公司. 来源:A股滚动市净率(PB)历史新低排名. 1 ...
- kali 添加swap 交换分区
这里采用的是添加交换文件 mkdir /swap #创建/swap 文件夹 dd if=/dev/zero of=/swap/swapfile bs=1M count=4096 # 在/swap 下创 ...
- oracle 之 using 使用
oracle 中 using关键字使用规则: 1.查询必须是等值连接.2.等值连接中的列必须具有相同的名称和数据类型. 使用using关键字简化连接时,需要注意以下几点:1.使用 table1表和 ...
- influx db
1.查看数据库中的tag keys: 如果需要查看field的直接改 > show tag keys on test; name: garage_pc_overviewtagKey--- ...
- C语言 宏定义的1<<0 与 直接定义1 有什么区别
[1]示例程序 如下示例代码: #include <stdio.h> #define TEST1 1 << 0 #define TEST2 (1 << 0) #de ...
- Sitecore安全性第1部分:自定义角色和权限
安全性是任何Sitecore构建的重要组成部分.它可确保您的内容作者具有适当级别的访问权限,以管理他们拥有的内容,并授予他们访问不同Sitecore功能的权限. Sitecore附带了许多提供功能访问 ...