当前位置: 首页 > news >正文

流量录制回放工具在自动化测试领域应用探索

引言: 随着中国农业银行技术架构的日益更迭与业务场景的不断创新,测试工作正在面临数据构造繁琐、案例维护成本较高且质量参差不齐等诸多问题与挑战,主要体现在以下四方面:

一是在系统架构升级与代码重构时,大量原始接口需要进行回归测试;二是对于逻辑复杂的业务场景,在多版本迭代的过程中,回归测试占据大量时间;三是自动化案例的前期录入与后期维护环节,均需要人工操作干预,人力成本较高;四是在生产环境出现交易异常情况时,问题解决的时效性在很大程度上直接取决于开发人员、测试人员在测试环境中完成问题复现与调试的效率。

综上,通过测试领域新技术的研究与创新,实现测试质量与测试效率的提升,对于当下测试工作的开展有着尤为重要的意义。

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 试点推广情况

总结:

流量录制回放平台提供了一种接口自动化测试的新方法,可以应用于版本验证、回归测试等多个场景。利用流量即案例的思想,将线上流量转化成接口测试用例,从而极大地减轻了在测试数据准备与脚本编写阶段的人力投入。此外,使用线上流量作为测试数据,与人工构造测试数据相比,能够更真实、更全面地覆盖业务场景,提升通过用例发现问题的能力。流量录制回放工具在测试领域的应用与推广,将对测试工作效能的提升、人力成本与自动化工具使用成本的降低,具有重要的意义。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 731789136,里面有各种测试开发资料和技术可以一起交流哦。

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:

流量录制回放工具在自动化测试领域应用探索

引言: 随着中国农业银行技术架构的日益更迭与业务场景的不断创新,测试工作正在面临数据构造繁琐、案例维护成本较高且质量参差不齐等诸多问题与挑战,主要体现在以下四方面: 一是在系统架构升级与代码重构时,大量原始接…...

【高数定积分求解旋转体体积】 —— (上)高等数学|定积分|柱壳法|学习技巧

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 Shell method Setting up the Integral 例题 Example 1: Example 2: Example 3: Example …...

Ubuntu20.04 及深度学习环境anaconda、cuda、cudnn、pytorch、paddle2.3安装记录

学习目标: Ubuntu20.04下装好torch、paddle深度学习环境。 选择的版本环境是 :最新的nvidia驱动、cuda 11.1 、cudnn v8.1.1,下面会说为啥这么选。 学习内容: 1. Ubuntu20.04仓库换源 本节参考Ubuntu 20.04 Linux更换源教程 2…...

场景切割CVPr2022 SceneSegmentation

目录 算法介绍 无监督训练原理 源码地址: lstm模块 bilstm opencv场景分割 加阈值:...

Spring Cloud Feign作为HTTP客户端调用远程HTTP服务

如果你的项目使用了SpringCloud微服务技术,那么你就可以使用Feign来作为http客户端来调用远程的http服务。当然,如果你不想使用Feign作为http客户端,也可以使用比如JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client或者Spring的RestTemplate。 那么,为…...

[node] Node.js的文件系统

[node] Node.js的文件系统 文件系统的使用异步和同步input.txt示例 常用方法打开文件语法示例 获取文件信息语法示例 写入文件语法示例 读取文件语法示例 关闭文件语法示例 截取文件语法示例 删除文件语法示例 创建目录语法示例 读取目录语法示例 删除目录语法示例 文件模块方法…...

【Linux系统基础】(2)在Linux上部署MySQL、RabbitMQ、ElasticSearch、Zookeeper、Kafka、NoSQL等各类软件

实战章节:在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面,我们学习了许多的Linux命令和高级技巧,这些知识点比较零散,同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用,…...

CJson 使用 - 解析Object结构

简介 准备在开发板中使用json结构传送数据, 选用了cJson, 现在看下cJson的使用吧步骤 下载 git clone https://github.com/DaveGamble/cJSON 或者直接压缩包下载也行, 毕竟国内有时候下载不下来Qt 中使用cJson 在下载的cJson 目录中加入cJson.pri, 内容如下 INCLUDEPATH …...

MySQL8主主搭建

