Mock虚拟接口技术之Moco框架

Moco框架的搭建使用 之前一直听mock,也大致了解mock的作用,但没有具体去了解过如何用工具或框架实现mock,以及也没有考虑过落实mock,因为在实际的工作中,很少会考虑用mock。最近在学java,刚好了解到moco框架是用于mock的,凑巧就实践一下基本的运用吧。Mock技术又叫测试桩、挡板,就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 阅读详情

一、Moco简介

什么是Moco

Moco是一个简单搭建模拟服务器的程序库/工具,是一个简单搭建的stub框架,主要用于测试和集成。Moco主要用于模拟HTTP、HTTPS和Socket协议的接口。

Moco的原理

  • Moco会根据配置启动一个真正的HTTP服务,监听本地的指定端口。当客户端发起的请求满足某个条件时,服务端会回复一个对应的应答。Moco的底层是基于一个叫Netty网络应用框架,而不是依赖于像Servlet这样的重型框架,所以就绕过了复杂的应用服务器。
  • Moco支持API和独立运行两种方式,测试和开发人员在JUnit、JBehave等测试框架中通常使用API的方式,一般情况则使用json脚本的方式。

二、测试中的应用场景

前端测试中的应用:我们在测试前端时,对于某些不易触发的异常场景,可以使用Mock虚拟技术模拟出相应的场景;

接口测试中的应用:我们在做接口测试时,会遇到被测接口需要调用第三方接口的情况,对于需要第三方接口返回特定数据的场景,需要跟第三方厂商沟通和联调测试,这样测试时间会被拉长,效率低。这个时候我们就可以使用Mock虚拟技术模拟第三方接口,设置特定的返回数据;

接口自动化测试中的应用:在自动化测试中,有的接口会调用第三方接口,如果第三方接口不稳定,就会导致测试用例的执行失败,为了增强自动化测试的稳定性,我们可以使用Mock虚拟技术模拟第三方接口。

三、安装及配置

Moco文档:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md

下载地址:https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.11.0/

启动命令

(注:需要java运行环境)

java -jar ./moco-runner-0.11.0-standalone.jar http -p 8888  -c startup.json

-p  #访问接口的端口号
-c  #存放接口信息的json文件

启动成功示例

D:\AutoTest>java -jar ./moco-runner-0.11.0-standalone.jar http -p 8888  -c startup.json
28 六月 2023 23:48:21 [main] INFO  Server is started at 8888
28 六月 2023 23:48:21 [main] INFO  Shutdown port is 65479

四、示例Demo

GET请求

GET请求-不带参数

(注:响应体中中文乱码,可以在响应头中设置Content-Type)

[
  {
    "description": "get请求-不带参数",
    "request": {
      "uri": "/get/demo",
      "method": "get"
    },
    "response": {
      "headers": {
        "Content-Type": "text/html;charset=gbk"     
      },
      "text": "get请求-不带参数"
    }
  }
]
GET请求-带参数
[
  {
    "description": "get请求-带参数",
    "request": {
      "uri": "/get/with/params",
      "method": "get",
      "queries": {
        "name": "tom",
        "age": "10"
      }
    },
    "response": {
      "text": "tom and jerry"
    }
  }
]

POST请求

POST请求-form表单
[
{
    "description": "带参数的form表单类post请求",
    "request": {
      "uri": "/post/form/demo",
      "method": "post",
      "forms": {
        "name": "tom",
        "age": "10"
      }
    },
    "response": {
      "json": {
        "msg": "success",
        "code": "200"
      }
    }
  }
]
POST请求-json
[
    {
    "description": "post请求",
    "request": {
      "uri": "/post/param/demo",
      "method": "post",
      "json": {
        "name": "tom",
        "age": "10"
      }
    },
    "response": {
      "headers": {
        "Content-Type": "text/html;charset=gbk"
      },
      "json": {
        "msg": "success",
        "code": "200"
      }
      }
    }
]
POST请求-带headers
[
{
    "description": "post请求-带headers",
    "request": {
      "uri": "/post/headers/demo",
      "method": "post",
      "headers": {
        "Content-Type": "application/json",
        "token": "slkdfjlsjfdsl"
      },
      "json": {
        "name": "tom",
        "age": "10"
      }
    },
    "response": {
      "json": {
        "msg": "success",
        "code": "200"
      }
    }
  }
]

