zoukankan      html  css  js  c++  java
  • Mock Server利器

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


    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>:配置文件路径

    image_1aukc7jbn1rh51p2ma761dd5v4j9.png-52.4kB

    这就在本地启动了一个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>:证书路径

    image_1aukcamtmf2v14d14pi1r5ria6m.png-46.1kB

    这就在本地启动了一个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

    配置文件的工作原理大致如下: 
    image_1aukcdkko1htkpba1hjt14srit213.png-53.4kB

    如何在配置文件添加注释

    json不支持注释,想要添加注释的话,可以在description字段中加入描述 
    image_1aukces4c1bld1ilv120vtc713rk1g.png-21.5kB

    约定请求Body

    image_1aukcg2219uc4a89v2eia169i1t.png-63.5kB

    约定接口的uri

    image_1aukcgr1h1pvg1iqede15mtjtv2a.png-35.2kB

    约定请求参数

    image_1aukcheemo95pmp1q351n0vjq12n.png-40.6kB

    约定请求方法

    image_1aukci164cq717av19nc1cp0b0q34.png-32.7kB

    约定HTTP版本

    image_1aukcin2p1cnoenf1nfe1hn895u3h.png-38.2kB

    约定请求头部

    image_1aukp23qh1io01g611k67l49ie9.png-47.6kB

    约定cookie

    image_1aukp2ppph2215lv4mp165n1begm.png-45.5kB

    约定请求form

    image_1aukp3eip1unv1s971l1s8ke1pr713.png-47.1kB

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

    约定以指定xml作为请求body

    image_1aukp4l8rblj9p712cq13au1nlc1g.png-69.9kB

    用xpath对请求进行匹配

    image_1aukp54ud10dcbhi1a981sii1j1t.png-47.8kB

    约定以指定json作为请求body

    image_1aukp62mg1c1p1ilpa371fg71okd2a.png-118.5kB

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

    image_1aukp6kjk1cgktok1ksl3pl11ra2n.png-50.1kB

    匹配操作

    image_1aukp79rk6stah19u7138o10df34.png-132kB

    设置Response content

    image_1aukpa21f1nt21hrq15iv5111lcc3h.png-71kB

    设置Response 状态码

    image_1aukpam111jae1kj31trj1vqau2d3u.png-50.7kB

    设置Response HTTP版本

    image_1aukpb88b17f119i1oatsdi1pti4b.png-58.3kB

    设置Response 头部

    image_1aukpboqh15l6ib31gvrcjo1dbq4o.png-45.9kB

    设置重定向

    image_1aukpca591qrht381uv31cvt43g55.png-39.9kB

    设置cookie

    image_1aukpcqun1tq911n314fv1o8r12hi5i.png-42.1kB

    挂载文件

    image_1aukpdacf1sq3p241s14qbqdnb5v.png-34.4kB

    template的用法

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

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

    使用举例如下: 
    image_1aukpfh4037cdgjsdoevg10396c.png-114.1kB

    Moco在单元测试中使用

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

    image_1aukpgl0jlqs7fn10ha1e5n1kmu6p.png-156.2kB

    运行在单元测试中的moco server也可以选择加载json配置文件 
    image_1aukph7s4vpdjegi1fkp1jfn76.png-169.7kB

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

    Moco的不足

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

  • 相关阅读:
    oracle 导入数据语句
    移动上去换样式代码
    google suggest 代码例子
    删除一个表的字段的sql语句命令
    将json从前台传到后台注意问题
    eclipse 自动 getter setter 注释
    jsp界面获取地址栏参数
    常见的正则表达式验证
    JSTL 核心标签库
    javascript中的call和apply两个方法的区别
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/7884298.html
Copyright © 2011-2022 走看看