目录

一、Moco框架基本介绍

1. 什么是Moco

moco是一个简单搭建模拟服务器的程序库/工具,是一个简单单间stub的框架,主要用于测试和集成。

Mock可以提供以下协议和类型的mock服务:

  • HTTP APIs
  • Socket APIs
  • REST API

2. Moco原理简介

  • Moco会根据一些配置启动一个真正的HTTP服务(监听本地的某个端口)。当发起请求满足一个条件时,它就回复一个应答。Moco的底层没有依赖于像Servlet这样的重型框架,而是基于一个叫Netty网络应用框架,这样就绕过了复杂的应用服务器。
  • Moco本身支持API和独立运行两种方式,通过使用API,测试开发人员可以在JUnit、JBehave等测试框架中使用Moco。也可以世界通过Json脚本使用。

3. Moco的配置和运行

java运行环境+moco-runner.0.11.0-standalone.jar

jar包的下载地址:

https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.11.0/

可以下载jar包:

4. Moco启动以及第一个demo

启动命令:

java -jar ./moco-runner-0.11.0-standalone.jar 服务类型 -p 端口号 -c json配置文件

例如:

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

如果要带路径:

java -jar "D:/moco-runner-0.11.0-standalone.jar" http -p 8809 -c "D:\startup.json"

说明:

本地启动了一个http Server,其中监听端口是8809,配置文件是 startup.json。用户可以在本机发起一个请求,如 http://localhost:8809,json不支持注释。description 字段中可以写注释。

二、mock 的启动及第一个demo

1. 创建startup.json文件

[
{
"description": "这是我们的第一个mock例子",
"request": {
"uri": "/demo"
},
"response": {
"text": "Hello world"
}
}
]

2. 启动moco

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

3. 浏览器输入本地网址127.0.0.1:8809/demo



这个是一个不带参数的get方法

注意:修改json文件不用重新部署,服务热部署,会自动重启

三、不带参数的get方法:Method(GET)

[
{
"description": "模拟一个没有参数的get请求",
"request": {
"uri": "/getdemo",
"method": "get"
},
"response": {
"text": "This is a request with no paramerters"
}
}
]

请求结果:

四、带参数的get方法:queries

[
{
"description": "模拟一个有参数的get请求",
"request": {
"uri": "/getdemo",
"method": "get",
"queries": {
"name": "1",
"age": "2"
}
},
"response": {
"text": "This is a GET request with two paramerters"
}
}
]

请求结果:

五、不带参数的post方法:Method(Post)

  • json内容:
[
{
"description": "模拟一个没有参数的post请求",
"request": {
"uri": "/postdemo",
"method": "post"
},
"response": {
"text": "这是一个没参数的post请求",
"headers":{
"Content-Type":"text/html;charset=gbk"
}
}
}
]
  • 启动:
java -jar ./moco-runner-0.11.0-standalone.jar http -p 8899 -c startupPost.json
  • 使用jemeter做接口测试:

    1)添加线程组

    2)添加Sampler-HTTP请求

    3)添加监听器-查看结果树

    4)HTTP请求添加参数



    5)查看结果:



六、带参数的post方法:Forms

  • json内容:
[
{
"description": "模拟一个有参数的post请求",
"request": {
"uri": "/with/params/postdemo",
"method": "post",
"forms": {
"name": "1",
"age": "2"
}
},
"response": {
"text": "这是一个有参数的post请求",
"headers":{
"Content-Type":"text/html;charset=gbk"
}
}
}
]
  • 启动:
java -jar ./moco-runner-0.11.0-standalone.jar http -p 8899 -c startupPost.json
  • 使用jemeter做接口测试:

    1)添加线程组

    2)添加Sampler-HTTP请求和参数



    3)添加监听器-查看结果树



七、Moco框架中如何加入Cookies

1. 请求中带cookies信息的get请求

  • json内容:
[
{
"description":"这是一个request请求中带cookies信息的get请求",
"request":{
"uri":"/get/with/cookies",
"method":"get",
"cookies":{
"login":"true"
}
},
"response":{
"text":"返回这是一个request请求中带cookies信息的get请求"
}
}
]
  • 启动服务:
java -jar ./moco-runner-0.11.0-standalone.jar http -p 8899 -c startupPost.json
  • 使用jmeter做接口测试:

    1)添加线程组

    2)添加Sampler-HTTP请求和参数



    3)添加HTTP cookie管理器:



    4)添加监听器-查看结果树

2. 请求中带cookies的post请求

  • json内容:
[
{
"description":"这是一个带cookies信息的post请求",
"request":{
"uri":"/post/with/cookies",
"method":"post",
"cookies":{
"login":"true"
},
"json":{
"name":"huhansan",
"age":"18"
}
},
"response":{
"status":200,
"json":{
"huhansan":"success",
"status":"1"
},
"headers":{
"Content-Type":"text/html;charset=gbk"
}
}
}
]
  • 使用jmeter做接口测试:

    1)添加线程组

    2)添加Sampler-HTTP请求和参数



    3)添加HTTP cookie管理器:同上

    4)添加监听器-查看结果树





3. response返回中带有cookies信息的get请求

  • json内容:
[
{
"description":"模拟response返回中带有cookies信息的get请求",
"request":{
"uri":"/resopnse/with/cookies",
"method":"get"
},
"response":{
"cookies":{
"login":"true",
"token":"1234567890" },
"json":{
"name":"zhoujielun",
"age":"38"
}
}
}
]
  • 使用jmeter做接口测试:

    1)添加线程组

    2)添加Sampler-HTTP请求和参数



    3)添加监听器-查看结果树



4. 带header信息的post请求

  • json内容:
