WireMock 介绍

WireMock 是一个 Http 模拟服务,其核心是 web 服务WireMock 可以为特定的请求(stubbing)提供固定的响应,并捕获传入的请求,以便后面校验(验证)
WireMock 可以作为第三方库在项目中使用(一般用于集成测试),也可以作为单独的进程启动(singleton),该篇文章首先介绍 singleton 的使用方式

搭建 WireMock 服务

在本地搭建 WireMock 服务,首先需要到 WireMock release page 下载最新的 jar,然后通过 java -jar 启动 WireMock 服务

$ java -jar wiremock-standalone-2.27.2.jar

也可以指定一些启动参数,比如 --port 指定服务的启动端口,更多的参数可以参考 http://wiremock.org/docs/running-standalone/

WireMock 使用

启动 WireMock 服务的时候,WireMock 默认会在当前路径下创建两个文件夹 mappings__files,用于存放映射配置与服务文件

stubbing 注册

既然是模拟服务,那么肯定是要模拟一些请求响应的。可以通过 POST 调用 http://<host>:<port>/__admin/mappings 接口,向 WireMock 服务注册一个 stubbing(存根),request body 如下:

{"request": {"method": "GET","url": "/some/thing"},"response": {"status": 200,"jsonBody": {"name": "huangxy","age": 12},"headers": {"Content-Type": "application/json"}}
}

表示向 WireMock 服务注册一个 stubbing,当 GET 方法调用服务的 /some/thing 接口时,服务返回 200,响应体内容为 {"name":"huangxy","age":12},响应头为 Content-Type: application/json,证明 stubbing 注册成功

$ curl http://localhost:8080/some/thing
{"name":"huangxy","age":12}

除了 GET 方法,WireMock 还支持 POST PUT DELETE HEAD OPTIONS TRACE 等常见请求方式,甚至可以使用 ANY 支持所有的请求方式

通过接口调用注册 stubbing 的方式,只是把 stubbing 存放到内存中,服务重启之后 stubbing 就会被清除掉。想要持久化 stubbing 就要用到 mappings 文件夹,WireMock 在启动的时候会扫描 mappings 目录下的所有 .json 文件,然后将文件中的映射信息注册到服务中

比如,我们在 mappings 文件夹下创建 hello.json 文件,文件内容如下:

{"request": {"method": "ANY","url": "/hello"},"response": {"status": 200,"body": "Hello WireMock!","headers": {"Content-Type": "text/plain"}}
}

然后使用 curl 访问 /hello 接口

$ curl http://localhost:8080/hello
Hello WireMock!

可以看到,即使我们没有调用 __admin/mappings 接口注册 /hello 接口,服务也能正确的返回预期结果,证明服务在启动的时候确实读取了 mappings 文件夹下的内容

文件服务(file serving)

当使用 GET 请求 WireMock 的时候,服务首先会寻找匹配的 stubbing,对匹配到的请求进行响应,如果匹配不到对应的请求,WireMock 会去 __files 文件夹下寻找是否有匹配的资源,有的话将匹配到的资源返回给调用者
我们在 __files 文件夹下创建一个 index.html 文件,文件内容如下:

Hello WireMock!

重启 WireMock,访问 /index 接口,WireMock 返回 index.html 文件内容 - Hello WireMock!,证明服务在匹配不到 stubbing 的时候,确实会读取 __files 目录下的资源,将文件内容返回

请求校验

WireMock 会将运行过程中收到的所有请求记录到内存中,这样做就可以验证是否收到了某些请求,同时能获取请求的详细信息
可以通过 WireMock/__admin/requests/count 端点获取请求被调用的次数,比如我们注册了一个 /helloGET 请求的 stubbing

{"request": {"method": "GET","url": "/hello"},"response": {"status": 200,"body": "hello wiremock"}
}

接着请求两次 /hello,然后 GET 调用 /__admin/request/count 端口,获取 /hello 被调用的次数,请求体内容如下

{"method": "POST","url": "/hello"
}

调用成功,服务返回 /hello 被调用的次数

{"count": 2,"requestJournalDisabled": false
}

总结

本文只介绍了 WireMock 的简单使用,WireMock 还有更多强大的功能,如对正则表达式的支持,返回特定的状态码(4xx,5xx)等,想要深入了解的话,可以到WireMock官网了解更多用法

