首先,文章涉及到 JMETER 的部分参考了 https://blog.csdn.net/weixin_40686603/article/details/114589428 这是原文链接,作者是我的同事,为同事打个广告。
那么我们开始进入正文。
JMeter 是应用最广泛的测试工具没有之一,即便是各个开源的平台,很大程度也是以 JMeter 作为 executor 来实现这种功能的,开源的 JMeter 源码需要阅读,因为计划要做流量回放平台,流量的录制基于 APISIX,所以我来做流量回放的部分。
流量回放,顾名思义,就是把生产上的流量录制下来,在任意地方回放,关于为什么做流量回放很多文章已经说得非常清楚了,此处不再赘述。
当前总结出流量回放平台比较出名的平台有滴滴的 sharingan(很重要,最后的设计思路也是参考了 sharingan),aliyun的 doom,去哪儿的 ARES,文章比较多的工具是 go-replay,tcpplay 等。为什么不直接使用工具回放,而是调研平台,有几个原因:
一,公司正在通过统一框架,将公司内的业务服务生态统一起来,自己开发的好处是定制程度高,可以随时修改;
二,人员成本可控.
基于这两点原因,参考了 sharingan 来实现我们自己的流量回放平台。不直接使用 sharingan 的理由是,我们公司是 java 技术栈,而 sharingan 是基于 go 开发的,有定制版 GOROOT,故放弃了。
所以,流量回放平台如何设计?
重画了一次设计图,避开了其他一些生态相关的事情。
所以我们的重点是,如何在代码层面实现流量回放?也就是根据日志,重新构造http请求再发出去。因为当前的平台 executor 使用的是 jmeter,所以我们要学习如何在代码层面构造 jmeter的 测试计划。
HashTree 是 JMeter 脚本的数据接口,所有通过 GUI 构造出来的 JMX 脚本最终被解析接 HashTree 上的一个个节点来顺序执行。
这是哈希树的介绍 https://zh.wikipedia.org/zh-hans/%E5%93%88%E5%B8%8C%E6%A0%91
所有的 JMeter 的组件,都被视为哈希树的一个节点,我们要做的事情是把流量及其他操作,配置好以后,插入 hashtree,并调用 jmeter engine 执行它 。