引言: 随着中国农业银行技术架构的日益更迭与业务场景的不断创新,测试工作正在面临数据构造繁琐、案例维护成本较高且质量参差不齐等诸多问题与挑战,主要体现在以下四方面:
一是在系统架构升级与代码重构时,大量原始接口需要进行回归测试;二是对于逻辑复杂的业务场景,在多版本迭代的过程中,回归测试占据大量时间;三是自动化案例的前期录入与后期维护环节,均需要人工操作干预,人力成本较高;四是在生产环境出现交易异常情况时,问题解决的时效性在很大程度上直接取决于开发人员、测试人员在测试环境中完成问题复现与调试的效率。
综上,通过测试领域新技术的研究与创新,实现测试质量与测试效率的提升,对于当下测试工作的开展有着尤为重要的意义。
01 流量录制回放技术概述
流量录制回放技术可以快速将应用运行过程中产生的接口流量按照一定的过滤规则进行录制。录制的内容包括接口的请求报文以及响应报文,在录制过程中存储的报文可以随时在指定的环境上回放。流量录制回放场景,既可以应用在功能测试阶段,实现回归验证,亦可以应用在版本验证阶段,实现自动交易回归。流量录制回放技术,在简化测试案例编写、提高测试效率、增强测试场景覆盖率等方面,具有重要意义。
图1 流量录制回放过程
根据流量录制的位置,大致可将流量录制回放技术分为以下三类:基于web服务器录制(定制化Web服务器操作系统实现应用请求录制)、基于网络协议栈录制(通过在网卡上监听网络协议端口,采用数据包复制的方式实现请求录制)、基于应用录制(在应用上采用AOP面向切面编程的方式实现请求录制),其优缺点详见下表。
表1 流量录制回放技术对比
02 设计方案
基于日常测试工作中的痛点问题,中国农业银行研发中心天津研发部测试部在2022年7月成立专项任务,采用开源+自研的方式,建设流量录制回放工具,通过应用层录制的方式,实现配置管理、节点监控、流量管理、流量回放执行、批次执行、批次结果分析等功能。
流量录制回放平台主要分为代理模块和管理端模块两部分。代理模块用于监听应用流量,处理回放请求,并将录制和回放信息发送给管理端模块进行处理存储;管理端模块用于进行配置管理、模块管理、录制流量查询和回放等操作。
图2 流量录制回放工具总体架构
流量录制回放工具采用前后端分离的开发架构。用户仅需在应用上安装一个探针,即可实现流量录制回放操作,接入流程与安装过程均简易友好。接入完成后,用户通过访问统一的web端界面,可一站式完成配置创建、流量录制及回放结果查询等操作。
图3 流量录制回放工具运行架构
03 创新功能设计
1.数据分层策略
考虑到在实际使用过程中,应用会产生大量的录制流量,为实现快速查询检索,流量录制回放工具使用Elasticsearch存储在线流量数据和回放结果数据,在百万级数据体量下可实现毫秒级的快速查询响应。同时,使用MySql存储量级较小的管理类数据,使用Redis的队列功能实现批量流量的按序回放。
图4 数据分层示意图
2.批次回放及结果查询功能
批次回放功能可将已录制的流量数据通过人工筛选的方式,添加为一个批次,支持按录制时的调用发生顺序对流量数据进行回放,模拟混合交易场景。适用于以下场景:
①案例的执行存在前后依赖关联,可将有关联的案例添加到一个批次中按序执行;
②执行了一个阶段的案例,包含多种混合交易的大量正向或反向案例场景,可将在一个时间段内执行的流量案例创建为一个批次,按序执行。
图5 批次回放应用场景
批次执行提供批次结果统计以及批次执行通过率趋势展示等功能,帮助测试人员及时了解应用接口执行情况,为测试人员对用例的及时修改与执行提供参考。
图6 批次执行结果统计
图7 批次执行成功率趋势统计
3.报文对比检查点
在回放操作执行后、回放数据写入前,对录制时的交易响应报文与本次回放的交易响应报文进行一致性比对,从而判断本次回放操作是否成功。
回放结果将在一定程度上受到环境数据一致性以及接口中所带有的随机数、时间戳、自增数据等噪声字段的影响。为降低人工对比判断成本,提升回放过程的自动化水平,工具采用检查点的方式实现降噪过滤。检查点通常配置为对接口操作有决定性作用的字段,例如响应码等。若检查点字段一致,则忽略噪声字段的差异值,判定回放结果为成功。
图8 报文对比检查点
4.报文头替换
在进行Web端应用回放的过程中,常常会遇到因用户session过期导致数据无法正常回放的问题。为确保已录制的流量可以持续回放使用,提供批次执行时的报文头替换功能,可对报文中的headers内节点的参数值进行实时更新。
5.案例生成导出
对于已经录制的流量案例,支持导出为collection V2规范的JSON文件,可供Postman、Postwoman等接口测试工具进行导入,从而实现案例的转换与复用,无需人工拼装报文体,简化用例编写过程。
6.生命周期管理功能
支持用户灵活配置流量数据的生命周期,可根据不同应用的不同环境定制清理维度。对于没有添加到批次中且不再执行的流量,将按照清理规则定期清理;对于已添加到批次中的流量,可支持永久存储、永久回放。
图9 流量生命周期管理
04 应用成效
目前,流量录制回放工具正在中国农业银行研发中心天津研发部内逐步推广,已有20余个应用模块完成接入,其中Web端应用占67%、联机应用占13%、移动端应用占20%,录制接口总数量达406万,批次回放成功率经流程优化和案例调整后均可达到85%以上。
表2 试点推广情况
总结:
流量录制回放平台提供了一种接口自动化测试的新方法,可以应用于版本验证、回归测试等多个场景。利用流量即案例的思想,将线上流量转化成接口测试用例,从而极大地减轻了在测试数据准备与脚本编写阶段的人力投入。此外,使用线上流量作为测试数据,与人工构造测试数据相比,能够更真实、更全面地覆盖业务场景,提升通过用例发现问题的能力。流量录制回放工具在测试领域的应用与推广,将对测试工作效能的提升、人力成本与自动化工具使用成本的降低,具有重要的意义。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!