文档章节

WireMock-强大的模拟测试工具

code-ortaerc
 code-ortaerc
发布于 11/10 00:37
字数 988
阅读 16
收藏 0

简介

官方是这样介绍的:WireMock是一个基于HTTP的API模拟器,可以模拟你的API,以进行快速,强大和全面测试,它的核心是Web服务器,它可以启动以提供对特定请求的罐装响应(存根),并捕获传入的请求,以便以后进行检查(验证),WireMock的所有功能都可以通过其REST(JSON)接口和Java API进行访问。此外,可以通过JSON文件配置存根。

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之后,我们来编写一个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已经按照我们想要的方式工作了,我们可以自定义很多返回的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请求匹配

网址匹配

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"
    ...
  },
  ...
}

 

 

 

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

code-ortaerc
粉丝 0
博文 18
码字总数 21637
作品 0
广州
私信 提问
HTTP Server Mock 从手工到平台的演变(二)

大家都知道,不管是 Web 系统、还是移动 APP,各自在与内部、外部系统之间进行数据交互时,大多数情况下都是依赖接口。在基于接口约定开发的模式下,依赖接口的产出时间如果延迟,将直接影响...

程序猿拿Q
2018/12/03
327
0
HTTP Server Mock 从手工到平台的演变(二)

大家都知道,不管是 Web 系统、还是移动 APP,各自在与内部、外部系统之间进行数据交互时,大多数情况下都是依赖接口。在基于接口约定开发的模式下,依赖接口的产出时间如果延迟,将直接影响...

程序猿拿Q
2018/11/30
0
0
SpringBoot中文件上传与下载&swagger的使用

SpringBoot中文件上传与下载&swagger的使用 一、文件上传 单元测试: Controller: 二、文件下载 启动项目,在浏览器中访问:localhost:8060/file/1524895173355 三、与前端并行工作 1.使用s...

JS_HCX
2018/04/28
0
0
使用Spring MVC开发RESTful API(续)

使用多线程提高REST服务性能 异步处理REST服务,提高服务器吞吐量 使用Runnable异步处理Rest服务 AsyncController.java 使用DeferredResult异步处理Rest服务 应用1/线程1:接收下单请求,放到...

yysue
2018/09/04
469
0
Windows下mock环境搭建-加速项目Api开发

本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 公司进行技术部拆分,以项目制作为新的开发模式,前端+移动端+后端,于是加速Api开发变得很有必要,准备使用mock加速进程...

liuzxgeek
2016/10/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka实战(五) - 核心API及适用场景全面解析

1 四个核心API ● Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。 ● Consumer API 允许一个应用程序订阅一个或多个topic ,并且对发布给他们的流式数据进行处...

JavaEdge
37分钟前
9
0
实现线程的第三种方式——Callable & Future

Callable Runnable 封装一个异步运行的任务, 可以把它想象成为一个没有参数和返回值的异步方 法。Callable 与 Runnable 类似, 但是有返回值。Callable 接口是一个参数化的类型, 只有一 个...

ytuan996
今天
9
0
OSChina 周六乱弹 —— 不要摁F了!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 : 朴树写的词曲都给人一种莫名的失落感,不过这首歌他自己却没有唱,换成赵传这种高音阶嘶喊的确很好,低沉但却有力,老男人的呐喊...

小小编辑
今天
11
0
Android Binder机制 - interface_cast和asBinder讲解

研究Android底层代码时,尤其是Binder跨进程通信时,经常会发现interface_cast和asBinder,很容易被这两个函数绕晕,下面来讲解一下: interface_cast 下面根据下述ICameraClient例子进行分析...

天王盖地虎626
昨天
13
0
计算机实现原理专题--存储器的实现(二)

计算机实现原理专题--存储器的实现(一)中描述了一种可以记住输入端变化的装置。现需要对其功能进行扩充,我们将上面的开关定义为置位,下面的开关定义为复位,然后需要增加一个保持位,当保...

FAT_mt
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部