API 测试利器 WireMock
之前写了一篇介绍 HttpClient 的两种重试机制 的文章, 但是否真的会按照预期进行重试我们不得而知。
别人提供给我们的 API 往往都是正常的,很多错误并不能稳定重现,这也造成了我们无法进行全面的测试。正是这种情况下,了解到了 WireMock。
本文不打算做一个入门教程,重点在于如何用 WireMock 解决实际的问题。WireMock 官网的文档很不错,想要深入了解的可以去阅读一下。
初始化调用端
首先初始化一个HttpClient
public ZwroksApi(){RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(1000).build();DefaultServiceUnavailableRetryStrategy serviceUnavailableRetryStrategy = new DefaultServiceUnavailableRetryStrategy();httpClient = HttpClients.custom().setServiceUnavailableRetryStrategy(serviceUnavailableRetryStrategy).setDefaultRequestConfig(requestConfig).build();
}
进行了如下配置
- 异常重试默认开启,重试3次。
- 使用了默认的服务不可用重试策略,会重试1次,间隔1秒。
- 设置 SocketTimeout 为1秒,用于模拟超时。
异常重试
超时
首先来模拟一下超时,设置了固定的 delay 2秒,所以一定会超时,按照预期会重试3次,所以一共是请求4次。
@Test
public void testSocketTimeOut() {stubFor(get(urlEqualTo("/test")).willReturn(aResponse().withStatus(HttpStatus.SC_OK).withHeader("Content-Type", "text/xml").withBody("ok").withFixedDelay(2000)));zwroksApi.test();verify(4, getRequestedFor(urlEqualTo("/test")));
}
但是结果呢
Expected exactly 4 requests matching the following pattern but received 1
具体的原因在之前那篇文章也已经提过,SocketTimeoutException
是 InterruptedIOException
的子类,不会重试。
如何超时也进行重试,在上一篇中也有讲,这里就不赘述了。
错误返回
WireMock 中提供了几种错误返回,使用也很简单
@Test
public void testBadResponse() {stubFor(get(urlEqualTo("/test")).willReturn(aResponse().withFault(Fault.CONNECTION_RESET_BY_PEER)));zwroksApi.test();verify(4, getRequestedFor(urlEqualTo("/test")));
}
这里在运行时会抛错 java.net.SocketException: Connection reset
,这种异常是会进行重试的,所以这里测试可以通过。
服务不可用重试
调用的代码如下,我希望在返回503的时候进行重试
@Test
public void testServiceUnavailable() {stubFor(get(urlEqualTo("/test")).willReturn(aResponse().withStatus(HttpStatus.SC_SERVICE_UNAVAILABLE).withHeader("Content-Type", "text/xml").withBody("service unavailable")));zwroksApi.test();verify(2, getRequestedFor(urlEqualTo("/test")));
}
这里测试也是可以通过的。WireMock 提供了获取请求日志的能力,除了次数,我们可以看看是否两次请求是间隔了一秒。
List<ServeEvent> allServeEvents = getAllServeEvents();long firstTime = allServeEvents.get(1).getRequest().getLoggedDate().getTime();long lastTime = allServeEvents.get(0).getRequest().getLoggedDate().getTime();assert lastTime - firstTime > 1000;
API 测试利器 WireMock相关推荐
- 初学api测试_面向初学者的API-在此免费视频课程中学习如何使用API
初学api测试 What exactly is an API? How do you use an API? We've just published a full beginner's course ...
- 新手入门API测试必要了解的知识
什么是API?API是Application Programming Interface的简写.实现了两个或多个独立系统或模块间的通信和数据交换能力. 什么是API测试?API测试是不同于UI级自动化 ...
- Chrome Restful Api 测试工具 Postman-REST-Client离线安装包下载,Axure RP Extension for Chrome离线版下载...
[Postman for Chrome 离线下载] Postman-REST-Client离线安装包,可直接在Chrome浏览器本地安装使用,可模拟各种http请求,Restful Api测试, CS ...
- katalon进行app测试_使用Katalon Studio创建你的第一个API测试
API测试(或WebService测试)在软件测试中变得越来越重要.根据谷歌趋势报告,过去五年来,行业内对API测试的兴趣一直在增加.这种趋势在一定程度上表明API测试的需求变得更加普遍.测试API或 ...
- soapui工具_基于开源的API测试工具!不再为web服务负载测试而发愁
通过一个可视化.拖拽式的界面,LoadUI允许您实时.交互式地创建.配置和重分配负载测试.在单一测试环境下,LoadUI提供完整的测试覆盖,支持所有标准的协议和技术.它功能强大,能从任意数量的本地和远 ...
- stm32c8t6的can通信实验代码_TCP的连接建立与关闭状态及数据传输通信过程【含有 PHP socket API 测试实验代码】...
php中文网最新课程 每日17点准时技术干货分享 本文章使用 PHP 代码来测试 TCP 传输层的一个通信过程.TCP/IP 协议关于该协议的详细内容可自行查阅 <>PHP 的 tcp/u ...
- 一种基于openflow的虚拟化层软件flowvisor的API测试
注明:本文并不对openflow进行分析,本人也是略略知道这个概念,对flowvisor也只是对其API有所测试,更深的源码并未涉及,只是希望该文能对以后的flowvisor研究者提供些许帮助. 一: ...
- python rest api 测试_如何用Python编写REST API的单元测试
在过去的几个月中,正在从事一个名为B的项目.它是带有简单Web UI的徽章生成器,用于添加数据并生成PDF可打印徽章.B后端现在已转移到REST-API并测试REST-API中使用的功能,我们需要一些 ...
- API测试工具SoapUI Postman对比分析
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/powertoolsteam/article/details/83012359 本文由葡萄城技术 ...
最新文章
- Java集合类: Set、List、Map、Queue区别及应用
- [转]ExtJS Grid 分页时保持选中的简单实现方法
- 面试官:为什么HTTPS是安全的
- windows环境搭建golang的gin框架简易教程
- sprint冲刺计划第七天团队任务
- (转)Java中的守护线程
- 满足条件的数累加(信息学奥赛一本通-T1066)
- mac修改jupyter notebook启动时的打开目录
- php加载lrc,javascript - 【求助】php如何获取虾米网的LRC地址?
- c语言归并排序数组不固定,归并排序非递归实现C语言
- (原创)使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之五...
- 单位dB和dBm的区别
- CSS动画-Animation
- BC66F3652研发笔记
- 基于libtorch的Alexnet深度学习网络实现——Cifar-10数据集分类(提升准确率)
- python dictionary怎么用_python Dictionary字典使用
- 如何将文件FLAC格式快速转换为MP3格式
- 台式计算机识别不了u盘,电脑为什么识别不了u盘 电脑识别不了u盘该如何解决...
- Dalvik虚拟机垃圾收集(GC)过程分析
- 新变种Emotet恶意样本分析