![d049794fb2acb7667f2cf2f01be9a3a8.png](https://i-blog.csdnimg.cn/blog_migrate/1b25e9924325e94716ffb4c9c5d5da99.jpeg)
现在,WEB系统的开发一般都采用前后端分离的架构,以及部分公司采用“前台-中台-后台“的组织架构,难免会出现开发进度不一致的情况,导致系统联调或测试需要等到所有依赖开发完成后才能够进行,为不影响软件开发、测试进度,消除等待浪费,因此引入了Mock服务。
本文主要介绍的Mock工具是Wiremock(一种开源的测试工具,Mock工具有很多种),其支持HTTP响应存根、请求验证、配置响应延迟、代理/拦截、录制和回放。
常见的Mock应用场景有如下几个:
- 依赖接口尚未开发完成,需要进行接口联调或自动化测试开发;
- 接口返回不满足目前需求,目前的接口虽然已实现,但个别字段/返回不满足目前的测试要求。
同时注意不要过于的依赖Mock接口服务。当实际接口开发完成后,测试人员需要对实际接口重新进行测试,避免出现实际接口与Mock接口不一致等情况,影响产品质量。同时可以延伸了解下契约测试,其测试理念有助于我们正确的理解Mock服务应用。接下来介绍WireMock的具体使用。
Wiremock安装
![df5efd42e63ade984e19a62d14c173ec.png](https://i-blog.csdnimg.cn/blog_migrate/f131e9b18b99ab2a676189a3a0dc380c.jpeg)
最新下载地址(需要Java JDK环境):
http://repo1.maven.org/maven2/com/github/tomakehurst/wiremock-standalone/2.21.0/wiremock-standalone-2.21.0.jar
官网地址:
http://wiremock.org/
Github地址:
https://github.com/tomakehurst/wiremock
WireMock启动
![38e9b8443661bb65875622cfe3fa2f03.png](https://i-blog.csdnimg.cn/blog_migrate/76f62ec96ec9f224b7d376538d98183d.jpeg)
在命令行中运行:
java -jar wiremock-standalone-2.21.0.jar -port 9999 --verbose
启动后在该目录下生成__files 和 mappings两个空的文件夹,如下图。
- __files :是存放上传、下载、录制文件;
- mappings :存放request、response、url映射等信息;
![ba7b72409a07422f3f00e6cd36f85968.png](https://i-blog.csdnimg.cn/blog_migrate/67d75689a7af7a7b49ab561dd4098507.jpeg)
举一个简单例子,我们在对应目录下分别创建如下两个文件。
![4b6b66c3f5a128bd451362981b9e08d0.png](https://i-blog.csdnimg.cn/blog_migrate/db77082b33f5f680881fd5eb23d9dca3.jpeg)
文件内容如下,然后我们再次运行启动命令,加载该mock服务。(注意,添加修改mapping文件后,需要重启服务才能生效。)
![096fe014cbfc66fcbc0658c857852b80.png](https://i-blog.csdnimg.cn/blog_migrate/2ba297516d9338c1818258ac09fc1b92.jpeg)
TouTiao.json
![06eabfe4d6c31cb4e260033c549079af.png](https://i-blog.csdnimg.cn/blog_migrate/5de8fe9753987854d2739fc84644b836.jpeg)
TouTiao_Detail.json
此时,在浏览器中输入http://localhost:9999/api/toutiao/,会看到该接口的响应内容,如下图,此时我们完成了/api/toutiao/接口的Mock服务创建。
![c277b11a45061a2b7310a2b4bb9bacc1.png](https://i-blog.csdnimg.cn/blog_migrate/7f4b06f8d7300263b70e84afac962dfd.jpeg)
同时也支持xml等格式请求、响应体,如下。
![96ef8de3f12eda8e2db8c3c7f15d7766.png](https://i-blog.csdnimg.cn/blog_migrate/b549072c36db5c8dd307e72ab52b9b75.jpeg)
![fe3bf73f75e9ca7eeeea7e7335e49760.png](https://i-blog.csdnimg.cn/blog_migrate/de642c0714e251425c3137b69b3227f9.jpeg)
Wiremock服务创建
接下来主要介绍在创建WireMock服务的时候,常用的几种方法,主要分为两部分(更多方法可参考WriemocK官网)。
- URL匹配方式
- 请求体/响应体匹配方式
URL匹配方式-精确匹配
![16462c9db6a4a5d10ea476ff10727ce7.png](https://i-blog.csdnimg.cn/blog_migrate/6d55172255610fd3e800d092151d4de0.jpeg)
![e58923d90d1395705c5ea9e8a7303746.png](https://i-blog.csdnimg.cn/blog_migrate/be8aefd9339e32734e33506a979e7d7b.jpeg)
URL匹配方式-模糊匹配(正则匹配)
如果URL符合正则匹配规则,则视为匹配。
![b93a36034f625f62658c6e388b2a29cd.png](https://i-blog.csdnimg.cn/blog_migrate/49ebf3901bd4abc1fc22046afa53af42.jpeg)
![ad83998f98d98698a823dbd724dcc423.png](https://i-blog.csdnimg.cn/blog_migrate/919add7c495bb35d1ab558b7571306ce.jpeg)
请求体/响应体匹配-字符串相等
如果属性值等于预期值,则视为匹配。
![8308ef6d8340c5af22886ef0c7a6ed09.png](https://i-blog.csdnimg.cn/blog_migrate/b371396cf0f68a4b0546ef2522ed9ef8.jpeg)
![8ff46f002f804cc278c6ad699d06ffb1.png](https://i-blog.csdnimg.cn/blog_migrate/a07080c023727702251ee0954ef9a1e2.jpeg)
请求体/响应体匹配-JSON相等
![ab5e34cf61ec0da60ae80069955b5239.png](https://i-blog.csdnimg.cn/blog_migrate/c86ae7b662a090aa2f72853113905b48.jpeg)
![013e86772210b7a59d5300f7f4c7555c.png](https://i-blog.csdnimg.cn/blog_migrate/5e6daf63667993ed872e5bf634d0c83d.jpeg)
请求体/响应体匹配-JSON属性包含(多级嵌套JSON)
如果属性存在于JSON中,则视为匹配。
![da30944b9e75f5c0549a3d6429b741c3.png](https://i-blog.csdnimg.cn/blog_migrate/32ee71cf7d28fc2442a42698986c25a9.jpeg)
![889031890ca5b47ca99487b2990c4603.png](https://i-blog.csdnimg.cn/blog_migrate/402f9f573fd8eede5ef45b08325335d1.jpeg)
请求体/响应体匹配-JSON属性值相等(多级嵌套JSON)
如果属性值等于预期值,则视为匹配。
![150e5ed690ff497e90445cc6101d0eef.png](https://i-blog.csdnimg.cn/blog_migrate/b56d6cb00d29445b7ff756d5887f1f5a.jpeg)
![e58e20fae5295b069addd6dc531c2d76.png](https://i-blog.csdnimg.cn/blog_migrate/70f09f673721e9e1c325c4f156226bcb.jpeg)
若对你有所帮助,欢迎大家评论、留言。