美文网首页前端成长路前端开发那些事前端
MockServer(API First)-构建独立的本地服务模

MockServer(API First)-构建独立的本地服务模

作者: michael_jia | 来源:发表于2016-08-23 18:25 被阅读2002次

    MockServer 可以帮助前端开发人员快速建立服务端的模拟环境;通过模拟环境,前端可以实施独立、稳定的测试,以尽早发现问题,并且在前后端集成前就解决掉。

    1. 要想模拟环境发挥出最大效用,首先得把 API 设计好,即:API First Strategy(API 优先策略);
    2. 一旦 API 设计完毕,则前后端可以并行开发;
    3. 假如你的 API 数据格式一致的话,比如都是 json,使用 mockserver 那是很方便的;
    4. 作者 James D Bloom
      本文涉及到的三个软件包源码都托管在 Github:mockservermockserver-client-nodemockserver-grunt@ Google +
    安装 node 和 npm

    我们使用 node 和 npm 来安装、使用 mockserver,请首先安装好 node 和 npm;

    安装 mockserver-grunt

    npm install mockserver-grunt --save-dev

    • 安装这个包的时候,jar 包也会自动下载到 node_modules/mockserver-grunt 下;

      mockserver-netty-3.10.4-jar-with-dependencies.jar

    • java 运行这个 jar 包即启动了 mockserver;
    安装 mockserver-client

    npm install mockserver-client --save-dev

    配置 MockServer(start-mockserver.js)
    /* start-mockserver.js */
    var mockserver = require('mockserver-grunt');
    mockserver.start_mockserver({
        serverPort: 2080,
        proxyPort: 2090,
        verbose: true
    });
    
    • 本地 serverPort 端口起一个 模拟 WebServer;
    • 本地 proxyPort 端口起一个代理服务器,这样可以直接透明代理一些 API 请求到远程服务器(因为通常并不需要在本地模拟所有 API 接口);
    启动 MockServer
    • node start-mockserver.js 即可启动 mockserver;

    java -Dfile.encoding=UTF-8 -Dmockserver.logLevel=WARN -jar node_modules/mockserver-grunt/mockserver-netty-3.10.1-jar-with-dependencies.jar -serverPort 2080 -proxyPort 2090

    准备模拟接口数据
    /* 准备模拟接口数据:demo-my-mock-responses.js */
    /* 导入模拟接口数据 の 示例代码:node demo-my-mock-responses.js */
    var mockServer = require('mockserver-client'),
        mockServerClient = mockServer.mockServerClient,
        proxyClient = mockServer.proxyClient;
    
    var local = mockServerClient('localhost', 2080),
        localProxy = proxyClient('localhost', 2090);
    
    local.reset();
    
    local.mockSimpleResponse('/api/demo', {name:'value'}, 203);
    
    local.mockAnyResponse({
      httpRequest: {
        method: 'GET',
        path: '/index.php',
        queryStringParameters: [
          { 'name': 'r', 'values': ['j'] },
          {
            'name': 'username',
            'values': ['michael']
          },
        ],
      },
    
      'httpResponse': {
        'statusCode': 200,
        'body': JSON.stringify({"username": "michael"}),
        'delay': {
          'timeUnit': 'MILLISECONDS',
          'value': 250
        }
      },
      'times': {
        'remainingTimes': 1,
        'unlimited':true
      }
    });
    
    • expectation A:一个 mockSimpleResponse 就是一个 Expectation
    • expectation B:一个 mockAnyResponse 也是一个 Expectation;
    • 从 API 角度看,每个 mockAnyResponse 就对应模拟了一个 API,当然可以使用正则;
    • 熟悉 Nginx 的,可以对照 mockAnyResponse 为一个 Location 的寻址规则;
    导入模拟接口数据

    node demo-my-mock-responses.js

    使用本地模拟环境示例小结
    1. java 运行 mockserver;
    2. node demo-my-mock-responses.js
      node 执行 demo-my-mock-responses.js:
      注意:mock responses js 文件修改后,要重新 node 导入;
    3. curl 访问:curl -v -X GET 'http://localhost:2080/index.php?r=j&username=michael'

    OK!到这里,你已经搞定了本文示例!

    将每个 mockAnyResponse 独立成一个文件便于维护
    • my-mock-responses.js 主文件;
    • expes.mock/a08-r-city-list-forward.js 是一个独立的 mockAnyResponse;
    • 前后端共同设计出 API 接口;
    • 前端人员将每个接口实现为 mockAnyResponse 文件;
    • 前后端开发人员、测试开发人员都会阅读该 js 文件;
    • a08-r-city-list.md 文件继续保留;
    参考
    单独安装 MockServer 的方法

    MockServer 可以不依赖于 node 环境而单独运行,方法如下:

    • 下载 jar 包:mockserver-netty-3.10.4-jar-with-dependencies.jar
      wget http://search.maven.org/remotecontent?filepath=org/mock-server/mockserver-netty/3.10.4/mockserver-netty-3.10.4-jar-with-dependencies.jar
    • java 运行 MockServer;
      java -Dfile.encoding=UTF-8 -Dmockserver.logLevel=WARN -jar mockserver-netty-3.10.1-jar-with-dependencies.jar -serverPort 2080 -proxyPort 2090
    • 测试 MockServer 是否启动成功?
      使用 nc、telnet 等命令测试端口是否连通:nc -z -w 1 localhost 2080
    • 安装 java 运行环境
      如果没有 java,请安装 yum install java;当下 1.8 版本;
    使用 grunt 启动 mockserver 的方法

    mockserver-grunt 是 Grunt 的一个插件(plugin),除了可以使用 node 启动 mockserver 外,还可以通过 grunt 来运行 mockserver;
    如果你使用 gulp 构建前端,当然就没有必要使用 grunt 了;

    npm 包 mockserver-client 和 mockserver-grunt 的 安装日志
    [git@i-rylroi1n wbs]$ npm i
    npm WARN peerDependencies The peer dependency grunt@~0.4 included from mockserver-client will no
    npm WARN peerDependencies longer be automatically installed to fulfill the peerDependency 
    npm WARN peerDependencies in npm 3+. Your application will need to depend on it explicitly.
    npm WARN peerDependencies The peer dependency grunt@~0.4 included from mockserver-grunt will no
    npm WARN peerDependencies longer be automatically installed to fulfill the peerDependency 
    npm WARN peerDependencies in npm 3+. Your application will need to depend on it explicitly.
    npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
    npm WARN deprecated graceful-fs@1.2.3: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.
    npm WARN deprecated minimatch@0.3.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
    grunt@0.4.5 node_modules/grunt
    ├── eventemitter2@0.4.14
    ├── dateformat@1.0.2-1.2.3
    ├── which@1.0.9
    ├── getobject@0.1.0
    ├── async@0.1.22
    ├── colors@0.6.2
    ├── lodash@0.9.2
    ├── rimraf@2.2.8
    ├── hooker@0.2.3
    ├── grunt-legacy-util@0.2.0
    ├── exit@0.1.2
    ├── coffee-script@1.3.3
    ├── iconv-lite@0.2.11
    ├── underscore.string@2.2.1
    ├── nopt@1.0.10 (abbrev@1.0.9)
    ├── minimatch@0.2.14 (sigmund@1.0.1, lru-cache@2.7.3)
    ├── glob@3.1.21 (inherits@1.0.2, graceful-fs@1.2.3)
    ├── grunt-legacy-log@0.1.3 (grunt-legacy-log-utils@0.1.1, lodash@2.4.2, underscore.string@2.3.3)
    ├── js-yaml@2.0.5 (esprima@1.0.4, argparse@0.1.16)
    └── findup-sync@0.1.3 (lodash@2.4.2, glob@3.2.11)
    
    mockserver-client@1.0.10 node_modules/mockserver-client
    └── q@2.0.3 (weak-map@1.0.5, pop-iterate@1.0.1, asap@2.0.4)
    
    mockserver-grunt@1.0.30 node_modules/mockserver-grunt
    ├── q@2.0.3 (weak-map@1.0.5, pop-iterate@1.0.1, asap@2.0.4)
    └── glob@5.0.15 (path-is-absolute@1.0.0, inherits@2.0.1, inflight@1.0.5, once@1.3.3, minimatch@3.0.3)
    

    相关文章

      网友评论

        本文标题:MockServer(API First)-构建独立的本地服务模

        本文链接:https://www.haomeiwen.com/subject/nkmgsttx.html