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 ...
随机推荐
- AgileConfig-1.7.0 发布,支持 SSO 🎉🎉🎉
AgileConfig 已经好久好久没有更新过比较大的功能了.一是 AgileConfig 本身的定位就是比较轻量,不想集成太多的功能.二是比较忙(懒).但是本次升级给大家带来了一个比较有用的功能 S ...
- Kioptrix Level 1
Kioptrix这个系列靶机默认是桥接模式,如果我们kali使用NAT是扫描不到靶机的,通过VM的靶机网络设置也不能更改成功. 解决方式:每次下载好靶机先不导入VM,如果已经导入,需要"移除 ...
- 关于ChatGPT的一些闲扯淡(1)
这篇写的有点迟了,前者子ChatGPT正火的时候,懒病发作一直拖延.今天对ChatGPT做一个简单的讨论,也是把学习的心得和大家分享一下. 首先什么是GPT,英文全称是Generative Pretr ...
- Mybatis plus配置MetaObjectHandler无效
项目环境 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-b ...
- JSTL常用代码总结
1. jstl判空: (1) 须先引人<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix=" ...
- 5-MySQL列定义
1.列定义 说明:在MySQL中,列定义(Column Definition)是用于定义数据库表中每一列的结构的语句.它指定了列的名称.数据类型.长度.约束以及其他属性. 2.主键和自增 主键:PRI ...
- nodejs实现的一个简单粗暴的洗牌算法
据说名字长别人不一定看得到 之前用python,自带shuffle用的还是超爽的: 去年6月份自己动手用nodejs写一个21点扑克游戏的后台时,就需要一个洗牌算法,于是简单粗暴的实现了一个. 贴出来 ...
- Springboot简单功能示例-2 KEY初始化功能和全局错误处理
springboot-sample 介绍 springboot简单示例 跳转到发行版 查看发行版说明 软件架构(当前发行版使用) springboot hutool-all 非常好的常用java工具库 ...
- Python中的可迭代对象和迭代器
1.可迭代对象 1.1.可迭代对象概念 可迭代对象,最直观的感觉就是可以使用for来循环迭代每一个元素.例如Python内置的类型:str.list.tuple.dict等类型的对象,都是可迭代对象. ...
- Arduino – Turn LED ON and OFF With Button
In this Arduino tutorial I will show you how to turn an LED on and off with a push button. In fact, ...