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,就取决于开发者是否只是需要一个简单的模拟服务器。
---------------------
作者:HansChen_
来源:CSDN
原文:https://blog.csdn.net/shensky711/article/details/52770686?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

Mock Server利器 - Moco的更多相关文章

  1. 接口测试 mock server 工具moco学习笔记

    看过乙醇分享的接口测试,自己练习了moco,这里呢,吧一些练习的笔记坐下记录,方便自己查阅. 开源地址https://github.com/dreamhead/moco  ,  到QuickStart ...

  2. 接口测试 mock server 工具moco

    看过乙醇分享的接口测试,自己练习了moco,这里呢,吧一些练习的笔记坐下记录,方便自己查阅. 开源地址https://github.com/dreamhead/moco  ,  到QuickStart ...

  3. Mock Server文章链接

    Mock Server文章链接 2017-06-14 1 Dreamhead (Zheng Ye) Moco可以提供以下服务: HTTP APIs Socket APIs REST API GitHu ...

  4. 基于moco的mock server 简单应用 来玩玩吧

    提起mock大家应该就知道是干嘛用的了,再次再介绍一种简单的方式,基于moco的mock server.步骤很简单: 1. 首先,要下载个moco的jar0_1482402640757_moco-ru ...

  5. Mock Server 入门

    Mock Server介绍 什么是mock ? 我在去年的时候介绍一篇幅 python mock的基本使用,http://www.cnblogs.com/fnng/p/5648247.html 主要是 ...

  6. Mock Server 入门(一)

    Mock Server 使用场景 1.开发过程中依赖一些接口,而这些接口可能有一下情况: 1)接口搭建环境比较困难:例如支付宝的支付接口,需要授权等等准备好才能进行调试 2)接口暂时还未实现时:可以便 ...

  7. mock server搭建及接口测试简单实例

    一.搭建mock server mock工具很多,这里我们选择用简单易操作的moco服务器 使用前必须先安装java,去相关网站下载Standalone Moco Runner 二.使用mock se ...

  8. Mock Server 之 moco-runner 使用指南二

    文章出处http://blog.csdn.net/crisschan/article/details/53335234 moco-runner 安装配置 1. 下载jar https://repo1. ...

  9. Mock Server 之 moco-runner 使用指南一

    文章出处http://ju.outofmemory.cn/entry/96866 用以下命令可以启动moco-runner 服务 java -jar moco-runner-<version&g ...

随机推荐

  1. activity状态保存的bundl对象存放位置的思考

    我们知道,当activity被异常终止时,可以把一些信息保存到bundle对象中,在下次启动时恢复. 那么,这个bundle对象是保存在哪里的呢? 这种状态保存的方法针对的是activity而不是进程 ...

  2. Codeforces 57C (1-n递增方案数,组合数取模,lucas)

    这个题相当于求从1-n的递增方案数,为C(2*n-1,n); 取模要用lucas定理,附上代码: #include<bits/stdc++.h> using namespace std; ...

  3. [转]JQuery 如何选择带有多个class的元素

    比如下面代码需要选择同时带有这几个class的元素,怎么写? 1 <div class="modal fade in"></div> A: 1. 依次过滤 ...

  4. Luogu 1450 [HAOI2008]硬币购物

    优美的dp + 容斥. 首先可以不用考虑数量限制,处理一个完全背包$f_{i}$表示用四种面值的硬币购买的方案数,对于每一个询问,我们考虑容斥. 我们的$f_{s}$其实多包含了$f_{s - c_{ ...

  5. 使用Elasticsearch-jdbc为MySQL数据库建立索引

    elasticsearch-jdbc 环境 Ubuntu 14.04 JDK 1.8.0_66 Elasticsearch 2.3.1 Elasticsearch-jdbc 2.3.1.0 Elast ...

  6. 《网络攻防》 第十二周作业 SQL注入

    SQL注入实践 1.打开seed虚拟机,使用命令sudo service apache2 start启动apache,发现一条提示,意思就是不能可靠地确定域名,如图 即使右下角标着OK,但我还是不放心 ...

  7. Java50道经典习题-程序44 偶数的素数和

    题目:一个偶数总能表示为两个素数之和.分析:一个偶数可能会有不止一对两个素数之和的情况 例如:20=3+17 20=7+13 import java.util.Scanner; public clas ...

  8. 泛型List<T>转存为XML文档

    经常会有这情况,在程序处理结果为泛型List<T>,但为了能把这些集合输出XML文档.Insus.NET就因此问题,演示一个范例.在程序中,创建一个类: List<T>的集合手 ...

  9. CentOS6.5上Zabbix3.0的RPM安装【二】-汉化

    六.汉化 zabbix实际是有中文语言的,我们可以通过修改web端源文件来开启中文语言.首先点击zabbix监控页面右上角管理员头像进入“用户基本资料设置页面“. 选择中文语言. 点击“Update” ...

  10. Codeforces Round #538 (Div. 2)D(区间DP,思维)

    #include<bits/stdc++.h>using namespace std;int a[5007];int dp[5007][5007];int main(){    int n ...