使用Python+Flask/Moco框架/Fiddler搭建简单的接口Mock服务

一、Mock测试

1、介绍

  • mock:就是对于一些难以构造的对象,使用虚拟的技术来实现测试的过程
  • mock测试:在测试过程中,对于某些不容易构造或者不容易获取的对象,可以用一个虚拟的对象来代替的测试方法
  • 接口mock测试:在接口测试过程中,对于某些不容易构造或者不容易获取的接口,可以用一个模拟接口来代替

2、作用

  • 可以用来解除测试对象对外部服务的依赖,使得测试用例可以独立运行
  • 替换外部服务调用或一些速度较慢的操作,提升测试用例的运行速度
  • 模拟异常逻辑,异常逻辑往往很难触发,通过mock可以人为的控制触发异常逻辑,例如对接了第三方平台的支付接口,而有些支付失败场景难以触发,可以使用mock实现
  • 实现团队并行工作,在后端代码还未完成而前端代码需要调用后端接口进行联调时,可以搭建mock服务实现

3、实现方式

(1)使用第三方的mock平台,例如Fiddler、Postman等等

(2)使用代码开发mock平台,例如Python+Flask实现

(3)使用mock工具搭建mock平台,例如:Moco框架

mock的实现方式有很多,当然不止这些,上述方式实现起来会简单点


二、 Python+Flask实现简单的Mock平台搭建

1、介绍

        flask是一个基于python开发的轻量web应用程序框架

2、安装flask

  • 安装:pip install flask 或 pycharm的python解释器安装Flask软件包
  • 验证:flask --version

3、案例代码

import json
from flask import Flask, request# 创建一个应用对象
app = Flask(__name__)# 定义视图函数,设置路由规则
@app.route("/index")  # method没有默认get
def index():print("欢迎访问index主页")return "hello mock"# {"username":"test_login","password":"123456"}
@app.route("/login", methods=["POST"])
def login():result = json.loads(request.get_data().decode("utf-8")) username = result.get("username")password = result.get("password")print(username, password)if username == "test_login" and password == "123456":data = {"success": True,"code": 666,"message": "恭喜登录成功","token": "qiow-8124-uiqw-1232"}else:data = {"success": False,"code": 0000,"message": "账号或密码错误,请稍后重试!","token": None}return data# 启动web服务器
if __name__ == '__main__':app.run()

request.get_data()用于获取请求中的原始数据,返回一个字节字符串,包含请求的主体内容

4、运行验证

index首页:

login登录成功:

login登录失败:

5、拓展——模拟404 Not Found

  1. 上述代码有视图函数但url地址写错,就会报404错误
  2. 没有任何视图函数启动服务后,访问地址就会报404错误,如下所示:
from flask import Flask# 创建一个应用对象
app = Flask(__name__)# 启动web服务器
if __name__ == '__main__':app.run()


三、 Moco框架搭建Mock服务

1、介绍

        Moco是一个简单搭建模拟服务器的框架(工具),可以模拟httphttpssocket等协议。
基于Java开发的开源项目,Github地址:https://github.com/dreamhead/moco,Gitee地址:https://gitee.com/mirrors/Moco-Java

2、原理

        Moco会根据一些配置,启动一个真正的HTTP服务(会监听本地的某个端口)。当发起的请求满足某个条件时,就会返回指定的响应数据