WireMock 使用相关推荐

  1. wireMock快速伪造restful服务

    wireMock快速伪造restful服务 官网地址:http://wiremock.org/ Jar下载:http://repo1.maven.org/maven2/com/github/tomak ...

  2. 解决wiremock中velocity脚本(.vm)中文编码乱码问题

    WireMock 是一个轻量级的服务器,可以快速的实现接口服务和部署.在前端开发中,如果服务接口未实现,可以使用这个工具来模拟接口.关于wiremock的使用网上又不少文章了,可以自行搜索,有时间我会 ...

  3. wiremock 使用_使用WireMock进行更好的集成测试

    wiremock 使用 无论您是遵循传统的测试金字塔还是采用诸如" 测试蜂窝"这样的较新方法,都应该在开发过程中的某个时候开始编写集成测试. 您可以编写多种类型的集成测试. 从持久 ...

  4. 使用WireMock进行更好的集成测试

    无论您是遵循传统的测试金字塔还是采用诸如" 测试蜂窝"这样的较新方法,都应该在开发过程中的某个时候开始编写集成测试. 您可以编写不同类型的集成测试. 从持久性测试开始,您可以检查组 ...

  5. 将Wiremock集成到Spring Boot Java Web应用程序中以模拟外部依赖关系

    介绍 WireMock是用于基于HTTP的API的模拟服务器. 有些人可能会将其视为服务虚拟化工具或模拟服务器. 它使您能够存根所需的API或其他外部依赖项,以加快本地开发速度. 它支持测试真实API ...

  6. WireMock.NET如何帮助进行.NET Core应用程序的集成测试

    目录 介绍 背景 使用代码 兴趣点 从 GitHub下载完整的源代码 介绍 如果您是执行TDD的ASP.NET Core开发人员,您可能会遇到一些问题.您的测试不涵盖您的Program类和Startu ...

  7. mockwebserver java_在Java中使用WireMock和SOAP Web服务

    我是WireMock的创造者. 我最近使用WireMock在客户端项目上模拟了SOAP接口的集合,所以我可以证明它是可能的.至于它是否比SOAP UI更好或更差,我会说有一些明确的好处,但有一些权衡. ...

  8. API 测试利器 WireMock

    之前写了一篇介绍 HttpClient 的两种重试机制 的文章, 但是否真的会按照预期进行重试我们不得而知. 别人提供给我们的 API 往往都是正常的,很多错误并不能稳定重现,这也造成了我们无法进行全 ...

  9. 使用WireMock快速伪造RESTful服务

    前后端分离的开发模式已经越来越流行,但是前后端的开发进度并不能完全保持一致,当前端需要调用后端尚未开发的RESTful接口时不得不等待后端开发完毕,这将影响并行开发的效率.http://wiremoc ...

  10. Wiremock的使用

    简介: WireMock是一个基于http api开源的测试工具,可以用于快速构建模拟的http响应 (官方网址:http://wiremock.org/) 应用(Mock Service): 1.下 ...

最新文章

  1. R语言构建xgboost模型:自定义损失函数(目标函数、loss function、object function)、评估函数(evaluation function)
  2. 我从哆啦A梦的口袋里,掏出一辆充气电动车
  3. mysql不支持addbatch_【MySql】Java 批量插入数据库addBatch
  4. PHP设置块注释的模板
  5. spring websocket基于STOMP协议实现,apache httpd反向代理配置
  6. mysql 密码大小写_MySQL数据库加密和解密~认证登陆密码(mysql.user)和MySQL不区分大小写...
  7. mosek 安装配置python_python安装、配置以及pyinstaller的安装、使用
  8. Java 算法 换零钞
  9. python django 数据库查询方法总结
  10. BCELoss忽视某个类别
  11. POJ3981 字符串替换【水题】
  12. 原子结构示意图全部_所有原子结构示意图(1-118)最新元素周期表.pdf
  13. 经典谢幕千千静听(最终版本)7.0.4 去广告增强版下载
  14. 国产手机后台弹出界面检测方法
  15. linux录制声卡声音_linux下ALSA声卡 录音问题
  16. 新手转行学大数据开发难吗?新手学需要注意的6个方面!
  17. 计算机地图制图原理与算法,计算机地图制图原理与方法-基本图形生成算法.ppt...
  18. python数据处理工具-Pandas笔记
  19. 怎么用计算机测出来体脂,如何简单测算出自己的体脂率?
  20. keil5安装及注册许可

热门文章

  1. img 带请求头token
  2. 向数据库插入数据没有报错,但是数据库里面并没有数据
  3. 虚拟机克隆教程——用于集群搭建等
  4. 微信小程序input输入框
  5. 解决微信小程序输入框聚焦时内容被上推致布局错乱
  6. 启动设备ar1失败 错误代码2_开机屏幕出现错误代码0xc0000428怎么办?
  7. Django练习day02,03
  8. 苏州企业认定高新技术企业专项审计需要哪些材料
  9. 073 定积分基本公式牛顿-莱布尼茨公式证明
  10. 图形学笔记(十三)光线追踪3——双向反射分布函数BRDF(反射方程、递归方程)、辐射度量学基础radiometry、立体角、Radiant Energy、Flux、Irrdiance、Radiance