Mock框架moco学习笔记
一、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学习笔记的更多相关文章
- go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])
目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ...
- jfinal框架教程-学习笔记
jfinal框架教程-学习笔记 JFinal 是基于 Java 语言的极速 WEB + ORM 开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restfu ...
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...
- Mina框架的学习笔记——Android客户端的实现
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...
- golang日志框架--logrus学习笔记
golang日志框架--logrus学习笔记 golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数,对于更精细的日志级别.日志文件分割以及日志分发等方面并没有提供 ...
- # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)
目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...
- go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer)
目录 go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer) demo demo server demo client 池 dao service p2c ro ...
- go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用)
目录 go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用) warden direct demo-server gr ...
- go微服务框架kratos学习笔记八 (kratos的依赖注入)
目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...
- go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)
目录 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin) zipkin使用demo 数据持久化 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin ...
随机推荐
- 机器学习-评价指标-AUCROC
The Area Under the Receiver Operating Characteristic (AUC-ROC) curve is a performance metric commonl ...
- 《Web安全基础》02. 信息收集
@ 目录 1:CDN 绕过 1.1:判断是否有 CDN 服务 1.2:常见绕过方法 1.3:相关资源 2:网站架构 3:WAF 4:APP 及其他资产 5:资产监控 本系列侧重方法论,各工具只是实现目 ...
- 论文解读(WDGRL)《Wasserstein Distance Guided Representation Learning for Domain Adaptation》
Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:Wasserstein Distance Guided Representation Learning f ...
- 每日一库:lumberjack -- 日志轮换和管理
在开发应用程序时,记录日志是一项关键的任务,以便在应用程序运行时追踪问题.监视性能和保留审计记录.Go 语言提供了灵活且强大的日志记录功能,可以通过多种方式配置和使用.其中一个常用的日志记录库是 gi ...
- OCI云主机环境如何上传下载文件
OCI云主机的连接是使用密钥而非用户密码连接. 之前使用的非主流的一个SSH工具,正常连接主机都没问题,但需要手工输入用户. 可是在选择SFTP时,始终找不到用户名的设置,导致密钥连接的SFTP始终失 ...
- 3步体验在DAYU200开发板上完成OpenHarmony对接华为云IoT
本文分享自华为云社区<DAYU200+OpenHarmony 3.1.1对接华为云IOT[华为云IoT+鸿蒙]>,作者:DS小龙哥. 一.前言 OpenHarmony 3.1.1 是一个开 ...
- Dubbo3应用开发—Dubbo直连开发相关概念:通信、协议、序列化
Dubbo RPC直连应用的概念 所谓的Dubbo RPC直连应用,指的就是Consumer直接访问Provider,而无需注册中心的接入. Dubbo完成的仅仅是RPC最基本的功能. 从这个角度Du ...
- k8s 自动扩缩容HPA原理及adapter配置详解👑
大家好,我是蓝胖子,都知道,k8s拥有自动扩缩容机制HPA,我们能够通过配置针对不同的扩缩容场景进行自动扩缩容,往往初学者在面对其中繁多配置的时候会学了又忘记,今天我将会以一种不同的视角,结合api ...
- LeetCode 周赛上分之旅 #48 一道简单的树上动态规划问题
️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越 ...
- oj练习题 数字 eval 整数 int ???
s = input()if 'hello world!' == s.casefold(): print("Yes")else: print("No") A+B问 ...