使用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.mzph.cn/news/87157.shtml

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

相关文章

查看吾托帮88.47的docker里的tomcat日志

步骤如下 &#xff08;1&#xff09;ssh &#xff08;2&#xff09;ssh root192.168.88.47 等待输入密码&#xff1a;fytest &#xff08;3&#xff09;pwd #注释&#xff1a;输出/root &#xff08;4&#xff09;docker exec -it wetoband_deploy /bin/bash #注释&#xff1…

基于springboot小区疫情防控系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Python爬虫程序设置代理常见错误代码及解决方法

Python爬虫程序设置代理是爬虫程序中常用的技巧&#xff0c;可以有效地绕过IP限制&#xff0c;提高爬虫程序的稳定性和效率。然而&#xff0c;在设置代理时&#xff0c;常会出现各种错误代码&#xff0c;这些错误代码可能会影响程序的正常运行&#xff0c;甚至导致程序崩溃。本…

12款最火的AI画图软件,助你探索创新设计

ChatGPT火爆出圈&#xff0c;AI画图软件也如雨后春笋般流行起来。各类AI画图的软件工具横空出世&#xff0c;设计师与其焦虑工作会不会被人工智能取代&#xff0c;不如践行“工欲善其事必先利其器”&#xff0c;开拓思路&#xff0c;打开格局&#xff0c;好好地探索下如何利用好…

spring boot +vue 博客系统,开源的资源网站

spring boot vue 博客系统&#xff0c;开源的资源网站&#xff08;Aurora前后端分离博客) 体验地址&#xff1a;http://blog.tlzcf.vip/ 相关技术 前端&#xff1a; 样式来自于&#xff1a;hexo的aurora主题基础框架&#xff1a;vue3(前台) vue2(后台)状态管理&#xff1a;…

一个高效、简洁、轻量的一站式研发管理平台,协作一站式

一、开源项目简介 Codes 是一个 高效、简洁、轻量的一站式研发管理平台。包含需求管理&#xff0c;任务管理&#xff0c;测试管理&#xff0c;缺陷管理&#xff0c;自动化测试&#xff0c;cicd 等功能&#xff1b;Codes 帮助企业加速融合研发、测试、运维一体化进程 常态下,刀…

【EI会议征稿】第三届计算机图形学、人工智能与数据处理国际学术会议 (ICCAID 2023)

第三届计算机图形学、人工智能与数据处理国际学术会议 2023 3rd International Conference on Computer Graphics, Artificial Intelligence and Data Processing (ICCAID 2023) 第三届计算机图形学、人工智能与数据处理国际学术会议&#xff08;ICCAID 2023&#xff09;将于…

npm安装心得(依赖库Python及node-sass依赖环境)

在使用vue的开发环境过程中&#xff0c;总会遇到这样哪样的安装或者打包错误&#xff0c; vue运行或打包常见错误如下&#xff1a; 1. npm install时 node-sass npm ERR command failed &#xff08;可能是node.js的版本和node-sass的版本不符&#xff0c;就是卸掉原来的node.…

公众号迁移个人可以迁移吗?

公众号账号迁移的作用是什么&#xff1f;只能变更主体吗&#xff1f;很多小伙伴想做公众号迁移&#xff0c;但是不知道公众号迁移有什么作用&#xff0c;今天跟大家具体讲解一下。首先公众号迁移最主要的就是修改公众号的主体了&#xff0c;比如我们公众号原来是A公司的&#x…

【国产32位mcu】电动车控制芯片CS32F031C8T6的应用

近年来&#xff0c;随着“新国标”的落地&#xff0c;双轮电动车在智能化、强性能、安全性等方面不断演进&#xff0c;带动了新一轮的换车高峰。电动车控制器作为双轮电动车的核心部件&#xff0c;迎来新的增长。 芯海科技32位MCU CS32F031C8T6&#xff0c;作为电动车控制器的…

React(react18)中组件通信05——redux ➕ react-redux(含数据共享)

