背景:早些时候写过一篇关于Mountebank的文章,介绍其环境搭建的过程(Mountebank之安装篇)。因为个中原因,后面项目中并没有继续使用这款工具。今天要介绍的这篇Hoverfly,其实与Mountebank类似,它们都是实现(微)服务虚拟化的工具之一。

环境:Win7 + JMeter3.2 + Hoverfly v1.1.1

步骤:

1.什么是微服务?

随着软件技术的发展,各种名词总是层出不穷的。这个名词,度娘会比本人解释得更清楚。这里不再赘述。只简单介绍这种技术所带来一些测试问题:

1)要测试某个服务时,需要依赖其他的微服务;

2)其他的微服务不稳定或仍在进一步的开发中;

3)需要设计网络延迟、限速等边缘场景;

4)服务端有访问次数限制等

“去耦”的方法之一就是单元测试的Mock方法。在过去这一方法效率高,成本低;但在当下软件所实现的业务越发复杂的情况下,要做单元测试的Mock,除了测试自己需要有足够的代码基础外,还得有时间。而且,Mock的数据不容易管理和保存。那么,用什么手段来解决这些问题呢,就是接下来的内容了。

2.(微)服务虚拟化?

(微)服务虚拟化就是一种用来模拟(微)服务依赖项的行为。目前,实现这一技术的工具主要有wieremock, Hoverfly, mountebank。通常,(微)服务虚拟化包含两种模式:

  • 录制模式:拦截客户端与服务端之间的通信,记录两者之间的请求和响应。
  • 回放模式:使用模拟数据,为客户端提供响应,不再需要将请求发送给服务端。这类模拟的数据,可以通过手动创建,也可以通过捕获方式创建。

3.Hoverfly

什么是Hoverfly,它有什么特征,支持什么语言,具有什么模式,如何安装。。。。。。这些可以参考官网:https://docs.hoverfly.io/en/latest/pages/introduction/introduction.html

4.使用示例

1)启动Hoverfly:

hoverctl start -t local

微服务建立的模拟 微服务 虚拟化_Mock

2)启动Capture模式并捕获一些headers信息:

hoverctl mode capture --headers "Content-Type"

微服务建立的模拟 微服务 虚拟化_Hoverfly_02

3)使用JMeter调用API,注意这里的配置

微服务建立的模拟 微服务 虚拟化_数据_03

其他设置和请求同JMeter的普通脚本开发,执行结果如下图所示。这里出现了Hoverfly的标记。

微服务建立的模拟 微服务 虚拟化_数据_04

真实请求中没有Hoverfly,并且有这样一行头信息:

微服务建立的模拟 微服务 虚拟化_数据_05

4)导出模拟数据:

hoverctl export sample.json

微服务建立的模拟 微服务 虚拟化_服务虚拟化_06

微服务建立的模拟 微服务 虚拟化_微服务建立的模拟_07

5)停止Hoverfly,然后启动,并导入模拟数据

hoverctl stop -t local
hoverctl start -t local
hoverctl import sample.json

微服务建立的模拟 微服务 虚拟化_微服务建立的模拟_08

6)多次执行请求。所有请求的Headers和Body的大小都一样。

微服务建立的模拟 微服务 虚拟化_微服务建立的模拟_09

部分知识总结:

1.设置整体的时延,时间为300毫秒

微服务建立的模拟 微服务 虚拟化_Hoverfly_10

2.捕获序列:(暂时不明白这里的原因和使用场景~~)

步骤:

1)hoverctl start

2)hoverctl mode capture --stateful

3)用JMeter执行两次相同请求

4)hoverctl mode simulate

5)此时用JMeter执行多次请求,第一次的响应为第一个请求的响应对;后面的所有请求都是第二个请求的响应对。

如果导出.json文件,可以看到两个请求中,分别添加了如下字段:

  • 第一个请求和响应中,分别添加了如下字段:

 

微服务建立的模拟 微服务 虚拟化_Mock_11

  • 第二个请求中,添加了如下字段:

微服务建立的模拟 微服务 虚拟化_数据_12

 

参考资料:

1.https://docs.hoverfly.io/en/latest/pages/introduction/downloadinstallation.html#docker

2.https://github.com/SpectoLabs/hoverfly

3.https://cloud.tencent.com/developer/article/1371265