searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

流量录制与回放技术方案比对

2023-04-28 06:41:40
2096
0

一、测试痛点

在介绍流量录制与回放前,我们先看下传统的自动化回归测试存在的痛点:
  • 测试用例编写难,测试覆盖不全;
  • 测试数据构造难,难以模拟真实的用户请求;
  • 测试环境维护难,测试环境数据、配置等易被修改;
  • 上下游依赖严重;
  • 基础组件升级难以测试验证。

二、什么是流量录制与回放

流量录制与回放是通过复制线上真实流量(录制)然后在测试环境进行模拟请求(回放)验证代码逻辑正确性。通过采集线上流量在测试环境回放逐一对比每个子调用差异和入口调用结果来发现接口代码是否存在问题。
流量录制:在不影响用户正常使用的前提下,获取线上用户的真实请求和服务响应结果,将其保存或者转发到目标应用。
采用不同的流量录制手段,可以采集不同传输阶段的流量。
流量录制方式:根据流量录制的位置大致可分为基于web服务器录制基于应用层录制基于网络协议栈录制
web服务器录制
方案:在服务上定制化代码
优点:请求类型比较多样
缺点:不通用,维护成本高,会占用大量线上资源
应用层录制
方案:基于agent或者在网关进行录制
优点:对代码无侵入、实现相对比较快捷简单
缺点:会占用线上部分资源、可能会对业务有影响
常用工具:jvm-sandbox-repeater、Nginx插件-ngx_http_mirror_moudle
网络协议栈录制
方案:直接监听网络端口,复制数据包方式录制
优点:基本对应用无影响
缺点:比较偏向底层实现成本较高
常用工具:goReplay、tcpCopy、tcpReplay

三、应用场景

压力测试
各大公司进行模块级压测或者全链路压测基本都是采用流量录制的方式,先对录制的流量进行存储,然后对流量进行编辑、过滤后通过压测引擎向被测服务发压。
回归测试
传统的接口测试方案,通过部署环境、构造请求、发送请求、结果断言的方式相对目前复杂业务场景来说太单一了,一是构造的请求过于简单,大多是标准的正常的请求,二是环境依赖太多,封闭环境部署困难。所以越来越多的公司项目采用流量回放的方式进行稳定性测试和功能回归测试,结果评定主要依赖指标统计维度和response维度的diff。
问题定位
录制线上流量数据进行分析定位,或者直接使用录制的流量在测试环境进行debug。

四、常见解决方案介绍

1 ngx_http_mirror_module

流量请求到nginx后,nginx正常转发请求到目标应用,同时复制流量到mirror服务。
优点:
  1. 原生模块支持,在nginx 1.13.4版本后内置该模块
  2. 支持配置多份镜像放大流量
  3. 配置比较简单,nginx-server将流量复制到mirror后无交集,达到对真实流量无影响目的
缺点:
  1. 修改配置后需要执行“nginx -s reload”命令使变更生效,线上环境不建议这么做
  2. 实际业务中经由nginx转发的模块较多,无法筛选指定请求
  3. 只支持录制http流量
  4. mirror为子请求,当mirror未结束时,主请求的内存无法释放,可导致nginx性能下降甚至阻塞。

2 TcpCopy

TcpCopy主要有tcpcopy和intercept两个模块组成,tcpcopy模块运行在线上机器,主要负责捕获在线请求并修改请求头中的目标地址和 源地址,然后使用raw socket输出技术发送数据包到目标服务器。目标服务器上根据配置的信息将响应数据包路由到intercept辅助服务器。intercept辅助将提取的响应头信息发送给tcpcopy。tcpcopy利用收到的信息修改捕获的数据包属性并发送至目标服务器。
优点:
  1. 使用线上的真实数据;
  2. 适合高并发场景;
  3. 对目标服务器基本无干扰;
  4. 支持复制基于TCP任意层协议的流量。
缺点:
  1. 由于只做数据包复制未做流量异常鉴别,可能导致异常数据进入目标服务器;
  2. 无法对应用层的数据进行筛选和修改;
  3. 可能会丢失数据包导致请求丢失。

3 GoReplay

GoReplay是基于Go语言实现与Tcpdump一样都是依赖pcap库,主要监听网络接口流量来录制流量,支持在线和离线方式回放流量
优点:
  1. 轻量程序基本无需配置,环境准备简单;
  2. 程序资源消耗少,无侵入应用运行环境;
  3. 提供不限制语言的插件机制,方便拓展。
缺点:
  1. 社区版仅支持录制http协议,且与核心逻辑耦合,应用面不广泛;
  2. 大公司使用少,整体成熟度不高。

4 Jvm-sandbox-repeater

使用jvm-sandbox沙箱技术,通过Java agent或者attach方式挂载到Java应用上。repeater-agent模块根据配置的规则录制或回放数据,控制面主要负责触发和数据管理。
 
优点:
  1. 支持入口调用和子调用的录制与回放
  2. 对业务代码0侵入
  3. 模块功能丰富
缺点:
  1. 对服务运行环境有一定侵入,需要占用一定的机器资源;
  2. 需要依赖jvm虚拟机;
 