React&#xff08;react18&#xff09;中组件通信05——redux ➕ react-redux&#xff08;含数据共享&#xff09; 1. 前言1.1 React中组件通信的其他方式1.2 介绍React-Redux1.2.1 简单介绍React-Redux1.2.2 官网 1.3 安装react-redux 2. 简单改写redux的例子2.1 提供store2.2…

英码科技精彩亮相火爆的IOTE 2023,多面赋能AIoT产业发展!

9月20日至22日&#xff0c;在这金秋飒爽的季节&#xff0c;为期三天的IOTE 2023第二十届国际物联网展深圳站在深圳国际会展中心盛大举行。英码科技精彩亮相本届展会&#xff0c;并在同期举办的AIoT视觉物联产业生态大会发表了主题演讲&#xff0c;与生态伙伴们共同探讨AIoT产业…

opencv实现仿射变换和透射变换

##1&#xff0c; 什么是仿射变换&#xff1f; 代码实现 import numpy as np import cv2 as cv import matplotlib.pyplot as plt#设置字体 from pylab import mpl mpl.rcParams[font.sans-serif] [SimHei]#图像的读取 img cv.imread("lena.png")#仿射变换 row…

python解析曲线数据图方法一则

我们在数据分析工作中&#xff0c;经常遇到没有直接数据的情况&#xff0c;对于曲线图情况&#xff0c;我们需要解析曲线图中的数据。 例如下图&#xff0c;根据文档我们获知横坐标取值范围为&#xff08;0,175&#xff09;&#xff0c;纵坐标取值范围&#xff08;0,156&#…

docker 配置 gpu版pytorch环境--部署缺陷检测--Anomalib

目录 一、docker 配置 gpu版pyhorch环境1、显卡驱动、cuda版本、pytorch cuda版本三者对应2、拉取镜像 二、部署Anomalib1、下载Anomalib2、创建容器并且运行3、安装Anomalib进入项目路径安装依赖测试&#xff1a; 一、docker 配置 gpu版pyhorch环境 1、显卡驱动、cuda版本、p…

计算机视觉与深度学习-经典网络解析-GoogLeNet-[北邮鲁鹏]

这里写目录标题 GoogLeNet参考GoogLeNet模型结构创新点Inception结构&#xff0c;它能保留输入信号中的更多特征信息去掉了AlexNet的前两个全连接层&#xff0c;并采用了平均池化引入了辅助分类器 GoogLeNet GoogLeNet的设计主要特点是引入了Inception模块&#xff0c;这是一种…

oracle客户端的安装(SQL Developer)

参考资料 软件首页&#xff1a;https://www.oracle.com/database/sqldeveloper/ 官方文档&#xff1a;https://docs.oracle.com/en/database/oracle/sql-developer/ 下载地址&#xff1a;https://www.oracle.com/database/sqldeveloper/technologies/download/ 安装指南&#…

GLTF编辑器 解析什么是模型粗糙度

1、什么是模型粗糙度 模型粗糙度&#xff08;roughness&#xff09;通常用于计算机图形学中的PBR&#xff08;Physically Based Rendering&#xff0c;基于物理的渲染&#xff09;模型中。 PBR模型是一种基于物理光学原理和材料属性的渲染方法&#xff0c;能够更加准确地还原物…

全国职业技能大赛云计算--高职组赛题卷④(容器云)

全国职业技能大赛云计算--高职组赛题卷④&#xff08;容器云&#xff09; 第二场次题目&#xff1a;容器云平台部署与运维任务1 Docker CE及私有仓库安装任务&#xff08;5分&#xff09;任务2 基于容器的web应用系统部署任务&#xff08;15分&#xff09;任务3 基于容器的持续…

使用 PyTorch 的计算机视觉简介 (2/6)

一、说明 在本单元中&#xff0c;我们从最简单的图像分类方法开始——一个全连接的神经网络&#xff0c;也称为感知器。我们将回顾一下 PyTorch 中定义神经网络的方式&#xff0c;以及训练算法的工作原理。 二、数据加载的实践 首先&#xff0c;我们使用 pytorchcv 助手来加载…