在前后端分离的开发模式下,后端的接口可能还没开发完成,但是前端开发又要用到,这时可以使用wiremock来"伪造"服务接口提供,这个"伪造"的接口和真正的接口API是一致的,只是真假数据之分,下面介绍下使用过程:
1. 下载WireMock
然后启动( java -jar wiremock-standalone-2.18.0.jar --port 3298 ),如下:
2. 项目中增加wiremock的maven依赖
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock</artifactId>
</dependency>
注意到这里没有写版本号,因为这里用到了spring的io platform,它会自动选择项目每个依赖的兼容性最好的版本,确保依赖之间不会冲突:
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Brussels-SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
3. 代码编写,这里新建一个包(cn.linjk.wiremock)来专门处理"伪造服务",它作为一个客户端,去连接第一步启动的wiremock服务,去配置wiremock服务如何响应客户端的请求
package cn.linjk.wiremock;
import com.github.tomakehurst.wiremock.client.WireMock;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.core.io.ClassPathResource;
import java.io.IOException;
public class MockServer {
public static void main(String[] args) throws IOException {
WireMock.configureFor("127.0.0.1", 3298);
WireMock.removeAllMappings(); // 清空原来配置
mock("/user/1", "getUserByIdResponse.json");
}
private static void mock(String url, String fileName) throws IOException {
ClassPathResource resource = new ClassPathResource("mock/response/" + fileName);
String content = StringUtils.join(FileUtils.readLines(
resource.getFile(), "UTF-8"), "\n");
WireMock.stubFor(
// 收到/user/1请求时的处理
WireMock.get(WireMock.urlEqualTo(url))
.willReturn(
WireMock.aResponse()
// 返回的状态码
.withStatus(200)
// 返回的JSON串
.withBody(content)));
}
}
在src/main/resources目录下添加json响应文件:
然后运行这个MockServer类,发生如下错误:
扫描二维码关注公众号,回复:
2140489 查看本文章
添加缺失的pom依赖:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
再次启动,请求数据如下:
数据一致,因此后面可以使用这种方式去"伪造"服务供前端调用,关于WireMock更高级用法,可以参考其文档。