PUT请求

[
    {
    "description": "put请求",
    "request": {
      "uri": "/put/demo",
      "method": "put",
      "forms": {
        "id": "123",
        "age": "10"
      }
    },
    "response": {
      "json": {
        "msg": "success",
        "code": "200"
      }
    }
  }
]

DELETE请求

[
{
    "description": "delete请求",
    "request": {
      "uri": "/delete/demo/123",
      "method": "delete"
    },
    "response": {
      "json": {
        "msg": "success",
        "code": "200"
      }
    }
  }
]

请求头带Cookie

GET请求-请求头带Cookie
[
  {
    "description": "带cookie的请求",
    "request": {
      "uri": "/get/with/cookies",
      "method": "get",
      "cookies": {
         "login": "true"
      }
    },
    "response": {
      "text": "请求头中含cookie",
      "headers": {
        "Content-Type": "text/html;charset=gbk"
      }
    }
  }
]
POST请求-请求头带Cookie
[
{
    "description": "post请求-请求头带cookie",
    "request": {
      "uri": "/post/with/cookie",
      "method": "post",
      "cookies": {
        "login": "true"
      },
      "json": {
        "name": "tom",
        "age": "10"
      }
    },
    "response": {
      "status": 200,
      "json": {
        "code": "1000",
        "msg": "success!"
      }
    }
  }
]

重定向

[
  {
    "description": "重定向",
    "request": {
      "uri": "/redirect/demo"
    },
    "redirectTo": "/get/demo"
  }
]

moco框架的使用 一、moco框架基本介绍 mock测试:mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。一般可分为模拟调用方和被调用方2种方式。 mock用来模拟接口,这里mock用的是moco框架,moco框架是github上的一个开源项目,可模拟http,https,Socket协议。moco有几种使用方法,这里介绍的是standolone用... 阅读详情

相关推荐

自监督学习之对比学习:MoCo模型超级详解解读+总结

动量对比学习方法做无监督表征学习。使用动量的方式更新编码器,使用队列的方法存储memory bank这个字典,从而获得一个又大又一致的字典。

CV在读 1万+

Moco框架基础操作

在测试过程中,对于某些不容易构造或者不容易获取的对象,可以用moco虚拟来代替,可以方便调试脚本。 moco框架的使用主要包含以下方面: 使用第三方mock平台 自己开发mock服务 使用mock框架搭建mock服务 一、moco框架jar包下载使用 1. 下载jar包 moco运行依赖java环境,需要提前配置jdk,直接搜索moco-runner下载,选择….standlone.jar,下载到本地 下载链接参考:https://repo1.maven.org/maven2/com/gi

weixin_44593330的博客 1485

接口框架第一篇-Moco框架基本介绍

1.什么是mock mock测试就是在测试过程中,用一个虚拟的对象来创建以便测试的测试方法。 2mock场景 (1)对象信息难构建 在测试过程中,需要第三方接口返回特定的数据以符合特定的测试场景 (2)依赖的接口尚未开发完成 在对接口性能压测的时候,需要下游接口及时返回数据,满足上游接口的调用 (3)异常场景 当接口需要测试一些异常数据,正常接口时无法构造的 3.mock优缺点分析 优点:团队可以并行工作 提升测试覆盖度 缺点:非现实场景 建议 使用mock做主流程联调和异常返回测

Aurora的博客 671

模拟服务器响应的测试框架:moco

Moco在动态响应和条件模拟方面的能力是相当强大的。这些高级功能让Moco不仅仅是一个简单的模拟工具,而是一个能够应对复杂测试场景的强大助手。无论是需要根据请求内容动态生成响应,还是要根据不同的条件来模拟服务器的不同行为,Moco都能轻松搞定。通过灵活运用Moco的这些高级特性,你可以构建出几乎任何你想要的测试场景,使得测试工作更加高效和准确。

