流量录制技术——持续测试(27)

发表于:2022-10-27 09:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈磊    来源:51Testing软件测试网原创

  5.2  流量录制技术
  流量录制技术近年来被越来越多地提及。前面章节介绍测试右移时,提到过测试右移的一种测试方式就是全链路压测,而全链路压测的一个关键技术点就是流量录制技术。流量录制技术和录制回放是相互依存的关系,录制回放是为了解决项目需要一些PRD(Product Requirement Document,产品需求文档)环境的行为而出现的技术。
  流量录制技术的常用场景包括引入真实流量验证、全链路测试、测试用例和数据构造等,具体如表5-2所示。
表5-2 流量录制技术的使用场景分类
  流量录制技术按照所处的位置可以分为基于Web层录制、基于应用层录制和基于协议层录制。这3种录制方法各有优缺点,具体如图5-2所示。
图5-2  流量录制技术的分类
  基于Web层录制目前没有什么太优秀的通用技术,基于应用层录制应用较广泛的方案有jvm-sandbox和ngx_http_mirror_module(Nginx插件),基于协议层录制应用较广泛的方案有GoReplay、TcpCopy、TcpReplay。
  5.2.1  Nginx的插件
  Nginx的插件ngx_http_mirror_module是Nginx上应用较多的一种流量录制技术。Nginx从1.13.4版本开始支持该插件,它从入口层创建原始请求的镜像,从而实现流量录制的效果,如图5-3所示。
图5-3  Nginx录制流量的原理
  流量请求到达Nginx后,Nginx正常转发请求到目标应用,复制流量到镜像服务后不再管控。Nginx上的流量录制是通过原生Nginx模块实现的,它支持配置多份镜像,放大流量,同时配置简单nginx-server,将流量复制到镜像服务,从而达到对真实流量无影响的目的。
  但是利用Nginx实现录制有一些弊端,例如,修改配置后需要执行“nginx -s reload”命令使变更生效,这样在生产环境中操作就没有那么方便;实际业务中经由Nginx转发的模块较多,无法筛选指定请求;只支持录制HTTP流量;镜像请求为子请求,当镜像请求未结束时,主请求的内存无法释放,导致Nginx性能下降甚至阻塞等。因此,使用Nginx原生的插件实现流量录制也并非在任何情况下都适用。
  5.2.2  Sandbox
  基于应用层录制技术中,除Nginx的原生插件以外,Jvm-Sandbox技术也是一种很好的实现技术,这里推荐使用Jvm-Sandbox-Repeater。图5-4展示了Jvm-Sandbox-Repeater录制流量的原理。
  Jvm-Sandbox-Repeater是开源项目,可以在GitHub官网下载,使用Jvm-Sandbox技术,通过Java agent或者attach方式挂载到Java应用上。repeater模块根据配置的规则录制或回放数据,console模块主要负责触发和数据交互。
图5-4  Jvm-Sandbox-Repeater录制流量的原理
  沙箱技术的优点主要体现在通过字节码增强直接录制Java方法、子调用,对业务代码零入侵,并且模块功能丰富。沙箱技术的缺点主要表现在对服务运行环境有一定的入侵,挂载瞬间会占用较多的机器资源,业务量大会导致服务挂起。
  5.2.3  TcpCopy
  基于协议层的录制技术相对来说比较成熟,也比较通用。协议层工具出现较早的是TcpCopy。
  TcpCopy运行在线上机器上,主要负责捕获在线请求并修改请求头中的目标地址和源地址,然后使用原始套接字输出技术发送数据包到目标服务器。目标服务器根据配置的信息将响应数据包路由到辅助服务器。辅助服务器将提取的响应头信息发送给TcpCopy。TcpCopy利用收到的信息修改捕获的数据包属性并发送至目标服务器。
  TcpCopy录制流量的原理如图5-5所示。
图5-5  TcpCopy录制流量的原理
  TcpCopy的实现方式很基础,因此对高并发场景的支持更加完善,对目标服务器基本无干扰,支持复制基于TCP的流量。然而,由于TcpCopy只复制数据包而不鉴别流量异常,可能导致异常数据进入目标服务器,它也无法对应用层的数据进行筛选和修改。
  5.2.4  GoReplay
  GoReplay是基于Go语言实现的协议层流量录制库,主要通过监听网络接口流量录制流量,支持在线和离线方式回放流量。图5-6展示了GoReplay录制流量的原理。
图5-6  GoReplay录制流量的原理
  GoReplay因其轻量程序设计特点,在使用时环境准备相对简单,程序资源消耗较少,对应用运行环境无入侵。同时,GoReplay提供了不限制语言的插件机制,大大提高了工具的扩展性。
  然而,目前GoReplay社区版本仅支持HTTP流量的录制,如果有其他协议的需求,可能无法满足要求。
  5.2.5  技术本质
  流量录制有低成本、高覆盖率的优势。其中低成本指无须编写测试用例,通过流量录制形成丰富的测试用例。
  高覆盖率指一方面通过线上的大量真实流量确保覆盖率,另一方面覆盖一些诸如异步服务、大数据特征计算等的常规测试技术难以覆盖的部分。但是录制容易,回放难。若要回放录制的流量,就需要对项目进行技术改造,建立一些流量的贴标和识别技术,通过对影子数据持久化层的改造,完成回放流量对生产数据库的隔离。
  流量录制技术的本质就是录制,类似于LoadRunner的录制、JMeter的Badboy、Selenium IDE的录制。这些都是录制技术,只是之前在客户端录制,现在在服务器端录制。
查看《持续测试》全部连载章节
版权声明:51Testing软件测试网获得作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号