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. Node.js 的事件循环机制

    目录 微任务 事件循环机制 setImmediate.setTimeout/setInterval 和 process.nextTick 执行时机对比 实例分析 参考 1.微任务 在谈论Node的事件 ...

  2. sqli-labs通关----1~10

    最近感觉自己sql注入有点生疏了,想来复习一下,做个记录. 第一关 1.尝试报错我们在1之后加上',根据反馈信息1'后面多了一个'所以我们想办法闭合用 'or 1=1 --+.注意这里#没作用 2.接 ...

  3. Xcode自动注释插件:VVDocumenter-Xcode

    VVDocumenter-Xcode 是由 @onevcat 喵神开发的一个Xcode插件,其作用是在Xcode中输入"///"后自动生成规范的文档注释,的确非常好用而且实用. G ...

  4. 教你如何入手用python实现简单爬虫微信公众号并下载视频

    主要功能 如何简单爬虫微信公众号 获取信息:标题.摘要.封面.文章地址 自动批量下载公众号内的视频 一.获取公众号信息:标题.摘要.封面.文章URL 操作步骤: 1.先自己申请一个公众号 2.登录自己 ...

  5. selenium 执行js代码

    获取一个input输入框的值: JavascriptExecutor js =(JavascriptExecutor) driver; merchatName=js.executeScript(&qu ...

  6. jmeter插件 --PerfMon Metrics Collector监控工具的使用

    PerfMon Metrics Collector 用来监控 被压测服务器的cpu.内存.磁盘.网络等 1.服务端监控程序ServerAgent下载 https://github.com/undera ...

  7. SQLServer系统表使用简介(sysobjects、syscolumns、syscomments等)转载

    sysobjects:记录了数据库中每一个表.视图.约束.存储过程等详细内容的表. 表中常用的字段如下 : 列名 数据类型 描述 name sysname 对象名 id int 对象标识号 xtype ...

  8. golang依赖管理

    目录 使用GOPATH管理依赖 临时GOPATH 依赖查找路径 使用GOVENDER管理依赖 使用GO111MODULE管理依赖 Usage 常用命令列表 不常用命令 使用示例 开启GO111MODU ...

  9. c++使用cin、cout与c中使用scanf、printf进行输入输出的效率问题

    在c++中,我们使用cin和cout进行输入输出会比用scanf和printf更加简洁和方便,但是当程序有大量IO的时候,使用cin和cout进行输入输出会比用scanf和printf更加耗时, 在数 ...

  10. 数据库SQL---数据库系统概论

    1.基本术语 1)信息:指数据加工处理后有用的数据. 2)信息的3种世界: (1)现实世界:存在于人脑之外的客观世界. (2)信息世界:现实世界在人脑中的反映. (3)数据世界:将信息世界中的信息通过 ...