mock-server 之 mock 接口测试
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
- moco-runner-1.1.0-standalone.jar
- 搭建步骤
- 下载完成后,保存到电脑本地的一个目录,然后在同一目录下新建一个 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 服务端口
- java -jar moco-runner-1.1.0-standalone.jar http -p 6666 -c test.json
- 最后在浏览器地址栏输入: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
- 然后启动 moco 服务的命令是:
java -jar moco-runner-<version>-standalone.jar http -p 12306 -g config.json
mock-server 之 mock 接口测试的更多相关文章
- mock server搭建及接口测试简单实例
一.搭建mock server mock工具很多,这里我们选择用简单易操作的moco服务器 使用前必须先安装java,去相关网站下载Standalone Moco Runner 二.使用mock se ...
- Python接口测试实战5(下) - RESTful、Web Service及Mock Server
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- mock server相关解决方案
前后端分离之后 前后端分离后, 大家从此进入了所谓的并行开发时代. 一旦完成前后端的(边界)分工, 大家就可以各司其职了. 前端在与后端交互时, 要想有效地提高工作效率, 后端的接口文档就是重中之重了 ...
- Mock Server 入门
Mock Server介绍 什么是mock ? 我在去年的时候介绍一篇幅 python mock的基本使用,http://www.cnblogs.com/fnng/p/5648247.html 主要是 ...
- 搭建Mock Server
1.为什么要搭建mock-server? 为了更好的分工合作,让前端能在不依赖后端环境的情况下进行开发,其中一种手段就是为前端开发者提供一个 web 容器,这个本地环境就是 mock-server. ...
- 使用RAP搭建前端Mock Server
转载自:<前后端分离--构建前端Mock Server--windows部署rap>http://www.cnblogs.com/dothin/p/5361883.html mock:模拟 ...
- [转]使用flask实现mock server
什么是mock server: http://www.testclass.net/interface/mock_server 使用flask 实现 mock server : http://www. ...
- 搭建一个低配版的Mock Server
mock翻译过来是模仿的意思,Server是服务器.粗暴点直译就是模仿服务器. 写在前面 通过阅读本文,你将对Mock的使用有一定的了解,对前后端分离的概念有了更深一步的认识,对Koa的使用有一定的了 ...
- 关于mock server
这篇技术博客是在知乎上看到的 知乎js大神张云龙写的 这里贴过来记录下,如果侵权 请告知将及时删除. --------------------------- 为了更好的分工合作,让前端能在不依赖后端环 ...
- Fiddler-009-AutoResponder 简单的 MOCK SERVER 应用实例
在我们日常的测试中经常需要测试特定的响应对应的客户端展示样式是否正确无误,实现测试方法一般有如下三种: 创建新的测试数据(工作量较大) 修改已有测试数据(例如修改对应的状态码,若是最终需要测试的按钮状 ...
随机推荐
- "首字母变大写"组件:<capitalize> —— 快应用组件库H-UI
 <import name="capitalize" src="../Common/ui/h-ui/text/c_text_capitalize"> ...
- 弹幕有点逗比,用 Python 爬下来看看《民国奇探》的弹幕
电视剧<民国奇探>是一部充斥着逗比风的探案剧,剧中主要角色:三土.四爷.白小姐,三土这个角色类似于<名侦探柯南>中的柯南但带有搞笑属性,四爷则类似于毛利小五郎但有大哥范且武功高 ...
- 弱智破解法——用python破解WIFI
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:李嘉图 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...
- G - GCD and LCM 杭电
Given two positive integers G and L, could you tell me how many solutions of (x, y, z) there are, sa ...
- 数据结构与算法--二分搜索(binary search)
前言 之前面试准备秋招,重新翻起了<编程之美>.在第三章节看到了一道关于二分搜索的讨论,觉得有许多细节是自己之前也没怎么特别注意地方,比如二分搜索的初始条件,转化.终止条件之类的. 问题 ...
- XCTF两个PHP代码审计的笔记
题目源码如下,考点是输入的$id和$row['id']的区别 关键在于红框内,可以知道题目的payload是要让$row['id']存在,查询的到数据,并且要让POST的id不能与adog相同.那显而 ...
- 痞子衡嵌入式:简析i.MXRT1170 Cortex-M4 L-MEM ECC功能特点、开启步骤、性能影响
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M4内核的L-MEM ECC功能. 本篇是 <简析i.MXRT1170 Cortex-M ...
- 牛顿迭代法的理解与应用( x 的平方根)
题目来源与LeetCode算法题中的第69题,具体内容如下(点击查看原题): 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只 ...
- SQL Server 之T-SQL基本语句 (3)
继续来用例子总结sql基本语句用法. 在这里在建一个表:课 课程名 上课时间 数学 周一 数学 周二 数学 周三 语文 周一 语文 周二 英语 周一 数据分组:GROUP BY select 课程 ...
- python web的进化历程
对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 阶段1 socket服务端和客户端都自己编写 实现访问8080端口,返回一个'hello wo ...