CN112115042A - 一种基于采集回放的软件测试方法和系统 - Google Patents
一种基于采集回放的软件测试方法和系统 Download PDFInfo
- Publication number
- CN112115042A CN112115042A CN202010807081.1A CN202010807081A CN112115042A CN 112115042 A CN112115042 A CN 112115042A CN 202010807081 A CN202010807081 A CN 202010807081A CN 112115042 A CN112115042 A CN 112115042A
- Authority
- CN
- China
- Prior art keywords
- data
- playback
- data packet
- acquisition
- test
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于采集回放的软件测试方法和系统,该测试方法包括:采集客户端对用户请求进行数据采集、脱敏和上传;数据处理器对采集的数据进行接收、解析、建模和存储;推荐引擎将采集的海量数据,根据业务模型和数据特征转化为精简的测试用例;回放触发器向测试系统发送批量测试任务,并回收用例运行结果。采集客户端采集的数据包,包含入口请求的入参、返回值和全部对外依赖的出入参;回放客户端可以直接使用采集的数据包,不需要人工干预和外部依赖即可自动执行测试。通过使用这种软件测试方法,大幅降低了测试用例的构造成本,提高了测试有效性和确定性,提升了软件的质量和稳定性,加速了软件开发周期。
Description
技术领域
本发明属于软件测试领域,尤其涉及一种基于采集回放的软件测试方法和系统。
背景技术
随着互联网的快速发展,用户对软件系统的质量要求越来越高,系统需要时刻提供稳定的服务。软件正式发布之前,软件开发商必须通过完整的回归测试,保证新发布的软件版本,不对提供的现有服务造成不良影响。
但是随着软件系统规模越来越大,需要回归的业务场景范围也越来越大,回归的场景达到了几万甚至更多。手工测试不能满足执行效率的要求;常规的自动化手段在用例构造成本较高,其执行的稳定性也不能满足高频回归高频发布的需要,从而影响软件的开发效率和发布质量。在现有的软件测试过程中,具体存在以下缺陷:
(1)测试人员必须通过编写测试用例从而进行自动化验证。虽然当测试用例编写完成后,即可进行自动化执行,但是为每种测试场景单独编写用例,其测试设计成本和编码成本,都需要专业测试人员耗费大量人工时间和精力。现有代码织入方案需要在业务代码内增加代码或配置,对业务系统代码有侵入。
(2)由于测试用例的编写成本和编写门槛比较高,因此测试用例常出现的问题是覆盖场景不够丰富,容易出现测试遗漏。
(3)测试用例的执行是单任务单线程的,执行效率较低,测试人员需要等待较长时间才能获取到用例的执行结果。另外由于测试环境比较复杂,测试用例不一定能准确地在部署了测试代码的机器上运行,测试人员需要反复检查,同样也耗费大量的时间成本。
(4)自动化测试用例执行,会发生中间件调用,这样就会对外部数据和外部系统造成依赖,使测试用例的执行不够稳定,经常会因为外部数据的状态变化或外部系统的变化,导致用例运行不符合预期或不能及时发现问题。
发明内容
本发明的目的在于针对现有技术的不足,提供一种基于采集回放的软件测试方法和系统。
本发明的目的是通过以下技术方案来实现的:一种基于采集回放的软件测试系统,所述系统包括:
采集客户端:对用户请求进行数据采集、脱敏和上传;
数据处理器:对采集的数据进行接收、解析、建模和存储;
推荐引擎:将采集的海量数据,根据业务模型和数据特征转化为精简的测试用例;
回放执行引擎:向测试系统发送批量测试任务,并回收用例运行结果,生成测试报告。
进一步地,采集客户端随应用生产阶段部署,通过接口读取应用采集配置信息,在入口、指定方法和中间件方法接口处,使用字节码增强技术进行动态代码插桩,在用户请求中,同步记录请求的出入参、外部系统调用的入参和返回值,组装成数据包;异步地对数据包的数据进行脱敏和加密处理,脱敏处理去除业务敏感或用户隐私信息,加密处理对采集的数据包进行数据保护;对脱敏和加密后的数据,异步通过websocket或消息中间件,将数据包上传至系统服务端。
进一步地,数据接收器接收来自采集客户端上传的数据,包括消息接收和通过websocket上传的数据;数据解析引擎包含对加密数据进行解密,并解析为业务规则和标签规则可识别的模型对象;建模引擎对模型对象进行规则识别和标签解析,为数据构建业务索引;存储器包含索引存储和数据存储两部分,分别保存数据的业务索引和原始数据包数据。
进一步地,推荐引擎精简数据,包含多种精简粒度:代码行、执行方法、业务特征、数据特征,这些粒度可以独立存在或者相互叠加。
进一步地,回放执行引擎随应用测试阶段部署,通过接口读取应用回放配置信息,在入口、指定方法和中间件方法接口处,使用字节码增强技术进行动态代码插桩,用于使用采集数据包进行回放;回放执行引擎能够批量触发用例或者数据的回放,能够回收回放执行产生的差异报告,并在web页面上进行聚合展示。
一种基于上述基于采集回放的软件测试系统的软件测试方法,在应用启动中或启动完成后,使用字节码增强技术进行代码插桩,用于请求数据采集或数据回放;通过人工或自动生成的业务规则,识别数据包中的业务含义;根据业务模型和数据特征,将线上采集的海量数据,人工或自动转换为精简的测试用例集合;代码或者配置发生变更时,可以使用存量的测试用例集合对已有业务进行快速完整的自动化测试回归。
进一步地,请求数据采集具体为:当线上流量请求进入入口方法插桩的切面,克隆入口方法调用的入参;当请求执行到指定方法或中间件方法插桩的切面,克隆方法调用的入参和返回值;当线上流量请求完毕,克隆入口方法调用的返回值;将以上克隆得到的数据打包成数据包,压缩后传输至服务端;
回放的过程具体为:回放请求使用采集数据包的入口方法入参作为调用参数,调用入口方法;回放请求执行到指定方法或中间件方法插桩的切面,使用采集数据包中的返回值作为返回值;回放请求执行完毕,克隆本次方法调用的返回值;将本次方法的返回值,与采集数据包中的返回值进行对比,比较其中的差异字段,生成差异报告。
进一步地,通过人工或自动生成的业务规则,识别数据包中的业务含义,具体为:通过暴露的webSocket接口或者消息中间件,接收采集客户端上传的数据包;对采集的数据包依次进行解压、解密、反序列化,解析为业务规则和标签规则可识别的模型对象;对这些对象进行规则识别和打标,放入模型库。
进一步地,根据线上采集的模型特征库,对采集流量进行去重,测试用例集为采集数据的精简集;模型特征可以包含:数据包的结构特征和业务规则特征等维度,可以选择一种或多种维度。
进一步地,当代码或者配置发生变更时,测试用例能够执行回放,测试用例在回放后,自动对比采集数据运行结果和回放运行结果的差异,并自动产生差异报告。
本发明的有益效果是:本发明由采集客户端在业务系统内进行动态注入,采集生产环境用户请求的数据包,通过数据处理器对采集的数据进行接收、解析、建模和存储,由推荐引擎将线上采集的海量数据转换为精简的测试用例,在测试环境,利用回放执行引擎向被测试系统批量发送测试任务,由回放客户端进行测试执行,并回收运行结果来实现的。本发明通过数据采集的方式,免除了测试用例的构造和编写成本;使用推荐引擎,降低了业务建模和测试用例去重的成本;回放执行引擎,通过并发、定向执行的方式,大幅降低了用例的执行和校验成本。在采用该基于采集回放的软件测试方法的整个过程中,大大减少了人工的参与,节约了测试的时间。本发明大幅降低测试用例的构造成本,提升了执行效率和用例的稳定性。
附图说明
为了更清楚的说明本发明的实施例中的技术方案,下面将对本发明实施例描述中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例提供的基于采集回放的软件测试方法的流程示意图;
图2为本发明实施例提供的基于采集回放的软件测试方法的采集过程流程图;
图3为本发明实施例提供的基于采集回放的软件测试方法的回放过程流程图;
图4为本发明实施例提供的基于采集回放的软件测试方法的用例精简过程图;
图5为本发明实施例提供的基于采集回放的软件测试系统的结构方框图。
具体实施方式
为了使本发明解决的技术问题、采用的技术方案和达到的技术效果更加清楚,下面将结合附图对本发明实施例的技术方案作进一步的详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
为了能够更清楚的表述本实施例中的基于采集回放的软件测试系统,下面将结合图5对本发明实施例的技术方案作进一步详细描述。显然,所描述的实施例,仅是本发明的一种实施例,而非全部实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。本发明所述软件测试任务的测试内容是回归测试。
请参考图5,是本发明实施例提供的基于采集回放的软件测试系统的结构方框图。本实施例的基于采集回放的软件测试系统主要应用于java语言开发的应用软件的测试,能够在线上系统采集数据包,并且经过处理后在线下测试环境进行回放。采集机器和回放机器可处于不同的局域网环境,只需要与软件测试系统的网络联通即可。
如图5所示,该基于采集回放的软件测试系统,主要包括采集客户端、数据处理器、用例推荐引擎、回放执行引擎和回放客户端。
采集客户端S501:置于线上环境,与线上被测系统一同部署,用于采集线上流量。采集客户端用于采集被测系统调用的出入参和子调用出入参,并生成数据包,经过脱敏、加密、压缩后异步发送至数据处理器。
数据处理器S502:用于对采集客户端采集的数据进行接收、解析、建模和存储。接收了采集数据包之后,数据处理器通过解压、解密、反序列化数据,根据测试人员配置的解析规则,识别采集数据中的业务属性,如订单ID,买家ID,业务特征等,并为其建立具有业务语义的索引,用于后续的检索需要。
用例推荐引擎S503:用于将线上采集的海量流量,通过提取数据特征的方式筛选用例,精简为在软件集成测试阶段的有限时间内可执行完成的测试用例集。数据特征可以是数据包内的所有元素,例如入口方法、出入参、子调用出入参,由测试系统的用户自主选择这些元素中一种或者多种。
回放客户端S504:置于线下测试环境,与线下被测系统一同部署,用于用例推荐引擎获得的测试用例的采集数据的回放。回放客户端接收测试系统发送的回放指令,并使用回放执行引擎对采集的测试用例数据包进行回放。回放完毕之后,将回放调用的返回值与采集数据包中的返回值进行对比,如果对比一致,则认为用例执行成功,如果对比存在差异,则认为用例执行失败。
回放执行引擎S505:用于软件测试系统批量触发回放测试任务,并接收对比差异,生成任务运行结果报告。回放执行引擎支持多回放客户端多线程的并发执行,以达到提升用例执行效率的目的。接收回放对比差异,标记测试用例执行成败与否,并根据具体的对比差异,针对差异字段进行聚合展示,形成运行结果报告,便于用户进行差异分析。
以上所描述的系统实施例仅仅是示意性的,其中数据处理器S502、用例推荐引擎S503和回放执行引擎S505可以位于同一个物理地址,也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行上述各个实施例或者实施例的某些部分的方法。
请参考图1,其是本发明实施例提供的基于采集回放的软件测试方法的流程示意图。本实施例的基于采集回放的软件测试方法主要应用于各种java语言开发的应用软件的测试,能够在线上系统采集数据包,并且经过处理后在线下测试环境进行回放,包括以下步骤:
步骤S101:采集客户端采集生产环境中的用户请求数据包:
采集客户端通过动态字节码增强技术和插桩代码,记录入口请求的出入参,从而不再需要测试人员进行测试用例的编码。采集客户端采集的是线上真实用户的调用,调用量足够的多,从而为软件测试提供了足够多的测试样本,真实性也远大于测试人员编写的测试用例。如图2所示,采集过程分为三个主要阶段,分别为采集客户端初始化阶段、用户请求数据采集阶段、数据包处理和发送阶段,包括以下子步骤:
步骤S201:采集客户端初始化。在采集客户端初始化过程中,客户端完成了以下动作:
(1)拉取采集配置:获取需要采集的入口方法、需要隔离的中间件、测试人员额外指定的采集函数和采集比例等采集配置信息。
(2)动态代码插桩:使用动态字节码增强的技术,在步骤(1)获取的入口方法、中间件和指定的采集函数入口处进行动态代码插桩,用于记录采集入口方法、中间件调用和指定函数的入参和返回值,使软件调用具备采集能力。本实施例采用的动态字节码增强技术,使用了ASM框架进行AOP(Aspect Oriented Programming,面向切面编程),直接修改字节码,能够根据需要插入所需的代码段,且不需要改动业务系统的原始代码。
(3)采集事件通知:以心跳的形式通知软件测试系统,采集客户端已经初始化完毕,可以开启采集。
步骤S202:用户请求数据采集。当采集客户端初始化完毕,软件测试系统下发采集命令之后,即可开始数据采集。用户流量进入之后,开始进入请求采集,包括以下子步骤:
(1)流量进入采集入口切面,深拷贝采集入口切面的输入参数,作为主调用入参;
(2)流量进入中间件方法切面,深拷贝中间件方法切面的输入参数及返回值,保存为子调用对象;
(3)流量进入自定义方法切面,深拷贝自定义函数切面的输入参数及返回值,保存为自定义采集对象;
(4)流量离开采集入口切面,深拷贝采集入口切面的返回值,作为主调用返回值;
(5)将单次请求中步骤(1)~(4)得到的以上信息(主调用入参、子调用对象、自定义采集对象和主调用返回值),组装成数据对象,进入下一处理阶段。
步骤S203:数据包处理和发送。当数据采集完毕,需要异步传输至软件测试系统。采集客户端需要完成以下动作:
(1)数据包脱敏:隐藏或者混淆步骤S202组装的数据包中的用户隐私字段,例如采集数据中的地址、联系方式、密码,降低敏感信息被泄露的风险;
(2)数据包加密:为了进一步降低数据泄露的风险,采集客户端需要对步骤(1)脱敏后的数据包的数据进行加密处理,常见的加密算法包括对称加密算法AES(AdvancedEncryption Standard,高级加密标准)或者非对称加密算法RSA。一般采用对称加密算法,加密速度更快;
(3)数据包压缩:一般步骤(2)加密后的采集数据包大小为300KB,经过压缩之后,例如采用GZIP压缩方式,传输大小可降至100KB以内,降低了网络传输的成本和存储成本;
(4)数据包发送:完成步骤(3)的压缩处理的数据包,即可发送至软件测试系统。常见的数据传输手段包括websocket传输、通过消息中间件传输和通过调用RPC(RemoteProcedure Call,远程过程调用)服务传输。
对于采集客户端采集的数据包,可以不需要额外信息,即可作为测试用例运行,其包含以下特征:
采集的数据包,可以立即执行回放,而不需要其它额外信息;
采集的数据包,除了被测系统之外,而不需要依赖其它外部系统;
采集的数据包,每次回放执行都是独立的,没有执行顺序的依赖;
采集的数据包,相同测试环境下,多次回放执行结果不变,即可以重复执行,得到相同的运行结果。
综上所述,本实施例的数据采集过程,包含采集客户端初始化、用户请求数据采集、数据包处理和发送三个阶段。通过动态代码插桩的方式,降低了对业务系统的侵入,能够做到业务系统无感接入,避免污染业务代码。数据采集阶段通过织入的代码片段,采集用户请求的出入参、外部依赖的出入参、自定义切面的出入参,并将其按照请求维度组装成一个个数据包;在数据处理阶段,异步地对数据包进行脱敏、加密,充分降低敏感数据泄露的风险,并且经过数据压缩,降低传输和存储成本,减少内存占用和对业务系统的影响。
步骤S102:数据处理器对步骤S101采集的用户请求数据包进行接收、解析、建模和存储,包括以下子步骤:
(1)数据处理器接收步骤S203通过websocket接口或者消息中间件上传的用户请求数据包。其中,websocket接口不需要中间件服务的支持,只需要网络连通即可,相关依赖较少;通过消息中间件,则具备可堆积的特性。因此数据处理器可以根据实际使用场景,由研发人员选择使用websocket接口或者消息中间件进行数据的上传和接收。
(2)数据处理器将步骤(1)接收的用户请求数据包解析为表达式规则引擎可识别的结构化数据;解析方式包含解压、解密和反序列化。
(3)数据处理器对步骤(2)解析完毕的数据对象进行建模和存储。建模过程是通过表达式规则引擎识别数据对象中的方法入口、子调用中的特定字段,形成可描述该业务的标签项,此处称之为业务标签,并通过这些业务标签,为被测系统的建立业务模型,例如一条采集数据的业务标签可以是猫超、购物车、下单、使用优惠等。存储过程是将数据对象的业务标签进行存储,并与步骤(1)采集到的原始数据关联保存,使之可以通过这些业务标签进行检索。
步骤S103:推荐引擎将线上采集的海量用户请求数据转换为精简的测试用例。
本发明通过数据采集的方式得到足够丰富的用户的流量,在采集回放的方式下,需要对线上采集的海量数据进行精简,获得覆盖更多业务场景的最小集合,用于持续集成。其中,数据精简是全自动执行的,但为了达到更好的效果,需要支持人工介入;主要手段是通过计算用户请求数据包的多维特征,去掉特征重复的数据,将有差异的用例保存为测试用例。多维特征由代码行、执行方法、业务标签、数据特征中的一种或几种组成,去重粒度通过选取不同维度进行放大或缩小。
为了更清楚地表述本基于采集回放的软件测试方法中推荐引擎的的用例精简过程,请参考图4,为本发明实施例中推荐引擎的用例精简过程。为了将线上海量的采集数据,精简为可在软件集成测试阶段有限时间内执行完毕的测试用例集,必须对采集数据进行精简。在本实施例中,精简过程由推荐引擎完成,主要包含采集数据的特征提取,用例集数据的特征提取,差异特征推荐和数据特征刷新,包括以下子步骤:
步骤S401:采集数据的特征提取。从步骤S102数据处理器存储的海量数据中逐条提取数据特征,包括入口方法、子调用方法及执行顺序、入口方法参数及返回值的指定字段或指定字段的组合、子调用方法及返回值的指定字段或指定字段的组合。这些信息表示了这条数据与其它数据的业务差异,可以依此进行线上流量的去重。
步骤S402:用例集数据的特征提取。与步骤S401的提取的数据特征相同,区别在于不是从采集的海量数据中提取,而是从已有的测试用例集中提取,得到用例集数据特征集合。在起始阶段,不存在已有的测试用例,此时用例集数据特征集合为空。
步骤S403:差异特征推荐。当步骤S401提取的数据特征不在步骤S402得到的用例集数据特征集合中时,将提取出该数据特征的数据推荐为一条新的测试用例。通过步骤S402将新的测试用例的数据特征放入用例集数据特征集合,当某条采集数据的特征与该测试用例的数据特征一致时,这条采集数据视为重复流量不被加入测试用例集。
步骤S404:数据特征刷新。当数据特征计算方式发生变化时,则需要刷新数据特征,从而避免出现推荐用例膨胀的问题。首先需要停止步骤S403用例推荐,然后按照新的计算方式重新计算已有的测试用例集的数据特征,再重新开始步骤S403用例推荐,并采用新的计算方式执行步骤S401提取数据特征;待重新计算历史采集数据的数据特征之后,才能使用历史的数据进行步骤S403推荐用例。
综上所述,本实施例的用例推荐过程,主要包含采集数据的特征提取、用例集数据的特征提取、差异特征推荐和数据特征刷新四个部分。通过从入口方法、子调用方法和执行顺序、入口方法参数和返回值、子调用方法和返回值里提取数据特征,把海量的线上数据精简为可以在集成测试阶段执行完毕的有限用例集。当特征计算方式发生变化时,需要重新计算用例集的特征集合,避免推荐的用例数量不收敛引起的用例膨胀的问题。
步骤S104:回放执行引擎批量触发用例或者数据的回放,并回收用例运行结果。回放执行引擎支持单条或者批量进行测试用例或者采集数据的回放执行;支持定向至某一或者某几个测试机器进行回放执行;支持单线程或者多线程的进行回放执行。
本发明通过回放执行引擎向测试系统批量发送测试任务,能够高效的执行测试用例。回放执行引擎支持多机多线程多任务的定向提交,大幅提升了测试用例的并发执行能力。在本发明中,回放执行引擎在接收到回放命令后,会根据命令要求,无需人工参与地,立即并发提交回放任务,支持指定并发线程数和目标测试机器,保证能够准确地在部署了测试代码的机器上运行,并且回收执行结果。以600个测试样本为例,在现有的测试方案中,1个测试样本需要执行1秒,则执行完成至少需要10分钟,这还不包括确认执行环境的时间;而在本实施例中,600个测试样本,使用10个线程在单机上运行只需要1分钟,并且可以通过提高线程数和机器数,继续提升执行效率。
为了更清楚的表述本基于采集回放的软件测试方法的回放过程,请参考图3,是本基于采集回放的软件测试方法的回放过程流程图;回放过程分为四个主要阶段,分别为回放客户端初始化阶段、回放执行阶段、上下文对比阶段和差异报告发送阶段,包括以下子步骤:
步骤S301:回放客户端初始化。在回放客户端处理过程中,客户端完成了以下动作:
(1)拉取回放配置:获取需要回放的入口方法、需要隔离的中间件和研发人员自定义的对比配置(如对比忽略项等)。应用采集配置信息通常与应用回放配置信息一致。
(2)动态代码插桩:使用动态字节码增强的技术,对步骤(1)获取的入口方法、中间件方法的接口处进行动态代码插桩,使软件调用具备回放能力。同样采用的动态字节码增强技术,使用了ASM框架直接修改字节码,插入需要的代码段。
(3)回放事件通知:以心跳的形式通知软件测试系统,回放客户端已经初始化完毕,可以执行回放任务。
步骤S302:回放执行阶段。当回放客户端初始化完毕,软件测试系统即可触发回放命令。回放执行的主要步骤为:
(1)软件测试系统发送回放请求,回放客户端解析请求内容,读取步骤S103推荐的测试用例作为回放数据包,对回放数据包进行解压、解密和反序列化处理,获取回放数据包对象;
(2)使用回放数据包采集的入参作为入参,回放数据包采集的入口方法作为入口方法,使用反射方式调用入口方法;
(3)回放执行进入中间件方法切面时,深拷贝中间件方法的输入参数,并在数据包的一组步骤S202得到的中间件子调用中,通过中间件方法签名和中间件方法入参的相似度匹配,找到最合适的子调用,直接返回该子调用采集的返回值,而不实际发生中间件调用。在本发明的测试方案中,通过回放的方式,中间件调用使用采集时刻的子调用返回值,而不实际发生中间件调用,避免了对外部数据和外部系统的依赖;所有的依赖数据和依赖外部服务在采集时刻已经被固化下来,可以在外部数据发生改变或不存在、外部依赖发生改变或不存在时,依然成功执行,并不对回放结果造成影响,从而降低了测试用例对外部系统的依赖,大幅提升了用例执行的稳定性和确定性。
(4)回放请求执行完毕,离开入口切面时,深拷贝入口方法的返回值,作为回放数据包的主调用返回值;
(5)将步骤(4)回放请求的入口方法返回值、步骤(3)中间件子调用的入参,组装成数据对象,进入下一处理阶段。
步骤S303:上下文对比。回放完毕之后,校验被测系统的执行结果是否与回放的采集时的执行结果保持一致,当与采集时一致时,则不对现有业务造成影响;不一致时,则对现有业务造成了影响,被测系统可能存在错误;在上下文对比阶段,需要完成以下步骤:
(1)将被测系统采集到的入口方法返回值和步骤S302回放得到的数据对象中的入口方法返回值进行对比,用于保障执行结果一致;
(2)将被测系统采集到的子调用入参、中间件调用入参和步骤S302回放得到的数据对象中的中间件子调用入参进行对比,用于保障对外读写操作一致;
(3)将被测系统采集到的自定义采集的入参和返回值和步骤S302回放得到的数据对象中的自定义采集的入参和返回值进行对比,用于保障中间步骤的执行状态一致;
(4)最后将步骤(1)~(3)的对比结果组装为差异报告,对其进行加密和压缩后发送至软件测试系统,避免敏感数据泄漏和降低数据传输成本。当差异报告为不存在对比差异时,用例执行被标记为运行成功;当差异报告为存在对比差异时,用例执行被标记为运行失败,并展示差异字段,且当批量运行用例时,还需将差异字段进行聚集展示,优先展示失败用例的高频差异字段。
综上所述,本实施例的数据回放过程,包含回放客户端初始化、回放执行、上下文对比和差异报告发送四个阶段。通过动态代码插桩的方式,降低了对业务系统的侵入,能够做到业务系统无感接入,避免污染业务代码。数据回放阶段通过织入的代码片段,使用采集的数据包进行回放,避免了对外部数据和外部系统的依赖,提升了用例执行的稳定性和确定性;在上下文对比阶段,通过对比入口调用返回值、子调用入参、自定义采集入参和返回值,确保在测试系统中的执行结果和采集时刻一致,保障不对外部系统造成不利影响;最后将对比结果组装成差异报告,发送至测试系统服务端,用于标记用例执行结果。
综上所述,本实施例由采集客户端采集生产环境用户请求的数据包,数据处理器对采集的数据进行接收、解析、建模和存储,推荐引擎将线上采集的海量数据转换为精简的测试用例,回放执行引擎向测试系统批量发送测试任务,并回收运行结果。通过数据采集的方式,免除了测试用例的构造和编写成本;使用推荐引擎,降低了业务建模和测试用例去重的成本;回放执行引擎,通过并发、定向执行的方式,大幅降低了用例的执行和校验成本。在采用该基于采集回放的软件测试方法的整个过程中,大大减少了人工的参与,节约了测试的时间。
最后应说明的是:以上实施例仅用于说明本发明的技术方案,不应理解为对本发明的限制。尽管参照前述实施例对本发明进行了详细的说明,本领域普通技术人员可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种基于采集回放的软件测试系统,其特征在于,所述系统包括:
采集客户端:对用户请求进行数据采集、脱敏和上传;
数据处理器:对采集的数据进行接收、解析、建模和存储;
推荐引擎:将采集的海量数据,根据业务模型和数据特征转化为精简的测试用例;
回放执行引擎:向测试系统发送批量测试任务,并回收用例运行结果,生成测试报告。
2.根据权利要求1所述基于采集回放的软件测试系统,其特征在于,采集客户端随应用生产阶段部署,通过接口读取应用采集配置信息,在入口、指定方法和中间件方法接口处,使用字节码增强技术进行动态代码插桩,在用户请求中,同步记录请求的出入参、外部系统调用的入参和返回值,组装成数据包;异步地对数据包的数据进行脱敏和加密处理,脱敏处理去除业务敏感或用户隐私信息,加密处理对采集的数据包进行数据保护;对脱敏和加密后的数据,异步通过websocket或消息中间件,将数据包上传至系统服务端。
3.根据权利要求1所述基于采集回放的软件测试系统,其特征在于,数据接收器接收来自采集客户端上传的数据,包括消息接收和通过websocket上传的数据;数据解析引擎包含对加密数据进行解密,并解析为业务规则和标签规则可识别的模型对象;建模引擎对模型对象进行规则识别和标签解析,为数据构建业务索引;存储器包含索引存储和数据存储两部分,分别保存数据的业务索引和原始数据包数据。
4.根据权利要求1所述基于采集回放的软件测试系统,其特征在于,推荐引擎精简数据,包含多种精简粒度:代码行、执行方法、业务特征、数据特征,这些粒度可以独立存在或者相互叠加。
5.根据权利要求1所述基于采集回放的软件测试系统,其特征在于,回放执行引擎随应用测试阶段部署,通过接口读取应用回放配置信息,在入口、指定方法和中间件方法接口处,使用字节码增强技术进行动态代码插桩,用于使用采集数据包进行回放;回放执行引擎能够批量触发用例或者数据的回放,能够回收回放执行产生的差异报告,并在web页面上进行聚合展示。
6.一种基于权利要求1所述基于采集回放的软件测试系统的软件测试方法,其特征在于,在应用启动中或启动完成后,使用字节码增强技术进行代码插桩,用于请求数据采集或数据回放;通过人工或自动生成的业务规则,识别数据包中的业务含义;根据业务模型和数据特征,将线上采集的海量数据,人工或自动转换为精简的测试用例集合;代码或者配置发生变更时,可以使用存量的测试用例集合对已有业务进行快速完整的自动化测试回归。
7.根据权利要求6所述软件测试方法,其特征在于,请求数据采集具体为:当线上流量请求进入入口方法插桩的切面,克隆入口方法调用的入参;当请求执行到指定方法或中间件方法插桩的切面,克隆方法调用的入参和返回值;当线上流量请求完毕,克隆入口方法调用的返回值;将以上克隆得到的数据打包成数据包,压缩后传输至服务端;
回放的过程具体为:回放请求使用采集数据包的入口方法入参作为调用参数,调用入口方法;回放请求执行到指定方法或中间件方法插桩的切面,使用采集数据包中的返回值作为返回值;回放请求执行完毕,克隆本次方法调用的返回值;将本次方法的返回值,与采集数据包中的返回值进行对比,比较其中的差异字段,生成差异报告。
8.根据权利要求6所述软件测试方法,其特征在于,通过人工或自动生成的业务规则,识别数据包中的业务含义,具体为:通过暴露的webSocket接口或者消息中间件,接收采集客户端上传的数据包;对采集的数据包依次进行解压、解密、反序列化,解析为业务规则和标签规则可识别的模型对象;对这些对象进行规则识别和打标,放入模型库。
9.根据权利要求8所述软件测试方法,其特征在于,根据线上采集的模型特征库,对采集流量进行去重,测试用例集为采集数据的精简集;模型特征可以包含:数据包的结构特征和业务规则特征等维度,可以选择一种或多种维度。
10.根据权利要求6所述软件测试方法,其特征在于,当代码或者配置发生变更时,测试用例能够执行回放,测试用例在回放后,自动对比采集数据运行结果和回放运行结果的差异,并自动产生差异报告。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010807081.1A CN112115042A (zh) | 2020-08-12 | 2020-08-12 | 一种基于采集回放的软件测试方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010807081.1A CN112115042A (zh) | 2020-08-12 | 2020-08-12 | 一种基于采集回放的软件测试方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112115042A true CN112115042A (zh) | 2020-12-22 |
Family
ID=73805215
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010807081.1A Pending CN112115042A (zh) | 2020-08-12 | 2020-08-12 | 一种基于采集回放的软件测试方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112115042A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112799966A (zh) * | 2021-03-29 | 2021-05-14 | 广州嘉为科技有限公司 | 可扩展插件化批量生成测试数据方法、系统、设备及介质 |
CN113407989A (zh) * | 2021-05-26 | 2021-09-17 | 天九共享网络科技集团有限公司 | 数据脱敏的方法、装置、电子设备及存储介质 |
CN113656293A (zh) * | 2021-08-05 | 2021-11-16 | 上海钧正网络科技有限公司 | 一种用于流量回放的数据去重方法、测试方法、装置、计算机设备及存储介质 |
CN113709003A (zh) * | 2021-09-02 | 2021-11-26 | 上海天旦网络科技发展有限公司 | 通过网络流量数据自动生成测试用例的系统、方法及介质 |
CN113742239A (zh) * | 2021-09-14 | 2021-12-03 | 口碑(上海)信息技术有限公司 | 终端阅读器回归测试系统、回归测试方法和交互方法 |
CN113806228A (zh) * | 2021-09-27 | 2021-12-17 | 武汉众邦银行股份有限公司 | 一种用于生成python函数测试用例的方法、装置及存储介质 |
CN114721957A (zh) * | 2022-04-14 | 2022-07-08 | 合肥卓讯云网科技有限公司 | 一种软硬件自动化测试方法和装置 |
CN116340187A (zh) * | 2023-05-25 | 2023-06-27 | 建信金融科技有限责任公司 | 规则引擎迁移测试方法、装置、电子设备及存储介质 |
CN116881145A (zh) * | 2023-07-10 | 2023-10-13 | 易方达基金管理有限公司 | 基于流量回放的接口测试方法、装置、设备以及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105302710A (zh) * | 2014-07-03 | 2016-02-03 | 腾讯科技(深圳)有限公司 | 一种确定需要回归测试的测试用例的方法和装置 |
CN106886492A (zh) * | 2017-02-13 | 2017-06-23 | 北京趣拿软件科技有限公司 | 基于数据回放的测试方法和测试装置 |
CN110221965A (zh) * | 2019-05-09 | 2019-09-10 | 阿里巴巴集团控股有限公司 | 测试用例生成、测试方法、装置、设备及系统 |
US20200183811A1 (en) * | 2018-12-06 | 2020-06-11 | Microsoft Technology Licensing, Llc | Automatically Performing and Evaluating Pilot Testing of Software |
-
2020
- 2020-08-12 CN CN202010807081.1A patent/CN112115042A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105302710A (zh) * | 2014-07-03 | 2016-02-03 | 腾讯科技(深圳)有限公司 | 一种确定需要回归测试的测试用例的方法和装置 |
CN106886492A (zh) * | 2017-02-13 | 2017-06-23 | 北京趣拿软件科技有限公司 | 基于数据回放的测试方法和测试装置 |
US20200183811A1 (en) * | 2018-12-06 | 2020-06-11 | Microsoft Technology Licensing, Llc | Automatically Performing and Evaluating Pilot Testing of Software |
CN110221965A (zh) * | 2019-05-09 | 2019-09-10 | 阿里巴巴集团控股有限公司 | 测试用例生成、测试方法、装置、设备及系统 |
Non-Patent Citations (1)
Title |
---|
吴卿蓉 等: "面向协议栈单元测试定时器自动回放的方法", 《信息技术》 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112799966A (zh) * | 2021-03-29 | 2021-05-14 | 广州嘉为科技有限公司 | 可扩展插件化批量生成测试数据方法、系统、设备及介质 |
CN113407989A (zh) * | 2021-05-26 | 2021-09-17 | 天九共享网络科技集团有限公司 | 数据脱敏的方法、装置、电子设备及存储介质 |
CN113656293A (zh) * | 2021-08-05 | 2021-11-16 | 上海钧正网络科技有限公司 | 一种用于流量回放的数据去重方法、测试方法、装置、计算机设备及存储介质 |
CN113709003A (zh) * | 2021-09-02 | 2021-11-26 | 上海天旦网络科技发展有限公司 | 通过网络流量数据自动生成测试用例的系统、方法及介质 |
CN113742239A (zh) * | 2021-09-14 | 2021-12-03 | 口碑(上海)信息技术有限公司 | 终端阅读器回归测试系统、回归测试方法和交互方法 |
CN113806228A (zh) * | 2021-09-27 | 2021-12-17 | 武汉众邦银行股份有限公司 | 一种用于生成python函数测试用例的方法、装置及存储介质 |
CN114721957A (zh) * | 2022-04-14 | 2022-07-08 | 合肥卓讯云网科技有限公司 | 一种软硬件自动化测试方法和装置 |
CN116340187A (zh) * | 2023-05-25 | 2023-06-27 | 建信金融科技有限责任公司 | 规则引擎迁移测试方法、装置、电子设备及存储介质 |
CN116340187B (zh) * | 2023-05-25 | 2023-08-15 | 建信金融科技有限责任公司 | 规则引擎迁移测试方法、装置、电子设备及存储介质 |
CN116881145A (zh) * | 2023-07-10 | 2023-10-13 | 易方达基金管理有限公司 | 基于流量回放的接口测试方法、装置、设备以及存储介质 |
CN116881145B (zh) * | 2023-07-10 | 2024-03-15 | 易方达基金管理有限公司 | 基于流量回放的接口测试方法、装置、设备以及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112115042A (zh) | 一种基于采集回放的软件测试方法和系统 | |
CN109034993B (zh) | 对账方法、设备、系统及计算机可读存储介质 | |
US9031997B2 (en) | Log file compression | |
CN112184872B (zh) | 基于大数据和云计算的游戏渲染优化方法及云端计算中心 | |
CN110569214A (zh) | 用于日志文件的索引构建方法、装置及电子设备 | |
CN111666201A (zh) | 回归测试方法、装置、介质及电子设备 | |
CN111339118A (zh) | 基于Kubernetes的资源变更历史记录方法及装置 | |
CN109966742A (zh) | 游戏运行中获取渲染性能数据的方法及装置 | |
CN110058962A (zh) | 确定虚拟机快照的一致性级别的方法、设备和计算机程序产品 | |
CN112729868A (zh) | 一种车辆诊断方法、装置、设备及介质 | |
CN110688111A (zh) | 业务流程的配置方法、装置、服务器和存储介质 | |
CN111274215A (zh) | 一种基于分布式的日志统一管理方法 | |
CN109684207B (zh) | 操作序列封装的方法、装置、电子设备及存储介质 | |
CN107025233B (zh) | 一种数据特征的处理方法及装置 | |
CN117271584A (zh) | 数据处理方法及装置、计算机可读存储介质和电子设备 | |
CN111143310B (zh) | 日志记录方法及装置、可读存储介质 | |
US20230086564A1 (en) | System and method for automatic discovery of candidate application programming interfaces and dependencies to be published | |
CN108628909B (zh) | 信息推送方法和装置 | |
CN113742099B (zh) | 基于集合的消息消费方法、生产方法、系统及存储介质 | |
US8825589B2 (en) | Rule correlation to rules input attributes according to disparate distribution analysis | |
CN112579428B (zh) | 接口测试的方法、装置、电子设备和存储介质 | |
CN114169318A (zh) | 进程识别方法、装置、设备、介质和程序 | |
CN113419957A (zh) | 基于规则的大数据离线批处理性能容量扫描方法及装置 | |
CN114371866A (zh) | 业务系统的版本重构测试方法、装置和设备 | |
CN113238796B (zh) | 一种代码重构方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20201222 |
|
WD01 | Invention patent application deemed withdrawn after publication |