宋小黑的博客 1789

Java开发中模拟接口工具moco的使用

场景 在开发中需要依赖一些接口,比如需要请求一个返回Json数据的接口,但是返回Json数据的接口要么是没搭建,要么是交互比较复杂。 此时,就可以使用moco来模拟接口返回接口数据,以便开发和测试工作的进行。 moco的Github: https://github.com/dreamhead/moco 注: 博客主页:https://blog.youkuaiyun.com/badao_liuman...

BADAO_LIUMANG_QIZHI的博客 648

HTB Attacking GraphQL Skills Assessment

通过枚举应用,利用GraphQL API,发现sql注入点,然后利用找到flag。

qq_33522010的博客 453

Moco测试知多少?

Mock就是在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来替代它,帮助我们测试这种场景。

人生不怕起点低,就怕没追求 590

西电2023秋季机器学习复习提纲

西电2023秋季机器学习复习提纲,希望对学弟学妹有帮助

weixin_62083045的博客 5654

使用接口mock辅助测试

在工作中遇到了一些场景不方便测试,例如:与第三方合作,未联调时就需要提前介入测试我方的接口;app上有调用到第三方的接口;接口的前置场景的接口不易于执行到。于是,今天学习了如何使用mock,在测试过程中,对于某些不容易构造或者第三方的接口,创建一个虚拟的接口以便测试的方法。 学习了两种方式:第一种是使用easy mock(这种方式适合于服务器端调用): 1、官方地址是https://easy-mock.com/ 首先创建一个项目,然后创建一个接口,填写请求方法,url,接口返回值,在填写url时与实际接口.

weixin_43197674的博客 491

[学习笔记]Esp32 + 4G模块,随身wifi,ppp拨号上网

Esp32S3 + 4G模块制作随身WIFI教程

weixin_45595548的博客 7414

YOLO26涨点改进 | 独家创新,注意力改进篇 | AAAI 2025 | YOLO26引入 DRM 防御优化模块,进行特征优化/特征增强,助力目标检测、图像分类、图像分割有效涨点

本文提出了一种基于DRM防御优化模块改进的YOLO26网络模型,显著提升了目标检测的鲁棒性和特征提取能力。DRM模块通过优化特征提取过程、增强抗噪声能力和补充细节信息,有效提高了模型在复杂场景下的检测精度和定位准确度。该模块可集成于UNet等主干网络,采用Transformer结构实现特征精炼,在对抗攻击环境下仍能保持稳定的融合效果。实验表明,改进后的模型在红外与可见光图像融合任务中表现出色,同时提升了下游任务性能。文章详细介绍了DRM模块的结构、作用机制及实现代码,并提供了两种YOLO26改进方案.

Ai缝合怪、助力小伙伴高效发论文 144

接口测试 丨 Mock功能介绍

各个业务系统都会关联多个三方系统接口调用,在测试过程中第三方业务存在不能及时提供接口调用,这时就需要用到我们的mock服务了。

软件测试技术交流分享 3581

AUTOSAR知识点 之 XCP (二):XCP基础概念

学习XCP的过程中,对XCP的基本概念要做一个全面的认知,因为里面有很多缩写以及难以理解的点,假设对此模模糊糊一知半解,那么对整个协议栈的认知会遇到极大的障碍。XCP的信号流传输图示如下XCP 标准主要分为 5 个部分:这部分提供了对于协议的一个概况介绍,包括 XCP 的功能和基础性内容。这部分内容对协议层进行了详细的规范和说明。

梦想技术家 2769

moco框架的介绍和简单使用

