转载请标明出处:http://blog.csdn.net/shensky711/article/details/52770686 
本文出自: 【HansChen的博客】

  • Moco介绍
  • Moco独立运行所需环境
  • 如何运行Moco
    • 启动http服务
    • 启动https服务
  • Moco HTTPs API配置
    • 如何在配置文件添加注释
    • 约定请求Body
    • 约定接口的uri
    • 约定请求参数
    • 约定请求方法
    • 约定HTTP版本
    • 约定请求头部
    • 约定cookie
    • 约定请求form
    • 约定以指定xml作为请求body
    • 用xpath对请求进行匹配
    • 约定以指定json作为请求body
    • 用正则表达式对请求进行匹配
    • 匹配操作
    • 设置Response content
    • 设置Response 状态码
    • 设置Response HTTP版本
    • 设置Response 头部
    • 设置重定向
    • 设置cookie
    • 挂载文件
  • template的用法
  • Moco在单元测试中使用
  • Moco的不足

Moco介绍

在开发过程中,经常会使用到一些http网络接口,而这部分功能通常是由第三方开发团队或者是后端同事进行开发的,在我们开发时不能给我们提供服务,更有甚者,要集成的服务在开发时还不存在。这为我们的联调和测试造成了麻烦,常见的解决方案是搭建一个web server。

为什么要开发Moco这个框架?

具体到模拟服务上,处理的手法也是各种各样,因为服务以HTTP集成居多,无论是Web Service,还是REST,所以,一种典型的做法是,开发一个模拟服务,打成WAR包,部署到一个应用服务器上。而我们知道,一旦牵扯到应用服务器部署,就是非常耗时的,部署的时间量级通常是分钟级的。而且,模拟服务器通常不是一次性的工作,我们需要在开发过程中,反复调整,这就进一步增加了维护一个模拟服务器的成本。有的应用服务器是非常消耗资源的,要用专门的机器来部署它。更进一步,如果机器资源有限,团队就只能共享一台机器,这样,即便我为测试自己的部分做一个小的改动,很有可能因为得不到机器的使用权,而要等上几天时间

Moco就是针对这样一个特定的场景而生的。Moco是一个简单搭建模拟服务器的程序库/工具,这个基于 Java 开发的开源项目已经在 Github 上获得了不少的关注。该项目的简介是这样描述自己的:Moco 是一个简单搭建 stub 的框架,主要用于测试和集成。

开发团队只要根据自己的需要进行相应的配置,就会很方便得到一个模拟服务器。而且,由于 Moco 本身的灵活性,其用途已经不再局限于最初的集成测试,比如,Moco 可以用于移动开发,模拟尚未开发的服务;Moco 还可以用于前端开发,模拟一个完整的 Web 服务器等等。

Moco本身支持API和独立运行两种方式。通过使用API,开发人员可以在JUnit、JBehave等测试测试框架里使用Moco,极大程度地降低了集成点测试的复杂度

Moco可以提供以下服务:

  • HTTP APIs
  • Socket APIs
  • REST API

Moco原理简介:Moco会根据一些配置,启动一个真正的HTTP服务(会监听本地的某个端口)。当发起请求满足一个条件时,它就给回复一个应答。Moco的底层没有依赖于像Servlet这样的重型框架,而是基于一个叫Netty网络应用框架直接编写的,这样一来,绕过了复杂的应用服务器,所以,它的速度是极快的

Moco已经在github上开源,可点击连接:https://github.com/dreamhead/moco

Moco独立运行所需环境

Moco独立运行时所需准备的有:

  • Java运行环境
  • moco-runner-0.11.0-standalone.jar

如何运行Moco

启动http服务

Moco的运行非常简单,只需要一行命令即可 
如在命令行中运行:java -jar <path-to-moco-runner> http -p <monitor-port> -c < configuration -file>

  • <path-to-moco-runner>:moco-runner-0.11.0-standalone.jar包的路径
  • <monitor-port>:http服务监听的端口
  • <configuration -file>:配置文件路径

这就在本地启动了一个http server,其中监听端口是12345,配置文件是MocoApi.json。只要在本机发起一个请求,如:http://localhost:12345,该请求就会被这个web server handle

如果别的机子想访问这个服务,只要把localhost替换成本机IP即可

启动https服务

启动https服务,需要先生成证书,并用如下命令启动服务:地方多发呆发地方的地方的地方的发呆发:java -jar <path-to-moco-runner> https -p <monitor-port> -c < configuration -file> --https <path-to-cert.jks > --cert mocohttps --keystore mocohttps

  • <path-to-moco-runner>:moco-runner-0.11.0-standalone.jar包的路径
  • <monitor-port>:http服务监听的端口
  • <configuration -file>:配置文件路径
  • <path-to-cert.jks>:证书路径

这就在本地启动了一个http server,其中监听端口是12346,配置文件是MocoApi.json,证书文件是test.cer

Moco HTTP(s) API配置

启动服务之后,必然会根据需求stub出各种各样接口反馈,我们会把这个配置放在一个json文件中,启动Moco的时候,需要指定使用的配置文件路径,这样配置就可以生效了。Moco服务可以检测到配置文件的变更,假如你修改了配置文件,不需要重新启动Moco,服务照样可以生效。更详细的配置介绍请查看:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md

配置文件的工作原理大致如下: 

如何在配置文件添加注释

json不支持注释,想要添加注释的话,可以在description字段中加入描述 

约定请求Body

约定接口的uri

约定请求参数

约定请求方法

约定HTTP版本

约定请求头部

约定cookie

约定请求form

