背景:早些时候写过一篇关于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
2)启动Capture模式并捕获一些headers信息:
hoverctl mode capture --headers "Content-Type"
3)使用JMeter调用API,注意这里的配置
其他设置和请求同JMeter的普通脚本开发,执行结果如下图所示。这里出现了Hoverfly的标记。
真实请求中没有Hoverfly,并且有这样一行头信息:
4)导出模拟数据:
hoverctl export sample.json
5)停止Hoverfly,然后启动,并导入模拟数据
hoverctl stop -t local
hoverctl start -t local
hoverctl import sample.json
6)多次执行请求。所有请求的Headers和Body的大小都一样。
部分知识总结:
1.设置整体的时延,时间为300毫秒
2.捕获序列:(暂时不明白这里的原因和使用场景~~)
步骤:
1)hoverctl start
2)hoverctl mode capture --stateful
3)用JMeter执行两次相同请求
4)hoverctl mode simulate
5)此时用JMeter执行多次请求,第一次的响应为第一个请求的响应对;后面的所有请求都是第二个请求的响应对。
如果导出.json文件,可以看到两个请求中,分别添加了如下字段:
- 第一个请求和响应中,分别添加了如下字段:
- 第二个请求中,添加了如下字段:
参考资料:
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