1、mock 介绍

  • mock 除了用在单元测试过程中,还有一个用途,当前端开发在开发页面的时候,需要服务端提供 API 接口,此时服务端没开发完成,或者说没搭建测试环境,这个时候前端开发会自己 mock 一个 API 服务端,自己给自己提供调用接口的返回数据 mock-server 用途就是开发在开发的过程中,需要依赖一部分的接口,但是对方没有提供或者环境等等情况

2、搭建 moco 环境

  • 工具

    • moco-runner-1.1.0-standalone.jar

      • 下载地址:https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.11.0/moco-runner-0.11.0-standalone.jar
    • jdk1.8  
      • 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  • 搭建步骤
  • 下载完成后,保存到电脑本地的一个目录,然后在同一目录下新建一个 test.json 文件,里面写入如下内容
  • 注意:一定要注意 Json 格式问题    

[
{
"response" :
{
"text" : "Hello World!" #text 在浏览器页面抛出 response 文本内容 "Hello World!"
}
}
]
  • 接下来启动moco服务,在 cmd 窗口进入到 moco-runner-1.1.0-standalone.jar 所在的文件夹目录,输入下面的命令,出现下图结果则代表服务启动成功

    • java -jar moco-runner-1.1.0-standalone.jar http -p 6666 -c test.json

      • -p 指定 Moco 服务端口

  • 最后在浏览器地址栏输入:http://localhost:6666/

    • 注意:谷歌浏览器不支持,请使用火狐或者IE浏览器打开
  • 结果如下

3、moco 进阶操作

  • 在 request 中设置 uri,访问 http://localhost:6666/uri,就可以获取到内容 HelloWorld!
[{
"request": {
"uri": "/test" #在 request 中添加了 uri
},
"response": {
"text": "Hello World!"
}
}]

  • url 带有参数的请求,启动浏览器,并访问 http://localhost:6666/uri?parm=value
[{
"request": {
"uri": "/test",
"queries":{ #定义地址栏拼接的参数
"param":"value"
}
},
"response": {
"text": "Hello World!"
}
}]

  • 返回特定的状态码 status
[{
"request": {
"uri": "/test",
"queries": {
"param": "value"
}
},
"response": {
"status": 222, #定义返回状态码
"text": "Hello World!"
}
}]

  • 返回 json 报文数据
[{
"request": {
"uri": "/test"
},
"response": {
"json": { #定义返回的报文内容
"code": "",
"msg": "success",
"data": {
"userId": "",
"username": "",
"password": "",
"nickName": "Jack"
}
}
}
}]

  • 定义 post 请求方式和 forms 请求参数
[{
"request": {
"headers": {
"Content-Type": "application/x-www-form-urlencoded" # 传参类型为 form 表单
},
"method": "POST",
"forms": { # form 表单传参需要使用 forms 定义参数
"phone": "",
"password": ""
}
},
"response": {
"json": {
"uid": "",
"nickName": "xiaozheng"
}
}
}]

  • 定义 post 请求方式和 json 请求参数
[{
"request": {
"uri": "/test",
"method": "POST", # 定义 post 请求方式
"headers": {
"Content-Type": "application/json" # 传参类型为 json
},
"json": { # json 传参需要用到 json 定义参数
"username": "",
"password": ""
}
},
"response": {
"json": {
"code": "",
"msg": "post success",
"data": {
"userId": "",
"nickName": "Jack"
}
}
}
}]

  • 定义 get 请求方式
[{
"request": {
"uri": "/test",
"method": "get", #定义 get 请求方式
"queries": { #参数采用拼接在地址栏的方式
"username": "",
"password": ""
}
},
"response": {
"json": {
"code": "",
"msg": "post success",
"data": {
"userId": "",
"nickName": "Jack"
}
}
}
}]

4、moco 常见问题

  • 返回报文出现中文乱码问题处理

    • 在 response 中添加设置编码格式为 "Content-Type": "text/json;charset=UTF-8"

"response": {
"json": {
"code": "0000",
"msg": "成功",
"data": {
"status": 0
}
},
"headers": {
"Content-Type": "text/json;charset=UTF-8"
}
}
  • 返回报文出现中文展示不全的问题,如下

    • 解决方法,在启动 moco 服务命令中加入 -Dfile.encoding=UTF-8
java -Dfile.encoding=UTF-8 -jar moco-runner-1.1.0-standalone.jar http -p 8080 -c userLogin.json

 5、配置文件

  • moco 支持在配置文件中引入其他配置文件,这样就可以分服务定义配置文件,便于管理。
  • 例如你有两个不同路径的 API:http://xxx.com/path1/login 和 http://xxx.com/path2/pay (登录和支付接口)。
  • 按照上一小节所讲,我们可以写好 login 和 pay 的两个配置文件,分别设置 request 的 url 为 /path1/login 和 /path2/pay 。如果需要测试的接口很多,则不利于管理,且 path1、path2 这么混乱的分布于不同的配置文件中,对于以后想要更改也很不方便。
  • 正确操作如下:
    • 同样写好 login.json 和 pay.json 两个配置文件,然后写一个配置文件 config.json,如下:
// config.json
# 定义了 context,则在接口 URL 中需要加入 context 值
# http://xxx.com/path1/login
# http://xxx.com/path2/pay
[
{"context":"/path1", "include":"login.json"},
{"context":"/path2", "include":"pay.json"}
]
    • 如果只是想引入多个 json 文件的话,config.json 文件中可以不使用 context 字段,如下
