WireMock 官网 http://wiremock.org
一、开发过程中遇到的问题
在服务端与客户端约了定了接口,但还没有完成开发时,客户端的处理方式:
- 在程序中写模拟数据
- 程序中增加垃圾代码,后期还要删除,可能对代码造成影响
- 模拟异步请求不方便
- 服务端接口开发完成后,需要重新书写网络请求部分的代码
- JS、iOS、Android 多前端需要分别模拟数据,重复工作量
- 使用 Nginx、http-server 等 WebServer
- 只支持 GET 请求
- 无法针对请求进行校验或特定处理
- 自己写简单的程序模拟返回数据
- 开发期间 API 还处于频繁变动时期,持续调整成本较高
以上方法均不方便做单元测试
- 对于需要演示的场景,没有后端业务服务器支撑,无法演示,客户端改造成本高
二、WireMock
模拟 API,进行快速,强大和全面的测试。WireMock 是基于 HTTP 的 API 模拟器。 有些人可能会认为它是服务虚拟化工具或模拟服务器。
当依赖的 API 不存在或不完整时,它可以使您保持高效。 它支持测试真实 API 无法可靠生成的边缘情况和故障模式。 而且因为速度快,它可以将构建时间从几小时减少到几分钟。
(一)运行
1、运行模式
- 独立运行模式
- Web 部署
2、下载及安装
- Maven / Gradle
- 独立运行的 Jar
3、运行
这里只说明独立运行方式
$ java -jar wiremock-standalone-2.21.0.jar
(二)配置及使用
支持的配置方式:
- Java
- 命令行
- REST API
- ==JSON API==
1、基本配置
这里只说 JSON 文件配置方式
两个文件夹:
-
mappings
存放配置文件 -
__files
存放相关的资源文件
JSON 配置:
{
"request": {
"method": "GET",
"url": "/api/mytest"
},
"response": {
"status": 200,
"body": "More content\n"
}
}
指定 Response 的 Header:
{
"request": {
"method": "GET",
"url": "/whatever"
},
"response": {
"status": 200,
"headers": {
"Content-Type": "text/plain",
"Set-Cookie": ["session_id=91837492837", "split_test_group=B"],
"Cache-Control": "no-cache"
}
}
}
2、通过文件指定 Response Body
{
"request": {
"method": "GET",
"url": "/body-file"
},
"response": {
"status": 200,
"bodyFileName": "path/to/myfile.xml"
}
}
注意:
-
bodyFileName
指定的文件路径==必须是相对路径==,即不能以/
开头,默认以__files
为相对路径的起始路径 -
所有文件的编码必须为 ==UTF-8==
3、作为简单的文件服务器使用
所有放在 __files
中的文件,均可以通过以下方式直接访问,无需配置映射:
http://<host>:<port>/your/file/path
4、未映射请求的提供默认响应结果
{
"priority":10,
"request": {
"method": "ANY",
"urlPattern": ".*"
},
"response": {
"status": 404,
"jsonBody": {"status":"Error","message":"Endpoint not found"},
"headers": {
"Content-Type": "application/json"
}
}
}
5、Request 匹配
- URL
- HTTP Method
- Query parameters
- Headers
- Basic authentication (a special case of header matching)
- Cookies
- Request body
- Multipart/form-data
(完)
网友评论