官网,开源(GitHub, 7.4K Star,1.5K Fork)、Java实现、HTTP模拟(Mock)服务,为特定请求提供固定的返回值。官方文档,WireMock Cloud。
可作为单独进程启动,模拟一个WEB服务器,提供一些API访问,并返回特定的返回值。也可作为第三方库在项目中使用。
实战
standalone
打开Maven仓库,找到最新Release版或Beta版下载,如wiremock-standalone-3.13.2.jar,终端执行命令启动HTTP服务器:java -jar wiremock-standalone-3.13.2.jar -port 9998,启动界面

打开浏览器

可见这个wiremock-standalone-3.13.2.jar Fat Jar里内嵌有Jetty服务器。解压缩该Jar文件,也能看到Jetty相关代码包。
另外在Jar文件所在目录下,会自动生成2个文件夹:
__files:用于存放返回数据文件mappings:用于存放映射关系
打开http://localhost:9998/__admin/或更进一步http://localhost:9998/__admin/mappings,查看所有映射(mapping),此时因为没有任何有效JSON文件,请求返回为空:

往mappings目录下添加JSON文件,添加子目录和子目录下的JSON文件:

刷新浏览器,http://localhost:9998/__admin/页面会看到类似如下输出:

对比可知两个URL请求的输出完全一致。分析JSON响应,可知WireMock会自动扫描嵌套子文件夹。
注意:增加、或删除JSON文件,修改JSON内容,都需要重启WireMock服务:杀掉进程,重新执行命令行。
启动命令行时也能指定根目录:java -jar wiremock-standalone-3.13.2.jar -port 9998 --root-dir test,WireMock检测该test目录下是否存在上述两个文件夹,有则加载,无则生成。
JSON文件示例:
json
{
"request": {
"method": "GET",
"urlPath": "/test"
},
"response": {
"status": 200,
"body": "Hello World!",
"headers": {
"Content-Type": "application/json"
}
}
}
Bruno或cURL发起GET请求http://localhost:9998/test,会看到经典的Hello World!输出。

再来看看__files文件夹,添加users-response.json文件,修改映射文件:
json
{
"request": {
"method": "GET",
"urlPath": "/test"
},
"response": {
"status": 200,
"bodyFileName": "users-response.json",
"headers": {
"Content-Type": "application/json"
}
}
}
注意:一定要删除body字段,body和bodyFileName字段共存时,WireMock只认body字段,优先解析body字段。
默认情况下,WireMock对于URL是大小写敏感的。修改为大写开头,即测试http://localhost:9998/Test,报错404

修改映射文件:
json
如果写错JSON文件,会出现类似如下报错:
Exception in thread "main" com.github.tomakehurst.wiremock.standalone.MappingFileException: Error loading file /Users/tssh/Downloads/wiremock/./mappings/permission-mapping/demo1.json:
Unrecognized field "caseInsensitive" (class com.github.tomakehurst.wiremock.matching.RequestPattern), not marked as ignorable
at com.github.tomakehurst.wiremock.standalone.JsonFileMappingsSource.loadMappingsInto(JsonFileMappingsSource.java:126)
at com.github.tomakehurst.wiremock.core.WireMockApp.loadMappingsUsing(WireMockApp.java:288)
at com.github.tomakehurst.wiremock.core.WireMockApp.loadDefaultMappings(WireMockApp.java:282)
at com.github.tomakehurst.wiremock.core.WireMockApp.<init>(WireMockApp.java:143)
at com.github.tomakehurst.wiremock.WireMockServer.<init>(WireMockServer.java:68)
at com.github.tomakehurst.wiremock.standalone.WireMockServerRunner.run(WireMockServerRunner.java:71)
at wiremock.Run.main(Run.java:23)
json
json
json
插件
官方提供IDEA插件,直接在IDEA里搜索WireMock安装,或打开地址下载安装。安装成功后,打开JSON文件,会出现2个按钮。
左侧按钮是启动服务器

点击相当于执行上面的java -jar命令:

右侧按钮是使用模板,

点击后,需安装Handlebars/Mustache插件

拓展:Handlebars是一款JavaScript生态下的模板引擎,兼容Mustache,可将模板编译成JavaScript函数。
Maven
Maven项目添加如下依赖:
xml
<dependency>
<groupId>org.wiremock</groupId>
<artifactId>wiremock</artifactId>
<version>3.13.2</version>
<scope>test</scope>
</dependency>
Gradle
Gradle项目添加如下依赖
groovy
testImplementation "org.wiremock:wiremock:3.13.2"
Docker
基于Docker快速部署:
bash
docker run -it --rm -p 8080:8080 --name wiremock wiremock/wiremock:3.13.2