流量录制与回放实践
why
为什么要做流量回放?
流量复杂,请求构造成本比较高;
业务复杂,业务场景梳理困难,流量配比不真实;
服务复杂,服务调用关系复杂,服务模块多,构成成本高;
where
应用场景
压力测试
各大公司进行模块级压测或者全链路压测基本都是采用流量录制的方式,先对录制的流量进行存储,然后对流量进行编辑、过滤后通过压测引擎向被测服务发压
回归测试
传统的接口测试方案,通过部署环境、构造请求、发送请求、结果断言的方式相对目前复杂业务场景来说太单一了,一是构造的请求过于简单,大多是标准的正常的请求,二是环境依赖太多,封闭环境部署困难。所以越来越多的公司项目采用流量回放的方式进行稳定性测试和功能回归测试,结果评定主要依赖指标统计维度和response维度的diff。
问题调试
面对当前节点众多、交互繁杂的微服务架构模式,问题定位太难了。
数据构造
录制的数据进行数据特征分析,聚类场景数据,用于接口测试,当然这个通常指应用层录制的数据。
数据mock
用场景数据进行接口或方法级的mock
Badcase挖掘
总之复杂业务场景下,数据是分析业务场景、构建测试环境、构造测试数据、保证服务质量的宝贵资源。
which
选型主要关注点:
- 对应用的侵入性
- 性能:占用资源 & 是否支持高并发
- 易用性,限制或缺陷:如流量录制过程,流量回放过程,可配置性,流量过滤,部署是否必须同一网段
其中,重点关注tcpcopy与goreplay比较:
- 都支持离线和在线录制回放
- tcpcopy 部署架构相对复杂,goreplay 相对简单只需启动一个进程
- tcpcopy 支持的协议比较丰富,goreplay 根据架构特点仅支持 http
简单 http 复制 goreplay 就可以,稍复杂或应用场景更复杂则推荐 tcpcopy。更复杂,要求更高的流量复制,需要自己定制。
how
整体架构:
参考:
《arex-介绍》 https://doc.arextest.com/zh-Hans/docs/intro
《流量复制方案对比:Tcpcopy vs Goreplay》 https://www.shouxicto.com/article/3230.html
《API网关》https://www.jianshu.com/p/7c9d694d7b5e
《告别构造数据,录制流量自动转后台接口测试》https://zhuanlan.zhihu.com/p/398773186
《流量录制与回放技术实践》https://www.cnblogs.com/nullllun/p/15205442.html
《流量录制回放探索-GoReplay》https://segmentfault.com/a/1190000042509833?sort=votes
《goreplay使用》https://blog.csdn.net/weixin_43665351/article/details/127687687
《Jmeter之https脚本录制》https://www.bbsmax.com/A/gGdXl8x1d4/
《HTTP引流神器Goreplay详解【精译】》https://www.cnblogs.com/sunsky303/p/9072871.html
《开源测试工具 [jvm-sandbox-repeater 学习笔记][入门使用篇] 1 安装与启动》https://testerhome.com/topics/20868
《 jvm-sandbox-repeater 户使用手册》https://gitcode.net/mirrors/alibaba/jvm-sandbox-repeater/-/blob/master/docs/user-guide-cn.md
《alibaba jvm-sandbox 和 alibaba jvm-sandbox-repeater 新手上路之一:原理简介以及模块加载部分源码解析》https://zhuanlan.zhihu.com/p/461359287
《JVM SandBox 的技术原理与应用分析》https://www.infoq.cn/article/TSY4lGjvSfwEuXEBW*Gp
《真刀真枪压测:基于TCPCopy的仿真压测方案》https://www.cnblogs.com/zhengyun_ustc/p/tcpcopy.html
《肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁》https://baijiahao.baidu.com/s?id=1671144485218215170&wfr=spider&for=pc
《最全的tcpdump使用详解》https://www.cnblogs.com/lvdongjie/p/10911564.html