表单可以添加多项,多项的时候,必须全部匹配,接口才算匹配成功

约定以指定xml作为请求body

用xpath对请求进行匹配

约定以指定json作为请求body

用正则表达式对请求进行匹配

匹配操作

设置Response content

设置Response 状态码

设置Response HTTP版本

设置Response 头部

设置重定向

设置cookie

挂载文件

template的用法

Moco内置了一些变量,在response中可以使用这些变量,让反馈更加智能,以下列举了常用的变量

  • req.version
  • req.version
  • req.method
  • req.content
  • req.headers
  • req.queries
  • req.forms
  • req.cookies

使用举例如下: 

Moco在单元测试中使用

Moco除了可以单独运行外,还可以在单元测试中运行,测试过程中,Moco会启动一个web server来处理我们的请求

运行在单元测试中的moco server也可以选择加载json配置文件 

通过stub后台,便可对http请求进行测试了

Moco的不足

Moco的使用很简单,配置也很方便,目前更是提供了http、rest、socket服务。但是也仅仅是能stub出接口,模拟出简单的场景。如果接收到请求后需要做一些处理,如需查询数据库、进行运算、或者一些复杂的操作,就无能为力了。所以是否选用Moco,就取决于开发者是否只是需要一个简单的模拟服务器。

Mock Server利器 - Moco相关推荐

  1. 接口自动化测试:mock server之Moco工具

    什么是mock server mock:英文可以翻译为模仿的,mock server是我们用来解除依赖(耦合),假装实现的技术,比如说,前端需要使用某些api进行调试,但是服务端并没有开发完成这些ap ...

  2. 如何用Serverless搭建Mock Server?

    引言 (一)什么是Serverless 无服务器Serverless是一种云原生开发模型,可使开发人员专注构建和运行应用,而无需管理服务器.云函数(Serverless Cloud Function, ...

  3. Mock神器之Moco使用操作

    MockServer之moco-runner MockServer mock是什么 mock 使用场景 Mock Server框架 moco moco框架介绍及运行 配置https服务 MockSer ...

  4. 走进Java接口测试之简单快速的Mock Server Moco

    文章目录 一.引言 二.简介 三.原理 四.使用 1.约定请求 URI 2.约定请求 Queries 3.约定请求 Get 方法 4.约定请求 Post 方法 5.约定请求 Headers 6.约定请 ...

  5. 构建前端Mock Server的利器/Json-Server

    痛点 项目中前端和后端通常是并行开发,为了减少等待后端接口开发的时间,我们经常需要在本地模拟后端接口用来测试前端效果.这种做法称之为构建前端Mock.平日里我接触的前端Mock方法大致可以分为以下两种 ...

  6. 1分钟搭建极简mock server

    摘自博客园:https://www.cnblogs.com/mikasama/p/9838480.html 1.无聊的背景.起源: 如今的业务系统越来越复杂庞大,各个功能直接的调用也是多如牛毛,但如果 ...

  7. Mock工具之Moco使用教程

    目录 一.什么是Moco 二.安装&配置 三.接口配置&测试 3.1 第一个简单的请求: 3.2 Get请求: 3.3 Post请求: 3.4 返回值为Json格式的请求: 3.5 带 ...

  8. Mock技术之Moco方法

    目录 一.基本介绍 二.基本使用 三.常见疑问 一.基本介绍 Moco是后端 Mock Server中常用的一种方法,主要特点: Moco 本身支持 API 和独立运行两种方式.通过 API ,开发人 ...

  9. 如何优雅的使用Mock Server

    事出有因 昨天跟同事讨论我们在用的rap2(一个集接口编写和mock server的开源项目)和刚上线了一个easy-mock的server,到底哪个好用. 我们主要讨论的点有个两个: 接口的一致性. ...

最新文章

  1. SQLServer查看存储过程的方法
  2. java pem 私钥_将PEM导入Java密钥库
  3. java和c 进行des_c语言的des加密,怎么用java解密
  4. 转 在b/s开发中经常用到的javaScript技术
  5. 《软件需求模式》阅读笔记04
  6. 操作系统回忆录:进程、线程、资源调度
  7. vue下拉框值改变_vue select下拉框绑定值不跟着变问题
  8. Hystrix熔断原理
  9. 深入剖析C++中的string类
  10. 蓝桥杯历届试题----分糖果(模拟)
  11. Android Weekly Notes Issue #230
  12. onloadsuccess: function获取不到表格数据_R语言输格式技巧系列(二),再精细一点,定制包含亚组的表格...
  13. Spring之@Configuration配置解析
  14. js事件流 事件捕获 及时间冒泡详解
  15. 欧姆龙plc学习笔记(六)(从cx-one上传程序到欧姆龙plc)
  16. 基于STM32的小游戏——谷歌小恐龙(Chrome Dino Game)
  17. 【Redis】Redis配置文件详解
  18. TSX常见简单用法(入门) Vue3+Vite
  19. Lattice开发工具 diamond总结
  20. 修改bash中PS1命令提示符的颜色

热门文章

  1. 判断mac地址单播还是组播(shell脚本)
  2. JS 数组常用函数(数组合并、数组转字符串、顺序反转、范围选择、排序、插入数据、删除数据)
  3. 初识联邦学习(Federated learning)
  4. N - Dragon Balls(并查集+深度的意义
  5. redis启动.停止.重启
  6. 滴水穿石-07Java开发中常见的错误
  7. FirstDjangoWebApp-1
  8. Linux Kernel File IO Syscall Kernel-Source-Code Analysis(undone)
  9. 温习下C语言一些函数
  10. JavaScript高级程序设计读书笔记(一)