官方是这样介绍的:WireMock是一个基于HTTP的API模拟器,能够模拟你的API,以进行快速,强大和全面测试,它的核心是Web服务器,它能够启动以提供对特定请求的罐装响应(存根),并捕获传入的请求,以便之后进行检查(验证),WireMock的全部功能均可以经过其REST(JSON)接口和Java API进行访问。此外,能够经过JSON文件配置存根。前端
<dependency> <groupId>com.github.tomakehurst</groupId> <artifactId>wiremock-jre8</artifactId> <version>2.25.1</version> <scope>test</scope> </dependency>
WireMock服务器能够在其本身的进程中运行,并能够经过Java API,HTTP上的JSON或JSON文件进行配置。一旦你已经下载独立的JAR ,并经过命令运行起来便可:java
java -jar wiremock-standalone-2.25.1.jar
能够在命令行上添加指定的内容,eg:git
--port:设置HTTP端口号,eg:--port 8888github
--https-port:若是指定,则在提供的端口上启用HTTPS。注意:当您指定此参数时,WireMock仍将另外绑定到HTTP端口(默认为8080)。所以,在运行多个WireMock服务器时,您还须要指定--port
参数以免冲突。正则表达式
启动都是这样的:json
启动wiremock以后,咱们来编写一个MockClient客户端来链接wiremock服务器:服务器
/** * 用来链接咱们启动的 WireMock 服务器 * * @Author 林必昭 * @Date 2019/11/5 15:59 */ public class MockClient { public static void main(String[] args) throws IOException { WireMock.configureFor(8888); //指定端口 WireMock.removeAllMappings(); //清空上一次的发布信息 //发送一个GET请求,并指定url为/user/1,返回结果为withBody指定的得json内容 WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/user/1")) .willReturn(WireMock.aResponse().withBody("{\"id\":1,\"username\":\"jacklin\"}"))); } }
运行main函数,并访问 http://localhost:8888/user/1 以及 http://localhost:8888/manage/user/login.do ,观察返回结果,以下:app
如今wiremock已经按照咱们想要的方式工做了,咱们能够自定义不少返回的json格式字符串,使用wiremock模拟返回咱们想要的数据了,下面咱们把它发呢封装成一个mock方法,那么咱们的全部的API均可以使用该方法来模拟请求返回:maven
/** * 用来链接咱们启动的 WireMock 服务器 * * @Author 林必昭 * @Date 2019/11/5 15:59 */ public class MockClient { public static void main(String[] args) throws IOException { WireMock.configureFor(8888); //指定端口 WireMock.removeAllMappings(); //清空上一次的发布信息 mock("/user/1", "test1"); mock("/manage/user/login.do","login"); } private static void mock(String url, String file) throws IOException { ClassPathResource resource = new ClassPathResource("mock/response/" + file + ".txt"); //将内容链接成字符串 String content = StringUtils.join(FileUtils.readLines(resource.getFile(), "UTF-8").toArray(), "\n"); //发送一个GET请求,并指定url为/user/1,返回结果为withBody指定的得json内容 WireMock.stubFor(WireMock.get(WireMock.urlEqualTo(url)) .willReturn(WireMock.aResponse().withBody(content).withStatus(200))); WireMock.stubFor(WireMock.post(WireMock.urlEqualTo(url)).willReturn(WireMock.aResponse().withBody(content).withStatus(200))); } }
咱们在项目classpath路径下建立咱们的txt文件,用来保存咱们的数据,经过这个方法咱们就能够快速模拟出咱们想要的各类请求和指定的返回内内容,这样你可使用这个工具在很短的时间模拟出一整套的服务来,这样前端就能够根据你这套服务去开发:函数
URL能够采用彻底一致或者正则表达式进行匹配,您还能够选择只匹配URL的路径部分仍是匹配路径并进行查询;
路径和查询上相等匹配
Java:
urlEqualsTo("/your/url?and=query")
Response JSON
{ "request": { "url": "/your/url?and=query" ... }, ... }
正则表达式匹配路径和查询
Java:
urlMatching("/your/([a-z]*)\\?and=query")
Response JSON
{ "request": { "urlPattern": "/your/([a-z]*)\\?and=query" ... }, ... }