其他分享
首页 > 其他分享> > 自动化测之各流量回放技术工具对比

自动化测之各流量回放技术工具对比

作者:互联网

前言

在日常的测试工作中我们或多或少总会遇到下列问题:

1)服务架构升级或重构,需要验证原始接口逻辑,对原有的一堆接口做回归

2)对于业务逻辑复杂的场景,每个迭代版本都需要大量的时间用于回归测试

3)编写自动化用例时复杂场景造数麻烦,日常自动化维护成本高

4)构造压测模拟数据麻烦

......等等

那么从服务的所有环境来看,仅线上环境拥有场景丰富、数据真实、覆盖全面的条件,那么我们将线上环境的请求数据获取下来,在指定的环境中模拟用户请求基本上可解决或者优化上面的这些问题。因此有必要需要对流量回放这项技术探究一下,首先从资料总结和自身搭建讲演来讲,总结流量回放的大概流程可为:流量录制 - 数据持久化 - 回放计划 - 环境维护 - 流量回放 - 结果比对。其次,所谓工欲善其事,必先利其器,下面我们看一些常用的流量回放分类以及工具的优缺点。

工具分类

根据流量录制的位置大致可分为:基于web服务器录制基于应用层录制基于网络协议栈录制

web服务器录制

方案:在服务上定制化代码

优点:请求类型比较多样

缺点:不通用,维护成本高,会占用大量线上资源

应用层录制

方案:在网关或基于AOP切面进行录制

优点:对代码无侵入、实现相对比较快捷简单

缺点:会占用线上部分资源、可能会对业务有影响

常用工具:Nginx插件-ngx_http_mirror_moudle、Java-sandbox

网络协议栈录制

方案:直接监听网络端口,复制数据包方式录制

优点:基本对应用无影响

缺点:比较偏向底层实现成本较高

常用工具:goReplay、tcpCopy、tcpReplay

常用工具介绍

ngx_http_mirror_module

image

流量请求到nginx后,nginx正常转发请求到目标应用,同时复制流量到mirror服务后不再管控。

优点:

缺点:

TcpCopy

项目地址:https://github.com/session-replay-tools/tcpcopy

image

流转示意图:
image

TcpCopy主要有tcpcopy和intercept两个模块组成,tcpcopy模块运行在线上机器,主要负责捕获在线请求并修改请求头中的目标地址和 源地址,然后使用raw socket输出技术发送数据包到目标服务器。目标服务器上根据配置的信息将响应数据包路由到intercept辅助服务器。intercept辅助将提取的响应头信息发送给tcpcopy。tcpcopy利用收到的信息修改捕获的数据包属性并发送至目标服务器。

优点:

缺点:

GoReplay

项目地址:https://github.com/buger/goreplay

image

GoReplay是基于Go语言实现与Tcpdump一样都是依赖pcap库,主要监听网络接口流量来录制流量,支持在线和离线方式回放流量

优点:

缺点:

Jvm-sandbox-repeater

项目地址:https://github.com/alibaba/jvm-sandbox-repeater

image

使用jvm-sandbox沙箱技术,通过Java agent或者attach方式挂载到Java应用上。repeater模块根据配置的规则录制或回放数据,console模块主要负责触发和数据交互。

优点:

缺点:

总结

通过技术方案可以方便我们利用线上真实流量验证压测、自动化、回归等场景,根据自己实际的需求选择合适的工具,但一切以不影响线上服务的稳定可用为前提。也期待后续会有更多的更完善的流量回放方案。

标签:请求,回放,测之,录制,流量,nginx,自动化,数据包
来源: https://www.cnblogs.com/mrzcode/p/15516616.html