通用技术 【流量回放探索】啄木鸟流量回放平台

大佬喝可乐 · 2022年12月10日 · 最后由 王稀饭 回复于 2022年12月12日 · 7563 次阅读

前言

个人探索、学习流量回放的平台,演示系统基于newbee-mall-api-go,目前没有落地公司项目,到时候肯定要引入。
项目我自己个人休息时间开发的,如果您有兴趣欢迎加入一起卷,当然欢迎。项目基于 springboot+vue 前后端分离(或许可以一起搞个 python 版,go 版),项目地址:https://github.com/dalaohekele/woodpecker

项目简介

如果你想从录制开始体验,需要搭建演示系统 newbee-mall-api-go
,同时需要将gor 部署在演示系统服务中,搭建 kafka 以便收集流量(你需要在项目中将 KafkaConsumer 这个类的自动注入注释解除)
相关文档准备中....

如果你想直接体验平台流程,直接部署本 前后端分离项目即可,相关文档准备中....

流程介绍

录制流量

首先创建一个基准版本的流量数据:

  1. gor 录制流量并发送 kafka 消息
  2. 平台通过消费 kafka 提取对应的字段
  3. 平台通过指定时间段对录制流量添加对应的版本号,用于后续 diff 不同版本的接口出参
  4. 平台回放录制的流量,并将对应的接口出参结果保存起来(因为 gor 对出参没有办法 100% 录制,只能通过平台请求对应接口后再保存)

回放流量

当系统版本迭代时,需要回归原有接口

  1. 平台通过复制原版本流量,生成新的版本流量(这里复制的数据仅仅只有接口入参)
  2. 平台回放新的版本流量,保存对应的出参结果
  3. 平台通过唯一的 gorid(录制时产生的),进行 diff 操作(diff 操作需要降噪)
  4. 平台只存储 diff 存在异常的结果,相同的结果无需存储

diff 结果

这里的前端页面还没有实现,diff 高亮显示 json 指定的 key(寻求大佬帮助 )

没有降噪字段的传参

降噪字段传参

关于系统的设计

回放流量的方式

因为这里是基于电商项目newbee-mall-api-go进行回放流量设计的,用的比较简单的方式,如果不能适配你的系统需要你进行二次开发了(我想这也是为什么测试领域没有大一统的系统平台吧!各自的业务都有一些特性,很难直接套用,这也是为什么这几年测开比较吃香的原因之一吧)
在这里插入图片描述

gor 录制的 response 丢失问题

gor 官方提供了直接监听 response 的方法,但是存在丢失的情况,在 issue 中有人提出过。我使用的是修复后的版本,依然存在这个问题,所以本项目的 response 是自己收集的。
在这里插入图片描述

gor 使用 elasticsearch 收集不到数据

我使用的是官方支持 es5 的版本也收集不到数据,这个问题同样有人提出,纠结了半天,与其等官方修复,不如自己来。这里我用的 Mysql 收集数据,后续规划也会做相关升级

在这里插入图片描述

共创

目前项目只有一人在开发,进度比较缓慢(尤其是前端),寻求大佬共同迭代本项目,也期待您的意见!

规划

  • [ ] diff 报告
  • [ ] jvm-sandbox-repeater 接入
  • [ ] mock 服务
共收到 2 条回复 时间 点赞

大佬牛逼,学习一下

手动点赞

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册