啄木鸟流量回放平台
项目简介
- 本项目是基于RuoYi-Vue单应用版本
- 流量回放引擎基于goreplay
- 演示系统基于newbee-mall-api-go
如果你想从录制开始体验,需要搭建演示系统newbee-mall-api-go
,同时需要将gor 部署在演示系统服务中,搭建kafka以便收集流量(你需要在项目中将KafkaConsumer 这个类的自动注入注释解除)
相关文档准备中…
如果你想直接体验平台流程,直接部署本 前后端分离项目即可,相关文档准备中…
流程介绍
录制流量
首先创建一个基准版本的流量数据:
- gor录制流量并发送kafka消息
- 平台通过消费kafka提取对应的字段
- 平台通过指定时间段对录制流量添加对应的版本号,用于后续diff不同版本的接口出参
- 平台回放录制的流量,并将对应的接口出参结果保存起来(因为gor对出参没有办法100%录制,只能通过平台请求对应接口后再保存)
回放流量
当系统版本迭代时,需要回归原有接口
- 平台通过复制原版本流量,生成新的版本流量(这里复制的数据仅仅只有接口入参)
- 平台回放新的版本流量,保存对应的出参结果
- 平台通过唯一的gorid(录制时产生的),进行diff操作(diff操作需要降噪)
- 平台只存储diff存在异常的结果,相同的结果无需存储
diff结果
这里的前端页面还没有实现,diff 高亮显示 json指定的key(寻求大佬帮助 )
没有降噪字段的传参
降噪字段传参
关于系统的设计
回放流量的方式
因为这里是基于电商项目newbee-mall-api-go进行回放流量设计的,用的比较简单的方式,如果不能适配你的系统需要你进行二次开发了(我想这也是为什么测试领域没有大一统的系统平台吧!各自的业务都有一些特性,很难直接套用,这也是为什么这几年测开比较吃香的原因之一吧)
gor 录制的response丢失问题
gor 官方提供了直接监听response 的方法,但是存在丢失的情况,在issue中有人提出过。我使用的是修复后的版本,依然存在这个问题,所以本项目的response 是自己收集的。
gor 使用elasticsearch 收集不到数据
我使用的是官方支持es5的版本也收集不到数据,这个问题同样有人提出,纠结了半天,与其等官方修复,不如自己来。这里我用的Mysql 收集数据,后续规划也会做相关升级
共创
目前项目只有一人在开发,进度比较缓慢(尤其是前端),寻求大佬共同迭代本项目,也期待您的意见https://github.com/dalaohekele/woodpecker
规划
- jvm-sandbox-repeater 接入
- mock服务