3、环境搭建

  • 前提:java运行环境,可自行上网查询
  • 安装:moco-runner-xxx-standalone.jar(目前最新是1.5.0版本:https://gitee.com/link?target=https%3A%2F%2Frepo1.maven.org%2Fmaven2%2Fcom%2Fgithub%2Fdreamhead%2Fmoco-runner%2F1.5.0%2Fmoco-runner-1.5.0-standalone.jar)

4、运行Moco

(1)创建json配置文件——简单案例

# test.json
[{"description": "欢迎使用moco服务",    # 描述"request": {    # 请求"uri": "/index","method": "get"},"response": {    # 响应"status": "201","text": "hello moco"}}
]

(2)启动http服务

# 运行单个json文件
java -jar <path-to-moco-runner> http -p <monitor-port> -c <configuration-file># 运行配置文件(即多个json文件一起生效)
java -jar <path-to-moco-runner> http -p <monitor-port> -g <configuration-file><path-to-moco-runner> :jar包的路径
<monitor-port>:http服务监听的端口
<configuration-file>:配置文件路径

(3)接口访问

5、高级配置

(1)配置参数(请求和响应)

参数位置

方法描述
请求(request)method定义请求方法
queries定义请求参数,配合get请求的param参数使用
headers定义请求头
forms定义表单请求体
json定义json请求体
响应(response)status

定义HTTP响应状态码

headers定义响应头
json定义json响应数据
# login.json
[{"description": "登录功能",    # 描述"request": {                 # 请求"uri": "/login","method": "post","json": {"username": "test_login","password": "123456"}},"response": {                # 响应"status": "222","headers": {"Content-Type": "application/json;charset=utf8"},"json": {"success": "True","code": 666,"message": "恭喜登录成功","token": "qiow-8124-uiqw-1232"}}}
]
(2)配置文件

作用:可以分服务/模块定义配置文件,便于对配置文件的管理,也就是多个json文件一起生效

配置config.json文件:

[{"include": "test.json"    # 上面首页json文件},{"include": "login.json"    # 上面登录json文件}
]

运行验证:

在响应中添加了"header":{"Content-Type":"application/json;charset=utf8"}后:

6、Moco不足

Moco的使用很简单,配置也很方便,目前提供了http、https、socket服务。但是也仅仅能模拟出简单的场景。如果接受请求后需要做一些处理,如查询数据库,进行运算,或者一些复杂的操作,就无能为力了。所以是否选用Moco,就取决于开发者是否只是需要一个简单的模拟服务器。


四、Fiddler实现简单的mock测试

大概有三种类型:

1、修改请求数据:在数据请求到服务器之前将请求拦截下,修改数据后发送给服务器,验证是前端的bug还是后端的bug

2、修改响应数据:在服务器响应后发送给客户端前将响应拦截下,修改响应数据后发送给客户端,主要验证不同的异常场景

3、设置自动响应:当需要重复验证同一个地址的接口响应时,一直手动修改响应数据太麻烦,可以设置自动响应实现

具体操作方法在另外一篇文章:https://blog.csdn.net/ouihsiad/article/details/127976413?spm=1001.2014.3001.5501

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/140740.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多维时序 | MATLAB实现WOA-CNN-BiLSTM-Attention多变量时间序列预测(SE注意力机制)

多维时序 | MATLAB实现WOA-CNN-BiLSTM-Attention多变量时间序列预测&#xff08;SE注意力机制&#xff09; 目录 多维时序 | MATLAB实现WOA-CNN-BiLSTM-Attention多变量时间序列预测&#xff08;SE注意力机制&#xff09;预测效果基本描述模型描述程序设计参考资料 预测效果 基…

stc8H驱动并控制三相无刷电机综合项目技术资料综合篇

stc8H驱动并控制三相无刷电机综合项目技术资料综合篇 🌿相关项目介绍《基于stc8H驱动三相无刷电机开源项目技术专题概要》 🔨停机状态,才能进入设置状态,可以设置调速模式,以及转动方向。 ✨所有的功能基本已经完成调试,目前所想到的功能基本已经都添加和实现。引脚利…

SpringSecurity 认证流程

文章目录 前言认证入口&#xff08;过滤器&#xff09;认证管理器认证器说明默认认证器的实现 总结 前言 通过上文了解SpringSecurity核心组件后&#xff0c;就可以进一步了解其认证的实现流程了。 认证入口&#xff08;过滤器&#xff09; 在SpringSecurity中处理认证逻辑是…

CMU15-445 format\clang-format\clang-tidy 失败

CMU15-445 format\clang-format\clang-tidy 失败 问题修改 问题 -- Setting build type to Debug as none was specified. -- Youre using Clang 14.0.0 CMake Warning at CMakeLists.txt:67 (message):BusTub/main couldnt find clang-format.CMake Warning at CMakeLists.tx…

虚幻4学习笔记(15)读档 和存档 的实现

虚幻4学习笔记 读档存档 B站UP谌嘉诚课程&#xff1a;https://www.bilibili.com/video/BV164411Y732 读档 添加UI蓝图 SaveGame_UMG 添加Scroll Box 修改Scrollbar Thickness滚动条厚度 15 15 勾选 is variable 添加text 读档界面 添加背景模糊 添加UI蓝图 SaveGame_Slot …

Rowset Class

本节介绍 This chapter provides an overview of Rowset class and discusses the following topics: Shortcut considerations. Rowset object declaration. Scope of a Rowset object. Rowset class built-in functions. Rowset class methods. Rowset class propertie…

计算机毕业设计 智慧养老中心管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

golang实现远程控制主机

文章目录 ssh原理使用golang远程下发命令使用golang远程传输文件 ssh原理 说到ssh原理个人觉得解释最全的一张图是这张华为画的 Connection establishment 这一步就是建立tcp连接 version negotiation 这一步是ssh客户端(连接者)和被ssh服务端(连接者)进行协议的交换&#xf…

字符函数和字符串函数(1)

前言 C语言中对字符和字符串的处理很是频繁&#xff0c;但是C语言本身是没有字符串类型的&#xff0c;字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数. 1.求字符串长度 strlen 1.1 strlen size_t strlen ( const char * s…

Windows安装cuda和cudnn教程最新版(2023年9月)

文章目录 cudacudnn cuda 查看电脑的cuda最高驱动版本&#xff08;适用于N卡电脑-Nvidia&#xff09; winR打开命令行&#xff0c;输入nvidia-smi 右上角cuda -version就是目前支持的最高cuda版本&#xff0c;目前是12.2 nvidia官网下载cuda 下载地址&#xff1a;https://d…

华为NFC设置教程(门禁卡/公交卡/校园卡等)

今天把华为NFC设置教程分享给大家 出门带门禁卡、校园卡、银行卡、身份证……东西又多&#xff0c;携带又麻烦&#xff0c;还容易搞丢&#xff0c;有没有一种方法可以把它们都装下&#xff1f;有&#xff01;只要一部手机&#xff0c;出门不带卡包&#xff0c;各种证件&#x…

010_第一代软件开发(二)

第一代软件开发(二) 文章目录 第一代软件开发(二)项目介绍界面布局功能完善快照功能获取可用串口播放按键提示音 关键字&#xff1a; Qt、 Qml、 QSerialPort、 QPixmap、 QSoundEffect 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff…

主打低功耗物联网国产替代,纵行科技ZT1826芯片以速率和灵敏度出圈

在低功耗物联网领域&#xff0c;国产替代的趋势越演越烈。 9月20日&#xff0c;纵行科技在“IOTE 2023深圳物联网通信技术与应用高峰论坛”发表了“自主原创Advanced M-FSK调制技术助力国产替代和泛在物联”的演讲&#xff0c;并推出了ZT1826芯片&#xff0c;以“更低功耗、更…

NetSuite BOM成本查询

这是个23.2的新功能&#xff0c;如题所示是对BOM成本的一个查询工具&#xff0c;是对之前版本那个无用的“Costed Bill of Materials Inquiry”的一次救赎。 其重要的功能是&#xff1a; •基于BOM所使用的版本、工艺路线和成本模板&#xff0c;通过Break Down的方式计算一个装…

超好用的接口自动化框架,lemon-easytest内测版发布,赶紧用起来~

easytest easytest 是一个接口自动化框架。 功能特点&#xff1a; 支持 http 接口测试 支持 json&#xff0c;html,xml 格式的响应断言 支持数据库断言 支持用例标记筛选 支持用例失败重运行 支持多线程 安装 pip install lemon_easytest 快速使用 不需要写任何代码…

整合minio时出现的错误

Action:Correct the classpath of your application so that it contains compatible versions of the classes io.minio.S3Base and okhttp3.RequestBody 这个错误是我在整合minio时报的错&#xff0c;说实话遇到这个错误我还是很头大的&#xff0c;因为之前在springboot项目…

​2:DDD概念大白话

产品代码都给你看了&#xff0c;可别再说不会DDD&#xff08;二&#xff09;&#xff1a;DDD概念大白话 # 这是一个讲解DDD落地的文章系列&#xff0c;作者是《实现领域驱动设计》的译者滕云。本文章系列以一个真实的并已成功上线的软件项目——码如云&#xff08;https://www…

【吴恩达老师《机器学习》】课后习题5之【偏差与方差】

在本练习中&#xff0c;您将实现正则化线性回归&#xff0c;并使用它来研究具有不同偏差-方差特性的模型。 在练习的前半部分&#xff0c;您将实现正则化线性回归&#xff0c;利用水库水位的变化来预测从大坝流出的水量。在后半部分中&#xff0c;您将对调试学习算法进行一些诊…

【C# Programming】值类型、良构类型

值类型 1、值类型 值类型的变量直接包含值。换言之&#xff0c; 变量引用的位置就是值内存中实际存储的位置。 2、引用类型 引用类型的变量存储的是对一个对象实例的引用&#xff08;通常为内存地址)。 复制引用类型的值时&#xff0c;复制的只是引用。这个引用非常小&#xf…