[ { "description":"这是第一个moco例子", "request":{ "uri":"/demo" }, "response":{

gx0904的博客 1588

2023华为od机试C卷【最富裕的小家庭】Java&Go 实现

在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。

MISAYAONE的博客 1903

堆一呼一吸之间:动态扩缩容引发JVM堆内存震荡的伸缩算法、代际传导与容器定容解析

Kubernetes扩容后,新Java实例的GC频率常比老实例高出数倍,堆容量反复伸缩。本文从一次支付系统的GC陡增出发,结合HotSpot源码与JDK 8实测,拆解堆伸缩的记账规则:期望容量以GC后已用量为基数、以Xms为下限,按空闲比例判断扩缩,收缩只在老年代回收后按0%、10%、40%、100%步进;再剖析年轻代随老年代联动、晋升风暴与元空间触发线,对比Parallel、G1、ZGC等收集器及JDK 26的变化,讨论容器分账、HPA共振与原地扩缩容,最后给出分级定容、预热与监控的方案。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 15万+

Java自动化测试三(moco框架使用)

​ mock用来模拟接口的,本次学习mock用的是moco框架,moco框架是github上的一个开源项目,可以模拟一些http,https,Socket协议我们选择选择版本号–>0.12.0/选择moco的jar文件(一般是最大的那个)–>moco-runner-0.12.0-standalone.jar</</</</

FrostyGreatSt的博客 934

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

moco框架小结

一.moco简介在开发过程中,有时候后端的服务还来不及开发,有mock技术前端页面的调试以及接口测试用例的设计进度不用等待后端。在UI自动化测试里,后端返回的数据可能会改变。为了避免这种影响导致的断言失败,可以采用mock技术,UI测试不再受后端测试的影响,后端则采用接口自动化验证数据的正确。Moco 是一个搭建模拟服务器的工具,其支持 API 和独立运行两种方式,前者通常是在 junit 等测试...

wangjie0925的博客 1184

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

轻量级接口模拟工具moco使用

​ mock用来模拟接口的,本次学习mock用的是moco框架,moco框架是github上的一个开源项目,可以模拟一些http,https,Socket协议0.12.0/</</</</

FrostyGreatSt的博客 2597

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MoCo动量对比学习完整指南:从零掌握无监督视觉表征技术

MoCo(Momentum Contrast)是Facebook AI研究院推出的革命性无监督学习框架,它通过动量对比机制在无需人工标注的情况下学习高质量的视觉表征。这项技术让AI模型能够从海量未标注数据中自动提取特征,为计算机视觉领域带来重大突破! ## 🔥 MoCo核心原理揭秘 MoCo的核心思想是通过构建**查询编码器**和**键编码器**的双编码器架构,结合动量更新机制来学习视觉特征

gitblog_00419的博客 879

moco框架基本介绍

第三节:写mock接口,get接口,有参数的接口。直接在json文件后面加接口,加完后是热部署。发现提示有server type没有写。如图,第一个接口是没有参数的,访问。

qq_24371799的博客 328

2023单元测试利器Mockito框架详解(超详细~)

前言,Mockito是当前最流行的单元测试Mock框架。采用Mock框架,我们可以虚拟出一个外部依赖,降低测试组件之间的耦合度,只注重代码的流程与结果,真正地实现测试目的。正文,什么是Mock?Mock的中文译为仿制的,模拟的,虚假的。对于测试框架来说,即构造出一个模拟/虚假的对象,使我们的测试能顺利进行下去。Mock测试就是在测试过程中,对于某些不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者不容易获取比较复

m0_58026506的博客 1万+

Mock工具之Moco使用教程

在开发过程中,经常会使用到一些http网络接口,而这部分功能通常是由第三方开发团队或者是后端同事进行开发的,在我们开发时不能给我们提供服务,这为我们的联调和测试造成了麻烦,这个时候就需要使用到mock测试。 Moco是一个简单搭建模拟服务器的程序库/工具:Moco会根据一些配置,启动一个真正的HTTP服务(会监听本地的某个端口)。当发起请求满足一个条件时,它就给回复一个应答。......

程序员小杨哥的博客 3894
上一篇: OKHttp框架
下一篇: TestNG-自动化测试框架
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值