Hoverfly真香

API模拟工具(API mocking tools),或者所谓的服务虚拟化工具(service virtualization tools )是微服务测试中的必备基础设施。在测试圈中也有将其称为挡板。 目前来说,http(s)层面的模拟工具已经是一个百花齐放,供应过剩的局面了,国产的大家也可以关注Moco。 https://en.wikipedia.org/wiki/Comparison_of_API_simulation_tools https://www.guru99.com/service-virtualization-tools.html

这里主要安利一个亲测简单易用的工具-Hoverfly

微服务下的API Mock工具的使用场景:

1)创建2个微服务A和B,A将调用B完成某项工作 2)测试用例创建-使用API Mock工具将A调用B的请求/响应流量进行捕捉 3)测试用例执行-在B离线的情况下,运行上述测试用例,API Mock工具充当B的测试桩完成用例的正常运行。 这是最基本的API MoCK应用场景

自动切换捕捉和回放的Hoverfly

@HoverflySimulate(source = @Source(
value = simulation.json", type = SourceType.FILE),
    enableAutoCapture = true)
@ExtendWith(HoverflyExtension.class)
class CaptureIfFileNotPresent {
    // ...
}

这是Hoverfly-java提供的一个Capture or simulate案例。也是Hoverfly在琳琅满目的API Mock工具库凭借着这一点成功吸引到笔者的原因之一: 可以看到,整个过程只要在类上添加相关的Hoverfly注解进行配置,申明相关的文件以及是否启用自动捕捉的功能,就可以完成HTTP请求的捕捉、落成文件。这是首次测试用例首次执行时的场景。 而当需要再次执行时,由于该文件已经就绪,Hoverfly将启动回功能,通过捕捉请求,给测试套件提供外部服务的模拟返回。 整个过程无需手工编写额外的请求、响应文件,或者是编写类似

mock.start() //test mock.stop() 这样的脚手架代码来实现HTTP请求的捕捉,以及后期执行时再人工拆除。

如何引入

<dependency> <groupId>io.specto</groupId> <artifactId>hoverfly-java</artifactId> <version>0.13.0</version> <scope>test</scope> </dependency>

Hoverfly注意点

实际项目中有以下一些事项需要注意, 1)修改录制的请求响应文件,模糊匹配请求中的timer/token等内容(glob),以支持后续的调用

2)不同用例的相同请求返回不同的结果-分离用例到不同的文件(hoverfly只能做class的注解,不能注解在方法上)

3) Hoverfly在发现请求响应文件后,只使用该文件进行匹配,而不是去向实际的对端微服务发送请求。如果在一个测试类中存放多个测试用例,在用例开发过程中,需要分开进行录制,最后进行请求/响应文件内容的合并。由于新用例所需的请求内容未匹配到,因此用例会执行失败。所以用例需要逐条开发并merge到最终的测试类中。

本文分享自微信公众号 - 软件测试那些事(antony-not-available),作者:风月同天测试人

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用junit5编写一个类ZeroCode的测试框架

    最近笔者在尝试基于应用日志来自动生成测试用例。这其中就需要一个配套的简易测试框架。梳理了一下,其中的技术点有: 0.使用csv文件来定义测试用例及步骤 1.使用...

    Antony
  • 用junit5编写一个类似ZeroCode的测试框架1

    最近笔者在尝试基于应用日志来自动生成测试用例。这其中就需要一个配套的简易测试框架。梳理了一下,其中的技术点有: 0.使用csv文件来定义测试用例及步骤 1.使用...

    Antony
  • 还在用object.equals()做断言么?

    在HTTP接口自动化测试时,如果接口返回是JSON格式的结果,通常可以用Sting比较的方式进行断言,或者是经过反序列化形成对象或者对象数组,通过对象间Equa...

    Antony
  • CAP理论

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    suveng
  • linux,windows常用命令对比

    宸寰客
  • 综合使用tail、forward、copy和stdout

    我们已经介绍了几个Fluentd的输入插件和输出插件,现在先通过一个例子进行阶段总结。

    Fluentd中文网
  • LintCode-30. 插入区间

    给出一个无重叠的按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

    悠扬前奏
  • 如何高效管理B端客户反馈?

    ? 来源|作者:李宽wideplum ---- 在许多组织中,产品经理有源源不断的任务来自面向客户的团队。功能请求,bug 修复——所有这些都是紧急的。要想在...

    腾讯SaaS加速器
  • Spring5.0源码深度解析之SpringBean的生命周期终结

    那么这个MemberServiceImpl对象是交给spring到底是通过反射还是其它方式初始化的?

    须臾之余
  • 「Python爬虫系列讲解」十三、用 Scrapy 技术爬取网络数据

    前文回顾: 「Python爬虫系列讲解」一、网络数据爬取概述 「Python爬虫系列讲解」二、Python知识初学 「Python爬虫系列讲解」三、正则表达...

    荣仔_最靓的仔

扫码关注云+社区

领取腾讯云代金券