0条评论
0 / 1000
好****p
6文章数
2粉丝数
好****p
6 文章 | 2 粉丝
原创

流量录制与回放技术方案比对

2023-04-28 06:41:40
2096
0

一、测试痛点

在介绍流量录制与回放前,我们先看下传统的自动化回归测试存在的痛点:
  • 测试用例编写难,测试覆盖不全;
  • 测试数据构造难,难以模拟真实的用户请求;
  • 测试环境维护难,测试环境数据、配置等易被修改;
  • 上下游依赖严重;
  • 基础组件升级难以测试验证。

二、什么是流量录制与回放

流量录制与回放是通过复制线上真实流量(录制)然后在测试环境进行模拟请求(回放)验证代码逻辑正确性。通过采集线上流量在测试环境回放逐一对比每个子调用差异和入口调用结果来发现接口代码是否存在问题。
流量录制:在不影响用户正常使用的前提下,获取线上用户的真实请求和服务响应结果,将其保存或者转发到目标应用。
采用不同的流量录制手段,可以采集不同传输阶段的流量。
流量录制方式:根据流量录制的位置大致可分为基于web服务器录制基于应用层录制基于网络协议栈录制
web服务器录制
方案:在服务上定制化代码
优点:请求类型比较多样
缺点:不通用,维护成本高,会占用大量线上资源
应用层录制
方案:基于agent或者在网关进行录制
优点:对代码无侵入、实现相对比较快捷简单
缺点:会占用线上部分资源、可能会对业务有影响
常用工具:jvm-sandbox-repeater、Nginx插件-ngx_http_mirror_moudle
网络协议栈录制
方案:直接监听网络端口,复制数据包方式录制
优点:基本对应用无影响
缺点:比较偏向底层实现成本较高
常用工具:goReplay、tcpCopy、tcpReplay

三、应用场景

压力测试
各大公司进行模块级压测或者全链路压测基本都是采用流量录制的方式,先对录制的流量进行存储,然后对流量进行编辑、过滤后通过压测引擎向被测服务发压。
回归测试
传统的接口测试方案,通过部署环境、构造请求、发送请求、结果断言的方式相对目前复杂业务场景来说太单一了,一是构造的请求过于简单,大多是标准的正常的请求,二是环境依赖太多,封闭环境部署困难。所以越来越多的公司项目采用流量回放的方式进行稳定性测试和功能回归测试,结果评定主要依赖指标统计维度和response维度的diff。
问题定位
录制线上流量数据进行分析定位,或者直接使用录制的流量在测试环境进行debug。

四、常见解决方案介绍

1 ngx_http_mirror_module

流量请求到nginx后,nginx正常转发请求到目标应用,同时复制流量到mirror服务。
优点:
  1. 原生模块支持,在nginx 1.13.4版本后内置该模块
  2. 支持配置多份镜像放大流量
  3. 配置比较简单,nginx-server将流量复制到mirror后无交集,达到对真实流量无影响目的
缺点:
  1. 修改配置后需要执行“nginx -s reload”命令使变更生效,线上环境不建议这么做
  2. 实际业务中经由nginx转发的模块较多,无法筛选指定请求
  3. 只支持录制http流量
  4. mirror为子请求,当mirror未结束时,主请求的内存无法释放,可导致nginx性能下降甚至阻塞。

2 TcpCopy

TcpCopy主要有tcpcopy和intercept两个模块组成,tcpcopy模块运行在线上机器,主要负责捕获在线请求并修改请求头中的目标地址和 源地址,然后使用raw socket输出技术发送数据包到目标服务器。目标服务器上根据配置的信息将响应数据包路由到intercept辅助服务器。intercept辅助将提取的响应头信息发送给tcpcopy。tcpcopy利用收到的信息修改捕获的数据包属性并发送至目标服务器。
优点:
  1. 使用线上的真实数据;
  2. 适合高并发场景;
  3. 对目标服务器基本无干扰;
  4. 支持复制基于TCP任意层协议的流量。
缺点:
  1. 由于只做数据包复制未做流量异常鉴别,可能导致异常数据进入目标服务器;
  2. 无法对应用层的数据进行筛选和修改;
  3. 可能会丢失数据包导致请求丢失。

3 GoReplay

GoReplay是基于Go语言实现与Tcpdump一样都是依赖pcap库,主要监听网络接口流量来录制流量,支持在线和离线方式回放流量
优点:
  1. 轻量程序基本无需配置,环境准备简单;
  2. 程序资源消耗少,无侵入应用运行环境;
  3. 提供不限制语言的插件机制,方便拓展。
缺点:
  1. 社区版仅支持录制http协议,且与核心逻辑耦合,应用面不广泛;
  2. 大公司使用少,整体成熟度不高。

4 Jvm-sandbox-repeater

使用jvm-sandbox沙箱技术,通过Java agent或者attach方式挂载到Java应用上。repeater-agent模块根据配置的规则录制或回放数据,控制面主要负责触发和数据管理。
 
优点:
  1. 支持入口调用和子调用的录制与回放
  2. 对业务代码0侵入
  3. 模块功能丰富
缺点:
  1. 对服务运行环境有一定侵入,需要占用一定的机器资源;
  2. 需要依赖jvm虚拟机;
 
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0