[
{
"description":"这是一个带header信息的post请求",
"request":{
"uri":"/post/with/headers",
"method":"post",
"headers":{
"content-type":"application/json"
},
"json":{
"name":"huqiqi",
"sex":"women"
}
},
"response":{
"json":{
"huqiqi":"success",
"status":1
}
}
]
  • 使用jmeter做接口测试:

    1)添加线程组

    2)添加Sampler-HTTP请求和参数



    3)jemeter添加HTTP信息头管理器:





    4)添加监听器-查看结果树





八、Moco框架中如何进行重定向

1. 有重定向的接口(redirectTo)

  • json内容:
[
{
"description":"模拟重定向接口",
"request":{
"uri":"/redirectto"
},
"redirectTo":"/redirectedpath"
},
{
"description":"模拟被重定向的接口",
"request":{
"uri":"/redirectedpath"
},
"response":{
"text":"返回重定向结果",
"headers":{
"Content-Type":"text/html;charset=gbk"
}
}
}
]
  • 使用jmeter做接口测试:

    1)添加线程组

    2)添加Sampler-HTTP请求和参数:HTTP请求勾选Follow Redirects(跟随重定向):



    3)添加监听器-查看结果树



九、Moco框架响应

1. 约定以指定json作为响应

[
{
"request":{
"uri":"/responseJson"
},
"response":{
"json":{
"username":"mocor"
}
}
}
]

2. 约定Status:模拟各种状态码以达到我们测试需要的结果

[
{
"request":{
"uri":"/responseStatus"
},
"response":{
"status":200
}
}
]

3. 约定响应Headers

[
{
"request":{
"uri":"/responseHeaders"
},
"response":{
"headers":{
"content-type":"application/json"
}
}
}
]

4. 约定响应Cookies

[
{
"request":{
"uri":"/responseCookies"
},
"response":{
"cookies":{
"username":"chenlei"
}
}
}
]

Mock框架moco学习笔记的更多相关文章

  1. go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])

    目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ...

  2. jfinal框架教程-学习笔记

    jfinal框架教程-学习笔记 JFinal  是基于 Java  语言的极速  WEB  + ORM  开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restfu ...

  3. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

  4. Mina框架的学习笔记——Android客户端的实现

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...

  5. golang日志框架--logrus学习笔记

    golang日志框架--logrus学习笔记 golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数,对于更精细的日志级别.日志文件分割以及日志分发等方面并没有提供 ...

  6. # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)

    目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...

  7. go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer)

    目录 go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer) demo demo server demo client 池 dao service p2c ro ...

  8. go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用)

    目录 go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用) warden direct demo-server gr ...

  9. go微服务框架kratos学习笔记八 (kratos的依赖注入)

    目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...

  10. go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)

    目录 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin) zipkin使用demo 数据持久化 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin ...

随机推荐

  1. CTFshow misc1-10

    小提示:需要从图片上提取flag文字,可以通过截图翻译或者微信发送图片,这两个的ai图像识别挺好用的. misc1: 解压打开就能看见flag,提取出来就行 misc2: 记事本打开,看见 ng字符, ...

  2. 万字长文教你实现华为云IoT+OpenHarmony智能家居开发

    本文分享自华为云社区<华为云IoT+OpenHarmony的智能家居开发>,作者:袁睿. 一.选题说明 1. 选题为基于OpenHarmony的智能家居,应用场景为户用,受益人群为住户. ...

  3. 每日一题:如何判断是否是数组,一个既简单又复杂的问题。(不要再用Object.prototype.toString.call、instance of判断了!!!)

    1.不要使用Object.prototype.toString.call() 正常情况下: const arr = [1,2,3,4,5] const obj = {} console.log(Obj ...

  4. Nacos启动报错:Please set the JAVA_HOME variable in your environment, We need java(x64) jdk8 or later

    可能原因: 1.JDK版本过低(应不低于1.8) 2.未设置jdk环境变量(可能性低) 3.jdk环境变量设置不适配nacos(博主就是这个原因) 解决方案: 1.直接在startup.cmd文件中设 ...

  5. 真·Redis缓存优化—97%的优化率你见过嘛?

    本文通过一封618前的R2M(公司内部缓存组件,可以认为等同于Redis)告警,由浅入深的分析了该告警的直接原因与根本原因,并根据原因提出相应的解决方法,希望能够给大家在排查类似问题时提供相应的思路. ...

  6. ChatGPT — Release Notes

    ChatGPT - Release Notes The latest update for ChatGPT Written by Natalie. Updated yesterday Release ...

  7. fmpeg 多张图片转视频,视频转gif,截取视频,截取视频里的帧

    ffmpeg 多张图片转视频,视频转gif,截取视频,截取视频里的帧 月色下的独轮车 于 2017-06-20 17:32:01 发布 6250 收藏 3文章标签: ffmpeg版权 android学 ...

  8. 18. 从零开始编写一个类nginx工具, 主动式健康检查源码实现

    wmproxy wmproxy将用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,后续将实现websocket代理, 内外网穿透等, 会将实现过程分享出来, 感 ...

  9. C++11 列表初始化都做了什么?

    类的成员变量的初始化细节 首先,来看两个问题: 类的构造函数中,成员变量的列表初始化是如何实现的? 为什么列表初始化效率上优于在构造函数中为成员变量赋值? (后文中,将 "在构造函数中为成员 ...

  10. EFCore 使用FluntApi配置 全局查询筛选器

    我们在类中通常会有一个属性为 IsDel来表示软删除或也称逻辑删除,这个属性会导致我们在进行查询操作时,每一次都要 .where(s=>s.IsDel==false) 非常的麻烦.在使用efCo ...