上一篇,写了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获取的更多相关文章

  1. 使用 http 请求方式获取 eureka server的服务信息

    对于一些系统不能接入 eureka server,又需要访问接入eureka server 的服务. 方法一:直接调用服务的地址是一种实现方式,弊端就是地址是写死的,万一服务地址变更则访问不到. 方法 ...

  2. Mock Server 实现post方法的接口(三)

    Mock Server 实现post方法的接口(三) 1.mock server实现的接口,当request中未设置"method"时,会自动将所有method试一次,所以一定要指 ...

  3. mock server 实现get方法的接口(二)

    mock server 实现get方法的接口(二) 下面是实现查询品牌的接口demo: 1.当response数据量小的时候,可以直接使用json, mock会自动设置headers为applicat ...

  4. 利用eolinker实现api接口mock测试(mock server)

    转载:http://blog.csdn.net/naicha_qin/article/details/78276172 前后端分离或者是进行单元测试的时候,必须要用mock api替换掉第三方调用或者 ...

  5. 获取项目中所有URL--获取swagger上展示的接口信息

    有时我们需要接口的一些基本信息,比如接口请求路径,接口请求方式等,我们用这些信息来做判断,或者入库. 我在开发接口权限的时候就遇到了这个问题,之前写的接口很多,现在需要将这些接口信息存到数据库中, 用 ...

  6. Fiddler-009-AutoResponder 简单的 MOCK SERVER 应用实例

    在我们日常的测试中经常需要测试特定的响应对应的客户端展示样式是否正确无误,实现测试方法一般有如下三种: 创建新的测试数据(工作量较大) 修改已有测试数据(例如修改对应的状态码,若是最终需要测试的按钮状 ...

  7. Python接口测试实战5(下) - RESTful、Web Service及Mock Server

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  8. Mock Server实践

    转载自 https://tech.meituan.com/mock-server-in-action.html 背景 在美团服务端测试中,被测服务通常依赖于一系列的外部模块,被测服务与外部模块间通过R ...

  9. [转]使用flask实现mock server

    什么是mock server: http://www.testclass.net/interface/mock_server 使用flask 实现  mock server : http://www. ...

随机推荐

  1. 【BigData】Java基础_ArrayList的使用

    ArrayList概述 ArrayList底层使用的是数组.是List的可变数组实现,这里的可变是针对List而言,而不是底层数组. 数组有自身的特点,不变性,一旦数组被初始化,那么其长度就固定了,不 ...

  2. SQL join 三种扩展用法

    以前学习,只知道  LEFT JOIN.RIGHT JOIN.INNER JOIN.FULL  JOIN,共四种集合,然而加上一些条件,可以组合成另外三种集合,直接上图.

  3. [转帖]HashMap、HashTable、ConcurrentHashMap的原理与区别

    HashMap.HashTable.ConcurrentHashMap的原理与区别 http://www.yuanrengu.com/index.php/2017-01-17.html 2017年1月 ...

  4. 建造(Builder)模式

    建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象. 摘自EffectiveJava:当构造方法参数过多时使用建造者模式. 产品的内部表象 ...

  5. c语言数据结构之线性表的顺序存储结构

    线性表,即线性存储结构,将具有“一对一”关系的数据“线性”地存储到物理空间中,这种存储结构就称为线性存储结构,简称线性表. 注意:使用线性表存储的数据,要求数据类型必须一致,线性表存储的数据,要么全不 ...

  6. Python 文件编码问题解决

    最近使用python操作文件,经常遇到编码错误的问题,例如: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbe in position ...

  7. Java学习:面向对象的三大特征:封装性、继承性、多态性之继承性

    面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...

  8. InstantiationAwareBeanPostProcessor 分析

    Cglib之Enhancer创建动态代理https://blog.csdn.net/yaomingyang/article/details/82762697 https://blog.csdn.net ...

  9. using 语句(C# 参考)(转载)

    using 语句 提供可确保正确使用 IDisposable对象的方便语法. 示例 下面的示例演示如何使用 using 语句. using (var font1 = new Font("Ar ...

  10. vs2017专业版和企业版的密钥

    Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH