1. WireMock简介

WireMock 是基于 HTTP 的 API 模拟器。

2. 在java接口测试框架中使用

wiremock支持通过筛选:请求方式/路径/入参/header/等多个过滤条件,过滤接口,返回response,response可以是一个文件,也可以是自己定义的任何返回内容。官方文档给了非常多样的使用方案:http://wiremock.org/docs/

以下是简单使用的样例。我们系统是一个广告投放系统,对接了广告投放的供应商,该供应商以下简称为「Bear公司」。客户在开了广告账户,开始投放以后,有去查看投放数据的需求。但是由于广告需要真实投放才会有投放数据,否则接口返回的数据一直都是0。所以访问「Bear」公司的接口是没办法做【查看投放数据接口】的测试的。而通过将原本请求到「Bear」公司的接口,改为请求到wiremock服务,可以返回我们想要的测试数据。

  • 使用【花生壳】/【网云穿】等工具开通一个域名指向到本地的端口,我用的是7777,对应wiremock启动的端口号
  • 测试项目添加依赖
<dependency><groupId>com.github.tomakehurst</groupId><artifactId>wiremock-jre8</artifactId><version>RELEASE</version><scope>compile</scope>
</dependency>
  • 在/src/test/resources新建文件夹:__files,在__files新建一个json文件AccountSearch.json
{"code": "000000","message": "success","data": {"pageSize": 10,"pageNum": 1,"total": 1,"list": [{"key1": xxx,"key2": xxx,"key3": xxx,xxxx}]}
}
  • 在测试代码中加入以下代码:
 public WireMockServer wireMockServer;@BeforeClass(alwaysRun = true)public void startMock(){wireMockServer = new WireMockServer(wireMockConfig().port(7777));WireMock.configureFor("localhost", 7777);//配置端口号为7777wireMockServer.start();//启动wiremockstubFor(WireMock.post(urlPathEqualTo("/test/bear/searchIndicator"))//如果请求到本地7777的端口号的接口的,路径等于“/test/bear/searchIndicator”,则回返回searchIndicator.json这个文件.willReturn(aResponse().withHeader("Content-Type","application/json").withStatus(200).withBodyFile("searchIndicator.json")));}...测试代码...@AfterClass(alwaysRun = true,groups = "ads-b")public void endMock(){wireMockServer.stop();}
  • 把项目配置的「Bear公司」域名,改成wiremock服务域名

  • 启动测试:测试结果如下

3. 独立使用(推荐使用)

wiremock还提供了wiremock-standalone.jar包,可以单独提供服务,只需要官网下载后,使用启动命令,java -jar xxxxxxxx.jar --port 7777 ,启动以后就可以使用。

以下是样例

  • 创建一个wiremock文件夹
  • 在wiremock文件夹下,下载jar包:http://wiremock.org/docs/running-standalone/
  • 启动:java -jar wiremock-standalone-2.26.3.jar -port 7777
  • 观察wiremock文件夹,生成了两个文件夹:mappings和__files
  • 进入mappings文件夹,新建一个文件searchIndicator.json,内容:
{"request": {"method": "POST","urlPath": "/test/bear/searchIndicator"},"response": {"status": 200,"bodyFileName": "searchIndicatorResponse.json","headers": {"Content-Type": "application/json"}}
}

上述"bodyFileName": “searchIndicator.json”,searchIndicator.json就是下面在__files文件夹创建的文件的文件名,需要相同。

  • 进入__files文件夹,新建一个文件searchIndicatorResponse.json,内容
{"code": "000000","message": "success","data": {"pageSize": 10,"pageNum": 1,"total": 1,"list": [{"key1": xxx,"key2": xxx,"key3": xxx,...}]}
}
  • 重启wiremock服务:ctrl c停止后,再次启动
  • 触发查询https://test.bear.cn/test/bear/searchIndicator接口,发现返回的searchIndicatorResponse.json的内容

4. MOCK服务部署到测试服务器

  • 将__files和mappings上传到gitlab,直接在gitlab上修改mock数据
  • 修改后通过Jenkins来触发重启wiremock的服务:
  • mappings文件夹中的每一个json文件中都对应了一个接口,__files文件中的json文件都是模拟的返回内容。假设后续需要对接更多接口,仍然需要mock,则在mappings和__files中都新增一个文件,修改对应的路径和返回内容,重启服务就可以生效。

最后

wiremock是一个非常好用的mock工具,除了用在接口测试中,前后端联调中也可以使用,只需要后端提供一个返回demo,前端开发就可以进行联调,而不用等待代码开发完毕。

如果有更多更好用的使用方法,欢迎评论区留言。

testng+wiremock实现对外部系统接口的mock相关推荐

  1. 5-5 常用系统接口

    main.go package mainimport ("fmt""retriever/mock""retriever/real"" ...

  2. 《嵌入式系统原理与接口技术》——嵌入式系统接口应用基础

    本文为我负责编写的电子工业出版社出版的<嵌入式系统原理与接口技术>一书第七章部分,这里整理的仍然是修改稿,供需要的同学参考,本书为普通高等教育"十二五"规划教材,电子信 ...

  3. 1小时学会:最简单的iOS直播推流(三)使用系统接口捕获音视频数据

    最简单的iOS 推流代码,视频捕获,软编码(faac,x264),硬编码(aac,h264),美颜,flv编码,rtmp协议,陆续更新代码解析,你想学的知识这里都有,愿意懂直播技术的同学快来看!! 源 ...

  4. 异步系统接口调用流程图

    2019独角兽企业重金招聘Python工程师标准>>> 异步系统接口调用流程图 博客分类: java ................................... 转载于: ...

  5. 【Linux 内核 内存管理】Linux 内核内存布局 ③ ( Linux 内核 动态分配内存 系统接口函数 | 统计输出 vmalloc 分配的内存 )

    文章目录 一.Linux 内核 动态分配内存 系统接口函数 二.统计输出 vmalloc 分配的内存 一.Linux 内核 动态分配内存 系统接口函数 Linux 内核 " 动态分配内存 & ...

  6. 系统接口502异常_基于SpringBoot2.0的后台权限管理系统

    简介 基于SpringBoot2.0的后台权限管理系统界面简洁美观敏捷开发系统架构.核心技术采用Spring.MyBatis.Shiro没有任何其它重度依赖. 互联网云快速开发框架,微服务分布式代码生 ...

  7. 爱迪尔 门锁接口文档_爱迪尔门锁系统接口函数(SDK)说明

    1 爱迪尔门锁系统接口函数( SDK )说明 ( 动态联接库函数说明 ) 适用门锁接口: Lock3200.DLL , Lock3200K.DLL , Lock4200.DLL , Lock4200D ...

  8. 最简单的 post 请求发起方式、调用其它系统接口

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 调用其它系统接口,发起一个 post  请求,写法如下: import cn.com.infinit ...

  9. scada系统集成_MES/MOM与WMS系统集成应用案例-系统接口、交互数据分析

    写在面前(By 小智) 前面我们介绍了西门子.罗克韦尔.施耐德.达索等的MES/MOM平台(见文末推荐) 也绍和分析了MES与ERP之间的系统集成案例: MES与EPR进行系统集成的实际案例-系统接口 ...

最新文章

  1. 医疗信息化、医学、医院管理、医疗器械资料下载
  2. 函数节流与防抖的实现
  3. 正则表达式,VI,SED及shell编程2010-12-05
  4. 转载:中年程序猿的迷茫,你还在深究技术吗?
  5. php curl重用,使用PHP CURL解析负载较重的站点?
  6. 关于文档的基本操作---ElasticSearch
  7. 使用HazelCast进行休眠缓存:基本配置
  8. 甜蜜暴击,情人节插画素材,甜而不腻!
  9. h264 ES流文件通过计算first_mb_in_slice区分帧边界
  10. SECS的常用术语介绍与使用
  11. intent传递集合数据
  12. windbg 常用调试命令总结
  13. VOL vs. VLK by Plod
  14. Vue-Cli 3.0 + vue.config.js
  15. 华为鸿蒙系统小窗口,mate30pro升鸿蒙后小窗应用调不出来
  16. JSON does not allow non-finite numbers
  17. dodo:人脸识别方法个人见解
  18. 使用CreateJS制作动画
  19. (6)Air Band数字图像处理基础-对图像进行几何变换
  20. 24 点游戏(Leetcode-679)-回溯法

热门文章

  1. Java实验一—编写电视类TV
  2. 漫画:当文科生与理科生同台说爱(AI)
  3. 一文带你了解RPA和爬虫的五大区别-花漾RPA
  4. Windows Phone 7 开发系列教程之 启动器
  5. [高考数学]端点效应
  6. 如何在matlab中打开一个.dat文件,并载入数据
  7. Latex公式无编号
  8. 主机和虚拟机网络连接笔记
  9. 2015山东毕业生怎样进行网上报道(报到证)?
  10. 【美少女】四面温柔攻,一人血书跟腾讯傲娇受组成cp可以吗?