-- mysql8 主主搭建 mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz 主1 : 192.168.2.160 主2 : 192.168.2.161 --解压mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz为mysql8 -- 初始化mysql8 (略) -- 参数192.168.2.160 [root…...

使用Pycharm一键将.ui文件生成.py文件配置教程、一键打开QTDesigner教程

2df3621a-7ffd-4f18-9735-b86464b83a5b 前言 我痛恨所有将白嫖归为理所应当的猪🐖。 教程 打开pycharm之后,依次点击File->Settings->Tools->External Tools,进入如下界面: 1、配置快捷打开Qt Designer 点击号&…...

React 路由跳转

1. push 与 replace 模式 默认情况下,开启的是 push 模式,也就是说,每次点击跳转,都会向栈中压入一个新的地址,在点击返回时,可以返回到上一个打开的地址, 就像上图一样,我们每次返…...

【MySQL】数据处理:从SQL批量删除报错到Python优雅解决

一、背景 MySQL数据库表中有一批重复的脏数据,为不影响正常业务,需要进行批量删除。 二、SQL批量删除 首先想到的是编写SQL语句来批量删除:删除身份证号为51****59且ID不为5的全部数据(保留ID为5的那一条数据) DELETE FROM test_table WHERE id IN ( SELECT i…...

Rust 软件测试

Rust 第18节 软件测试 测试已写的函数 在创建每一个lib crate时,rust都会自动生产一个测试 mod;名字为tests; tests mod 被属性 #[cfg(test)] 修饰,用于测试; 在mod 内,需要在函数头上加属性 #[test]进行修饰,让其变为…...

win11下配置visual studio 2022+PCL1.13.1

第一部分:visual studio2022 安装 vs官网网址如下:https://visualstudio.microsoft.com/zh-hans/vs/ 第一步:我们打开官网链接,按如下操作点击下载免费版本的exe文件 第二步:打开下载目录下的安装文件进行安装&#…...

智能优化算法应用:基于法医调查算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于法医调查算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于法医调查算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.法医调查算法4.实验参数设定5.算法结果6.…...

【分享】4个方法打开PDF文件

PDF是很多人工作中经常使用的电子文档格式,但是可能有些刚接触的小伙伴不知道用什么工具来打开PDF文件,今天小编就来分享一下4种常用的工具。 1. 使用浏览器 只要有电脑基本都会安装一到两款浏览器,其实浏览器也可以用来打开PDF文件。 只需…...

React 调试

React 调试 console 调试 console.log console.info console.warn console.error console.time() & console.timeEnd() console.count() debugger调试 chrome断点调试 chrome条件断点 HTML节点复制 选中节点,使用 $0复制 JavaScript对象复制 copy…...

List 流的使用

摘要 本文将介绍在 Java 1.8 中对 List 进行流操作的使用方法。引入的 java.util.stream 包为开发者提供了一种更为便捷和强大的方式来处理集合数据。通过使用流,我们能够以声明性的方式进行集合操作,减少了样板代码,提高了代码的可读性和可…...

设计模式:单例模式(使用c++分别实现饿汉式单例、带双重检查锁定机制的懒汉式单例以及IoDH技术的单例)

单例模式 引言正文1. 饿汉式单例2. 带双重检查锁定机制的懒汉式单例3. IoDH技术的单例 结论优点饿汉式单例带双重检查锁定机制的懒汉式单例IoDH技术的单例 缺点饿汉式单例带双重检查锁定机制的懒汉式单例IoDH技术的单例 引言 在软件开发中,单例模式是一种很常用的设…...

[编程相关]正则表达式Regex语法

--目录-- 0. 前言1. 正则语法2. 正则搜索语法(1)字符集 Character_Classes(2)锚定符 Anchors(3)计数 Quantifiers(4)分组与索引 Group_And_Reference(5)周围 …...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

21-Oracle 23 ai-Automatic SQL Plan Management(SPM)

小伙伴们&#xff0c;有没有迁移数据库完毕后或是突然某一天在同一个实例上同样的SQL&#xff0c; 性能不一样了、业务反馈卡顿、业务超时等各种匪夷所思的现状。 于是SPM定位开始&#xff0c;OCM考试中SPM必考。 其他的AWR、ASH、SQLHC、SQLT、SQL profile等换作下一个话题…...

构建Docker镜像的Dockerfile文件详解

文章目录 前言Dockerfile 案例docker build1. 基本构建2. 指定 Dockerfile 路径3. 设置构建时变量4. 不使用缓存5. 删除中间容器6. 拉取最新基础镜像7. 静默输出完整示例 docker runDockerFile 入门syntax指定构造器FROM基础镜像RUN命令注释COPY复制ENV设置环境变量EXPOSE暴露端…...