微服务下的Mock技术-WireMock

引言
微服务架构下,进行 Restful API 的接口开发和测试工作中,特别是在诸如前后端分离、多个不同系统对接的场景下,对接口进行 Mock 是接口调测的必要手段。
本文就向大家介绍一个非常便于使用同时也非常强大的 Mock 工具:WireMock。
WireMock 简介
WireMock是一个开源的测试工具,支持HTTP响应存根、请求验证、代理/拦截、记录和回放。最直接的用法:
为Web/移动应用构建Mock Service
快速创建Web API原型
模拟Web Service中错误返回
录制HTTP请求和回放
生成 Mock API
生成mock api有两种方式:一种是新建mapping文件,另一种是通过WireMock的api。其中第一种可以永久保存下来,第二种是暂时生成API,待下次build container后,会被清除。
下面将对这两种方式进行详细介绍。
方式一:
一个 Mock 的 API 对应一个 json 文件,该文件放在mapping/目录下。
示例文件如下:
{
"request": {
"url": "/QueryPWIDByLoginname",
"method": "POST",
"bodyPatterns": [
{
"equalToJson": "{ \"loginName\":\"17317920860\"}",
"ignoreArrayOrder": true,
"ignoreExtraElements": true
}
]
},
"response": {
"status": 200,
"body": "{\"code\":\"0\",\"data\":{\"AccountID\":\"\",\"LoginNameType\":\"2\",\"LoginStatus\":\"1\",\"PWID\":\"300111000156276629\",\"PWIDType\":\"wanda\",\"Status\":\"1\",\"SysFrom\":\"wandacloud\"},\"msg\":\"success\"}",
"headers": {
"Content-Type": "application/json; charset=utf-8",
"Date": "Fri, 18 Aug 2017 07:05:05 GMT"
}
}
}
mapping 文件可以手动写,也可以通过 WireMock 的 record 功能生成。
方式二:
使用record 功能生成mapping。
WireMock Server提供了record UI, 访问地址:
http://10.214.169.111:31703/__admin/recorder/
下面以登录注册模块QueryPWIDByLoginname功能为例:
打开record UI;
需要mock的URL填入:http://10.214.169.111:30303 ;
点击 Record按钮;
之后向 http://10.214.169.111:30303 的发起请求,
可以用http://10.214.169.111:31703来代理
示例演示
访问:
curl -X POST "http://10.214.169.111:31703/QueryPWIDByLoginname" -H "accept: application/vnd.response+json" -H "content-type: application/json" -d "{ \"loginName\": \"17317920860\"}"
返回:
{
"code":"0",
"data":
{
"AccountID":"",
"LoginNameType":"2",
"LoginStatus":"1",
"PWID":"300111000156276629",
"PWIDType":"wanda",
"Status":"1",
"SysFrom":"wandacloud"
},
"msg":"success"
}
点击Stop按钮,结果如下:

WireMock 项目构建
代码架构:



启动:

访问:
访问地址:http://ip:port//api/


TestOps 本周课程:
|
时间 |
课题 |
周一 |
21:00 腾讯课堂 |
《敏捷测试从零开始》 |
周六 |
20:00 腾讯课堂 |
《测试开发从零开始》 java篇 |
微信号 : TestOps
知乎:@TestOps云层