// 不使用 context 字段的 config.json。
# http://xxx.com/login
# http://xxx.com/pay [
{"include":"login.json"},
{"include":"pay.json"}
]  
    • 如果 xxx.json 文件与 moco-runner 工具不在一个目录下,则需要在 config.json 文件中的 include 值中加入路径,如下

#在 include 的值中带入文件路径

[
{"include":"login/login.json"},
{"include":"pay/pay.json"}
]
    • login 和 pay 两个文件没有特殊要求,和之前的写法一样。如下:  
// login.json

[{
"request": {
"uri": "/login",
"method": "POST",
"json": {
"phone": "",
"password": ""
}
},
"response": {
"json": {
"state": "",
"userId": ""
}
}
}]
// pay.json

[{
"request": {
"uri": "/pay",
"method": "POST",
"json": {
"amount": "",
"price": "",
"userId": ""
}
},
"response": {
"json": {
"state": "",
"orderId": ""
}
}
}]
    • 然后启动 moco 服务的命令是:

      • 注意:最后指定的参数是 -g config.json    
java -jar moco-runner-<version>-standalone.jar http -p 12306 -g config.json

mock-server 之 mock 接口测试的更多相关文章

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

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

  2. Python接口测试实战5(下) - RESTful、Web Service及Mock Server

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  3. mock server相关解决方案

    前后端分离之后 前后端分离后, 大家从此进入了所谓的并行开发时代. 一旦完成前后端的(边界)分工, 大家就可以各司其职了. 前端在与后端交互时, 要想有效地提高工作效率, 后端的接口文档就是重中之重了 ...

  4. Mock Server 入门

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

  5. 搭建Mock Server

    1.为什么要搭建mock-server? 为了更好的分工合作,让前端能在不依赖后端环境的情况下进行开发,其中一种手段就是为前端开发者提供一个 web 容器,这个本地环境就是 mock-server. ...

  6. 使用RAP搭建前端Mock Server

    转载自:<前后端分离--构建前端Mock Server--windows部署rap>http://www.cnblogs.com/dothin/p/5361883.html mock:模拟 ...

  7. [转]使用flask实现mock server

    什么是mock server: http://www.testclass.net/interface/mock_server 使用flask 实现  mock server : http://www. ...

  8. 搭建一个低配版的Mock Server

    mock翻译过来是模仿的意思,Server是服务器.粗暴点直译就是模仿服务器. 写在前面 通过阅读本文,你将对Mock的使用有一定的了解,对前后端分离的概念有了更深一步的认识,对Koa的使用有一定的了 ...

  9. 关于mock server

    这篇技术博客是在知乎上看到的 知乎js大神张云龙写的 这里贴过来记录下,如果侵权 请告知将及时删除. --------------------------- 为了更好的分工合作,让前端能在不依赖后端环 ...

  10. Fiddler-009-AutoResponder 简单的 MOCK SERVER 应用实例

    在我们日常的测试中经常需要测试特定的响应对应的客户端展示样式是否正确无误,实现测试方法一般有如下三种: 创建新的测试数据(工作量较大) 修改已有测试数据(例如修改对应的状态码,若是最终需要测试的按钮状 ...

随机推荐

  1. 37.3 net--TcpDemo1 大小写转换

    需求:使用TCP协议发送数据,并将接收到的数据转换成大写返回 启动方式:先打开服务端,再打开客户端 客户端 package day35_net_网络编程.tcp传输; import java.io.I ...

  2. spark模型运行时无法连接摸个excutors异常org.apache.spark.shuffle.FetchFailedException: Failed to connect to xxxx/xx.xx.xx.xx:xxxx

    error:org.apache.spark.shuffle.FetchFailedException: Failed to connect to xxxx/xx.xx.xx.xx:xxxx 定位来定 ...

  3. 奥卡姆剃刀原则在ERP项目的应用

    一向崇信“奥卡姆剃刀原则”,如非必要,绝不新增. 在我所实施的项目中,自定义字段.自定义报表非常少.很极端的一个例子是,曾经有一家工厂,生产打印机的部件,产品百分之百外销. 在项目实施完成,成功上线后 ...

  4. mount --bind绑定命令

    将目录或文件DirFile-1绑定到目录或文件DirFile-2上,所有对DirFile-2的访问就是对DirFile-1的访问 mount --bind [DirFile-1] [DirFile-2 ...

  5. curl 交叉编译 支持http2和openssl

    touch run.sh chmod 755 run.sh mkdir build cd build ../run.sh run.sh #!/bin/bash #cd /build ../config ...

  6. 【python实现卷积神经网络】定义训练和测试过程

    代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...

  7. Java面向对象的总结

    面向对象的程序设计 1.面向对象 核心:以类的方式组织代码,以对象的方式封装数据 比喻:也就是说类是没有数据的,给了数据之后的类就是对象 封装 继承 多态 2.方法 a.一个方法只有一个返回值,只有一 ...

  8. 动态规划_01背包_从Dijikstra和Floyd入手,彻底理解01背包

    dp一直是短板,现在从最基础的地方开始补 给定背包总容量 M ,n个商品选择,分别有价值vi,占量wi,从中取商品放入背包,令.容量和W=Σwi不超过M,令背包中的价值和V=Σvi最大 然后取法有很多 ...

  9. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(八)之Polymorphism

    Polymorphism is the third essential feature of an object-oriented programming language,after data ab ...

  10. SpringMVC视图解析中的 forward: 与 redirect: 前缀

    在 SpringMVC 中,可以指定画面的跳转方式.使用 forward: 前缀实现请求转发跳转,使用 redirect: 前缀实现重定向跳转.有前缀的转发和重定向操作和配置的视图解析器没有关系,视图 ...