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. 2017蓝桥杯九宫幻方(C++B组)

    题目:九宫幻方    小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行.每一列和每一条对角线的和都是相同的. ...

  2. 聊一聊深拷贝和浅拷贝(JS)

    在 JS 中数据类型分为值类型和引用类型,对于值类型,变量中存放的是具体的值,而对于引用类型,变量中存放的是地址. 对于值类型: const a = 3; let b = a; b = 4; cons ...

  3. 阿里面试官让我实现一个线程安全并且可以设置过期时间的LRU缓存,我蒙了!

    目录 1. LRU 缓存介绍 2. ConcurrentLinkedQueue简单介绍 3. ReadWriteLock简单介绍 4.ScheduledExecutorService 简单介绍 5. ...

  4. 今天探究的CSS属性是box-sizing;

    首先BOX-SIZING属性是CSS3的属性: 语法: box-sizing : content-box || border-box || inherit 取值说明 1.content-box:此值为 ...

  5. 数据挖掘入门系列教程(十)之k-means算法

    简介 这一次我们来讲一下比较轻松简单的数据挖掘的算法--K-Means算法.K-Means算法是一种无监督的聚类算法.什么叫无监督呢?就是对于训练集的数据,在训练的过程中,并没有告诉训练算法某一个数据 ...

  6. css特效sh

    1   opacity=0.5:                                                             透明度 2    选择器   .btn1:ho ...

  7. [PHP] 生成二维码(两种方法)

    方法一:(调用google二维码接口,本人测试网不好,不好用!) <?php //1.封装生成二维码图片的函数(方法) /** *利用google api生成二维码图片 * $content:二 ...

  8. Fiddler抓取抖音视频

    目录 工具 Fiddler配置 手机端配置 工具 Android 或 ios手机均可 Fiddler 下载地址:https://www.telerik.com/fiddler Windows 操作系统 ...

  9. LeetCode 面试题51. 数组中的逆序对

    面试题51. 数组中的逆序对 题目来源:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/ 题目 在数组中的两个数字,如果 ...

  10. 【编程之美】超时重传,滑动窗口,可靠性传输原理C语言实现

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/lihuidashen/p/128003 ...