博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用WireMock模拟HTTP API服务
阅读量:6006 次
发布时间:2019-06-20

本文共 2201 字,大约阅读时间需要 7 分钟。

\

要点:

\\
  • 使用 WireMock可以极大减少创建连线测试桩所需要的时间\\t
  • 在JUnit里使用 WireMock可以更容易地编写各种测试用例\\t
  • 我们会给出一个单独使用 WireMock的例子\\t
  • 我们还会为手动测试人员介绍如何使用 WireMock的UI\\t
  • 还有其它一些内容\
\\

开场:我所知道的连线模拟工具

\\

在我的职业生涯中,我有幸在很多大公司工作过。在工作过程中,我发现在开发上存在的一个普遍现象:开发团队总是重复开发一些相似的工具。我亲眼所见两个不同银行的开发团队在公司内部(基于不同的代码库)开发出三个以上基于HTTP的连线模拟工具(有时候也被叫作)。我还在一个媒体公司看到它们同一楼层的几个团队居然开发了五个这种工具。还有一个航空企业,它开发了至少一种这样的工具。

\\

这些基于HTTP的模拟工具主要有两方面的用途:

\\
  1. 在自动化测试里,它们提供了可以用于创建远程虚拟服务的接口,这样就可以在CI(持续集成)环境里构建系统,比如TeamCity或Jenkins。\\t
  2. 它们提供了Web界面,那些对技术细节不是很了解的测试人员可以在上面做一些探索性的测试。\

因为同一个工具同时被用于自动化测试和手动测试,自然会有很多重叠的地方。测试人员可以使用开发人员创建的桩,这样有助于他们之间的沟通。同时这样也会减少在创建测试桩上所做的工作,相比测试人员和开发人员要分别创建自己的桩,这种方式避免了很多重复性工作。不过有些团队没有测试人员,所以他们只需要编程接口而不需要Web界面。

\\

业界使用现成的工具

\\

让我们从日志和数据存储方面来一窥整个行业对这些工具的使用情况。

\\

如果有必要,你可以在一两天内轻松实现一个简单的日志框架。不过经验告诉我们,从头写一个日志框架并不是一个好主意。所以我们会使用logback、slf4j或其它一些现成的日志框架。

\\

日志还只是个简单的问题,如果我们要考虑更复杂的数据存储,我们只能使用市场上现成的解决方案,比如Oracle、MongoDB或Neo4J,具体要根据实际需要来选择。

\\

我们举个测试框架的例子。你不会为每个项目从头写一个测试框架,所以你会使用JUnit或者其它任何一个可用的框架,有时候可能会基于这些框架做一些定制开发。

\\

总的来说,针对那些常见的问题,总有一些现成的解决方案。

\\

WireMock:一个现成的连线模拟(虚拟服务)工具

\\

在预打包的测试框架解决方案方面,会是一个更好的选择。WireMock就是这样一个备受关注的开源框架,它使用Java编写,可以在JUnit里使用,也可以作为独立的HTTP服务运行。

\\

在JUnit里使用WireMock

\\

假设我们有一个天气预报程序,它通过调用HTTP API从forecast.io获取伦敦的风速数据。预报程序获得的数据是JSON字符串,需要对它们进行解析,抽取出当前风速,再通过REST接口返回给用户。

\\

我们现在使用JUnit编写测试用例,需要使用桩来模拟forecast.io提供的Web服务:

\\
\public class WeatherApplicationTest {\    @Rule\    public WireMockRule forecastIoService = new WireMockRule();\}
\\

然后我们把预报程序加入到测试用例里。预报程序的start和stop方法分别放在JUnit的setup和teardown方法里。我们先测试一个正常的用例servesWindSpeedBasedOnForecastIoResponse:

\\
\public class WeatherApplicationTest {\    @Rule\    public WireMockRule forecastIoService = new WireMockRule();\\    private WeatherApplication weatherApplication = new WeatherApplication();\\    @Before\    public void setUp() {\        weatherApplication.start();\    }\\    @After\    public void tearDown() {\        weatherApplication.stop();\    }\\    @Test\    public void servesWindSpeedBasedOnForecastIoResponse(){\        // TODO\    }\}
\\

成功的测试用例

\\

测试过程是这样的:先发送请求到预报程序,预报程序从forecast.io获取响应数据,然后对其进行解析,加入后缀,再把它返回给用户。

\\

首先我们使用断言检查我们想要的风速数据格式是以英里每小时(mph)为后缀的:

\\
\@Test\public void servesWindSpeedBasedOnForecastIoResponse() {\    assertEquals(\"12.34mph\

转载地址:http://avpmx.baihongyu.com/

你可能感兴趣的文章
VMware Horizon View 7.5 虚拟桌面实施咨询与购买--软件硬件解决方案
查看>>
2018新版驾照驾照psd模板下载
查看>>
【矢量图控件教程】矢量图控件VectorDraw 常见问题整理大全(一)
查看>>
文件系统、服务、防火墙、SELINUX——安全四大金刚
查看>>
RabbitMQ如何保证队列里的消息99.99%被消费?
查看>>
Lync Server 2010的部署系列_第五章 准备 Active Directory 域服务
查看>>
java基本数据类型及运算符小结
查看>>
第一周博客作业
查看>>
Python strip lstrip rstrip使用方法
查看>>
Linux开发工具_1_gcc入门(上)
查看>>
在这里安家了
查看>>
ERP项目更应授人以渔
查看>>
我的友情链接
查看>>
thinkpython2
查看>>
JDK、JRE和JVM的关系
查看>>
String、StringBuffer和StringBuilder的区别
查看>>
【原创】ObjectARX中的代理对象
查看>>
.net中验证码的几种常用方法
查看>>
解决OracleDBConsoleorcl不能启动
查看>>
.net DLL程序集中打包另一个DLL
查看>>