WireMock-强大的模拟测试工具-LMLPHP

简介

Maven

<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 -jar wiremock-standalone-2.25.1.jar

命令行选项

可以在命令行上添加指定的内容,eg:

--port:设置HTTP端口号,eg:--port 8888

--https-port:如果指定,则在提供的端口上启用HTTPS。注意:当您指定此参数时,WireMock仍将另外绑定到HTTP端口(默认为8080)。因此,在运行多个WireMock服务器时,您还需要指定--port参数以避免冲突。

启动都是这样的:

WireMock-强大的模拟测试工具-LMLPHP

启动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 ,观察返回结果,如下:

WireMock-强大的模拟测试工具-LMLPHP

WireMock-强大的模拟测试工具-LMLPHP

现在wiremock已经按照我们想要的方式工作了,我们可以自定义很多返回的json格式字符串,使用wiremock模拟返回我们想要的数据了,下面我们把它发呢封装成一个mock方法,那么我们的所有的API都可以使用该方法来模拟请求返回:

/**
 * 用来连接我们启动的 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文件,用来保存我们的数据,通过这个方法我们就可以快速模拟出我们想要的各种请求和指定的返回内内容,这样你可以使用这个工具在很短的时间模拟出一整套的服务来,这样前端就可以根据你这套服务去开发:

WireMock-强大的模拟测试工具-LMLPHP

WireMock请求匹配

网址匹配

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"
    ...
  },
  ...
}
11-10 04:58