CN111324542B - 一种Web应用回归测试用例选择系统、方法以及设备 - Google Patents
一种Web应用回归测试用例选择系统、方法以及设备 Download PDFInfo
- Publication number
- CN111324542B CN111324542B CN202010150669.4A CN202010150669A CN111324542B CN 111324542 B CN111324542 B CN 111324542B CN 202010150669 A CN202010150669 A CN 202010150669A CN 111324542 B CN111324542 B CN 111324542B
- Authority
- CN
- China
- Prior art keywords
- test case
- module
- information
- dependency information
- stack
- 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.)
- Active
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/3684—Test management for test design, e.g. generating new test cases
-
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种Web应用回归测试用例选择系统、方法以及设备,包括:Agent模块、选择模块、收集模块以及储存模块;Agent模块用于监控Web测试用例在Web服务器端所涉及的文件并生成依赖信息;收集模块用于收集依赖信息并进行计算依赖信息的校验和;储存模块用于储存依赖信息以及依赖信息的校验和;选择模块用于调取储存模块中依赖信息的校验和,将新版本Web应用编译后的代码文件的校验和与依赖信息的校验和进行对比,根据对比结果选择出最终的测试用例。本发明不依赖于版本管理系统,通过Agent模块以及收集模块为测试收集更加完整的依赖信息,通过选择模块根据校验和来选择出最终的测试用例,大大提高Web应用回归测试的效率,减少测试的时间。
Description
技术领域
本发明涉及Web应用回归测试技术领域,尤其涉及一种Web应用回归测试用例选择系统、方法以及设备。
背景技术
目前,随着互联网以及Web技术的快速发展,Web应用正在成为重要的信息获取和交流平台。为了保证Web应用软件功能符合预期,需要进行各种的测试。回归测试就是一种用于确保软件变动不会影响软件已有功能的测试类型。
但是随着软件开发过程的不断迭代,测试用例集规模越来越大,进行一次回归测试的时间也越来越多。然而,实际上很多测试用例是冗余的,大量冗余测试用例的存在,使得测试用例的执行、管理和高维护成本巨大,但测试资源往往有限,因此需要进行测试用例选择。测试用例选择的一个主要任务是从原有测试用例集中挑选部分测试用例并尽量满足新版本测试需求。根据不同的选择目标,测试用例选择分为三类:回归测试选择(Regression Test Selection)、测试用例集约简(Test Suite Reduction)和测试用例优先级(Test Case Prioritization)。测试用例选择是一个典型的测试技术,该技术是在有限的测试资源和时间期限内,选择一个测试子集来测试变更的代码。测试套件减少或最小化,是指移除冗余测试,识别出测试套件中不可替代的测试来减少测试规模,从而减少测试成本。测试用例排序是减少持续集成回归测试工作量的一种有效方法。它旨在找出能够尽快检测出缺陷的最优用例顺序,从而提高软件的发布频率。其中,回归测试选择是测试用例演化技术中较为重要的一部分。
现假设有一程序P,P’为P的新版本程序,T为P的测试用例集,从T中选择子集T’,使得T’尽可能地测试P’中的修改部分,称为回归测试用例选择。回归测试选择通过分析软件修改影响,选择较小规模的T’,以达到较好的性价比。
在回归测试用例选择中,主流的方法是依赖关系分析方法,依赖关系分析方法也可进一步分为:1)基于静态依赖关系分析的回归测试用例选择和2)基于动态依赖关系分析的测试选择。基于静态依赖关系分析的回归测试用例选择技术,是基于静态程序分析技术的实现的,从而导致其性能低,且要求测试被测试应用程序有直接的代码依赖,所以无法直接有效的应用于有大量复杂依赖信息的Web应用程序。而基于动态依赖关系分析的测试选择技术,比较适合Web应用程序,但目前的一些研究,直接应用于Web应用仍然存在一些问题。如Ekstazi(Gligoric M,Eloussi L,Marinov D,et al.Practical regression testselection with dynamic file dependencies[C].international symposium onsoftware testing and analysis,2015:211-222.)是一种轻量级的,动态的,文件粒度的RTS工具。Ekstazi的依赖信息不仅有代码文件,还有非代码文件。Ekstazi使用文件校验和计算变动信息,所以不需要版本控制系统。但是Ekstazi也有一些局限性文件粒度的依赖信息太粗,所以准确性不够,所以会选择更多的没有被变动影响的测试。HyRTS(ZhangL.Hybrid regression test selection[C].international conference on softwareengineering,2018:199-209.)是一种动态的,混合粒度的(以文件粒度为主,方法为辅)的RTS工具。相比于Ekstazi,其利用混合粒度,可以在不降低性能的情况下,提高选择的准确性。并且和ekstazi一样,使用校验和计算代码变动,所以不依赖与版本控制系统。ORTS(Huang,Sheng&Li,Zhong&Zhu,Jun&Xiao,Yanghua&Wang,Wei.(2011).A novel approachto regression test selection for J2EE applications.IEEE InternationalConference on Software Maintenance,ICSM.13-22.10.1109/ICSM.2011.6080768.)它不仅分析代码文件,还分析配置文件。但是其没有考虑测试间共享信息,且不支持分布式Web应用。Testsage(Zhong H,Zhang L,Khurshid S,et al.TestSage:Regression TestSelection for Large-Scale Web Service Testing[C].international conference onsoftware testing,verification,and validation,2019:430-440.)是一种动态的,方法粒度的,针对Web Service的RTS工具,但其是针对C++程序,且依赖与Google的源代码管理系统piper。
目前这些RTS技术仍然存在一些问题。比如无法直接用于Web测试,如Ekstazi,或者是在依赖信息收集的准确性上有问题,如testsage。主要原因有:(1)传统的RTS技术要求测试与被测程序有直接的代码依赖,但Web测试与被测应用没有直接代码依赖;(2)部署Web服务器环境开销大,故所有的Web测试会使用相同的测试环境,这使得独立收集测试依赖变得困难;(3)为了提高测试效率,会同时执行多个Web测试,这导致同一时刻,Web服务器会收到来至不同测试的请求,这也使得为独立收集测试依赖变动困难。
综上所述,现有技术中在进行Web应用回归测试时,存在着测试时间长、测试效率低下的技术问题。
发明内容
本发明提供了一种Web应用回归测试用例选择系统、方法以及设备,用于解决现有技术中在进行Web应用回归测试时,存在着测试时间长、测试效率低下的技术问题。
本发明提供的一种Web应用回归测试用例选择系统,包括Agent模块、选择模块、收集模块以及储存模块;
所述Agent模块用于监控Web测试用例在Web服务器端所涉及的文件,基于所涉及的文件生成依赖信息并对依赖信息进行序列化处理;
所述收集模块用于收集序列化处理后的依赖信息并进行反序列化解析,并计算解析后的依赖信息的校验和;
所述储存模块用于储存依赖信息以及依赖信息的校验和;
所述选择模块用于调取储存模块中依赖信息的校验和,将新版本Web应用编译后的代码文件的校验和与依赖信息的校验和进行对比,根据对比结果选择出最终的测试用例。
优选的,所述收集模块还包括校验和计算模块;所述检验和计算模块用于计算依赖信息的校验和。
优选的,所述Agent模块还包括Http请求处理监控模块、对象构造过程监控模块以及临时依赖信息管理模块;
所述Http请求处理监控模块用于监控Web测试用例的Http请求处理过程中在Web服务器端所涉及的文件并生成依赖信息;
所述对象构造过程监控模块用于监控Web测试用例的对象构造过程中在Web服务器端所涉及的文件并生成依赖信息;
所述临时依赖信息管理模块用于对Http请求处理监控模块和对象构造过程监控模块所生成的依赖信息序列化处理并保存。
优选的,所述Http请求处理监控模块还包括Http请求调用追踪模块;
所述Http请求调用追踪模块用于为Http请求处理监控模块中的Http请求插入测试ID。
一种Web应用回归测试用例选择方法,所述方法包括以下步骤:
监控Web测试用例在Web服务器端所涉及的文件,基于所涉及的文件生成依赖信息并对依赖信息进行序列化处理;
收集序列化处理后的依赖信息并进行反序列化解析,并计算解析后的依赖信息的校验和;
对依赖信息的校验和进行储存;
调取储存的依赖信息的校验和,将新版本Web应用编译后的代码文件的校验和与依赖信息的校验和进行对比,根据对比结果选择出最终的测试用例。
优选的,监控Web测试用例中的对象构造过程在Web服务器端所涉及的文件以及Http请求处理过程在Web服务器端所涉及的文件,基于所涉及的文件生成依赖信息并对依赖信息进行序列化处理。
优选的,监控Web测试用例中的对象构造过程在Web服务器端所涉及的文件的具体过程如下:
检测Web测试用例的函数执行的构造函数,判断是构造函数的开始还是结束;
若为构造函数的开始,则建立线程上下文栈thread-constructor-stack,向栈中压入一个对象构造记录单元object-constructor-record;获取线程上下文栈thread-constructor-stack的栈顶元素,向栈顶元素元素中添加所涉及的文件的信息,生成依赖信息;
若为构造函数的结束,弹出线程上下文栈thread-constructor-stack的栈顶元素,将弹出元素中记录的对象构造依赖信息进行保存;判断线程上下文栈thread-constructor-stack是否为空;如果栈非空,当从构造函数中返回时,弹出thread-constructor-stack的顶层元素,将弹出的元素和新的栈顶元素进行合并,将合并后的元素压入栈中,作为新的栈顶元素;如果栈为空,则释放该线程上下文栈thread-construtor-stack对象。
优选的,监控Web测试用例中的Http请求处理过程在Web服务器端所涉及的文件的具体过程如下:
检测Web测试用例的函数执行,若检测到的为Http请求处理的入口函数,判断是入口函数的开始还是结束;
若为开始,则新建一个线程上下文thread-http用于存储本次Http请求处理过程在Web服务器端所涉及的文件,并从Http请求处理的User-Agent字段中解析发送请求的测试ID,将函数信息和测试ID储存到线程上下文thread-http中作为依赖信息;
若为结束,将线程上下文thread-http中记录的依赖信息进行储存,当从Http请求处理入口函数返回时,释放线程上下文thread-http;
若检测到的为Http请求处理的文件访问函数,则先获取该Http请求处理的线程上下文thread-http;获取当前文件访问函数所属的类,文件访问函数参数的类型,文件访问函数返回值的类型并存储到线程上下文thread-http中作为依赖信息。
优选的,将新版本Web应用编译后的代码文件的校验和与依赖信息的校验和进行对比,根据对比结果选择出最终的测试用例的具体过程如下:
判断新版本Web应用编译后的代码文件的校验和与依赖信息的校验和是否相同;若相同,则继续检验测试用例的下一项文件依赖信息的校验和;若不相同,则保存该不相等的代码文件的信息,将依赖该代码文件的测试用例加入需要运行的测试列表中,根据用户自定义的测试过滤正则,进一步选择出最终的测试用例。
一种Web应用回归测试用例选择设备,所述设备包括处理器以及存储器;
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行上述的一种Web应用回归测试用例选择方法。
从以上技术方案可以看出,本发明具有以下优点:
本发明实施例提供的一种Web应用回归测试用例选择系统不依赖于版本管理系统,通过Agent模块以及收集模块为测试收集更加完整的依赖信息,通过选择模块根据校验和来选择出最终的测试用例,大大提高Web应用回归测试的效率,减少测试的时间,并且可以适用于具有分布式架构的Web应用。解决了现有技术中在进行Web应用回归测试时,存在着测试时间长、测试效率低下的技术问题,在实际应用中具有指导意义。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例提供的一种Web应用回归测试用例选择系统、方法以及设备的系统结构图。
图2为本发明实施例提供的一种Web应用回归测试用例选择系统、方法以及设备的方法流程图。
图3为本发明实施例提供的一种Web应用回归测试用例选择系统、方法以及设备的设备框架图。
图4为本发明实施例提供的一种Web应用回归测试用例选择系统、方法以及设备的依赖信息的格式图。
具体实施方式
本发明实施例提供了种Web应用回归测试用例选择系统、方法以及设备,用于解决现有技术中在进行Web应用回归测试时,存在着测试时间长、测试效率低下的技术问题。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1,图1为本发明实施例提供的一种Web应用回归测试用例选择系统、方法以及设备的系统结构图。
图4是本发明收集的依赖信息的格式。每个测试直接依赖Http请求,Http请求则直接依赖于文件。收集时,收集的是一个个测试发送的Http请求被Web服务器处理时所涉及的文件。
本发明实施例提供的一种Web应用回归测试用例选择系统,即WebRTS,包括Agent模块101、选择模块104、收集模块102以及储存模块103;
所述Agent模块101用于监控Web测试用例在Web服务器端所涉及的文件,如资源文件,代码文件等;基于所涉及的文件生成依赖信息并对依赖信息进行序列化处理;传统的依赖信息格式就是每个测试一个列表,该列表下记录的测试依赖的每一个文件信息。而在WebRTS中有一些改变。对于每一个测试用例,其直接依赖与其发送的HTTP请求,而HTTP请求下,才是一个个的文件依赖信息。
Agent模块101基于JVM-SANDBOX进行研制。JVM-SANDBOX是基于JVMTI和ASM技术实现的动态插桩工具。WebRTS使用JVM-SANDBOX对被测Web应用系统进行动态插装,从而收集依赖信息。
当使用Agent模块101时,需要配置应用的顶级包名,用于减少插装,优化性能,当Web应用收到HTTP请求,并调用函数进行处理时,访问文件时会被WebRTS的Agent模块101拦截到。
所述收集模块102用于收集序列化处理后的依赖信息并进行反序列化解析,并计算解析后的依赖信息的校验和;
对于收集模块102,需要输入下面的信息
1.Web服务器的IP列表;
2.Agent模块101监听的端口;
3.路径相关配置;
a)类文件的前缀信息;
b)每个节点IP对应的需要剔除的文件前缀信息;
c)应用是否是单模块应用;
d)对于多模块应用,还需要节点IP映射该节点上收集的文件依赖信息相对的子目录。
收集模块102的具体实现如下:
根据输入的IP列表和端口信息,从相应的节点上拉取Agent模块101的文件依赖信息。
使用反序列化工具将从Agent模块101上获取的字符串形式的数据反序列化成结构化的信息;
对于每一项方法依赖信息,解析出方法所在类,方法返回值所属类,方法参数所属类,将解析出来的类信息封装为文件信息;
对于每个文件依赖信息,根据获取该信息的节点IP以及当前文件的路径信息,在配置中匹配到新路径前缀,并用匹配到的路径前缀替换原来的路径前缀;
对于多模块应用,还需要根据节点IP,找到需要添加的模块子目录前缀,添加该子目录信息,完善文件路径信息;
以文件路径,文件所属的请求,文件所属的测试为关键子,对当前的文件依赖信息进行去重。
对于每一个文件依赖信息:
a)如果文件的校验和已经在缓存中,则直接返回缓存中的校验和。
b)如果不在缓存中,则调用校验和计算模块105,计算文件的校验和,然后将校验和放入缓存,并返回该校验和;
将本次收集分析后的依赖信息,调用储存模块103进行更新存储。
所述储存模块103用于储存依赖信息以及依赖信息的校验和;
在本实施例中,储存模块103负责屏蔽底层使用的存储系统,提供一个一致的抽象,从而适用于不同的使用场景。储存模块103主要提供两个接口,供其他模块调用。
1.查询接口:用户输入测试ID,储存模块103返回对应测试的依赖信息;
2.存储接口:用户将新的依赖信息进行存储;
储存模块103的底层是基于spring-data,通过spring-data,使得储存模块103对具体的数据库依赖更小,只需要更改配置文件,即可轻松切开使用的数据库。
所述选择模块104用于调取储存模块103中依赖信息的校验和,将新版本Web应用编译后的代码文件的校验和与依赖信息的校验和进行对比,根据对比结果选择出最终的测试用例。
当用户开始进行Web应用回归测试时,会首先执行选择模块104,进行测试用例选择。
对于选择模块104,需要输入下面的信息:
1.测试用例所在目录,以下简称test-dir;
2.构建完成的新版本项目所在目录,以下简称project-dir;
3.用户自定义过滤测试的正则;
选择模块104的具体实现如下:
选择模块104扫描test-dir目录,找到所有以test开头的文件。并以该文件名作为该测试的唯一标识(简称测试ID);
对于每一个Web测试用例,从储存模块103中获取该测试用例的依赖的文件信息,主要包括文件的相对路径和文件内容的校验和;
对于测试用例的每一项文件依赖信息,根据该文件信息提供相对路径,在project-dir中找到该文件;
a)如果该该文件的新版版的校验和已经计算,即在缓存中,则直接返回缓存中的校验和;
b)如果没有计算,则计算这个新版本的文件的校验和,再将该校验和加入缓存,然后返回校验和;
将新的校验和与文件依赖信息中校验和进行对比;
a)如果相等,则继续检验测试用例的下一项文件依赖信息;
b)如果不相等,则先保存这个不相等的文件信息,然后将该测试加入需要运行的测试列表中(以下简称selected-tests);
根据用户自定义的测试过滤正则,对selected-tests列表进行一次匹配,把匹配上的测试从selected-tests列表中删除;
将最终的选择的测试列表(selected-tests),序列化到文件中,以用于执行测试。
作为一个优选的实施例,所述收集模块102还包括校验和计算模块105;所述检验和计算模块用于计算依赖信息的校验和,其工作过程如下:
对于普通文件,校验和计算模块105读取整个文件内容,使用Adler32算法计算校验和;
对于.class文件,校验和计算模块105计算智能校验和。普通的计算校验和的方法是为整个文件内容计算,而校验和计算模块105基于ASM,自定义了ClassVisitor和MethodVisitor,在解析的过程中,移除字节码文件中的debug信息后,再计算该字节码的校验和,使得对于Java代码文件不会因为添加空行,空格,多余的import等无意义的代码变动而受影响;然后再将移除debug后的内容,使用Adler32计算校验和。
作为一个优选的实施例,所述Agent模块101还包括Http请求处理监控模块106、对象构造过程监控模块107以及临时依赖信息管理模块108;
所述Http请求处理监控模块106用于监控Web测试用例的Http请求处理过程中在Web服务器端所涉及的文件并生成依赖信息;
Http请求处理监控模块106的工作流程如下:
使用ThreadLocal,为当前处理线程建立一个上下文,用于存储本次处理的文件依赖信息,并解析请求的User-Agent头部,获取发送请求的测试ID;如果测试ID为null,则表明本次请求不属于测试,则直接返回。
拦截方法执行,监控执行过程;
a)如果是Web应用程序的方法执行,则封装执行方法的信息,包括方法名,方法所属对象信息,方法参数信息,方法返回值信息;
b)如果是文件访问方法,则获取这个文件的绝对路径名信息。
使用ThreadLocal技术,获取当前现在当前线程上下文,并存储该信息于这个上下文;如果获取的线程上下文是空的,则说明这个函数不需在此记录,直接返回即可;
根据执行方法的调用对象,从对象构造监控模块获取该对象在构造过程中的记录的文件依赖信息,并将这些信息放入线程的上下文;
当本次请求处理完成后,从ThreadLocal中取出记录的依赖信息,并和请求元信息(HTTP头部等),以及请求所属测试ID进行封装,然后放入临时依赖信息管理模块108,并将该线程的TheadLocal置null。
所述对象构造过程监控模块107用于监控Web测试用例的对象构造过程中在Web服务器端所涉及的文件并生成依赖信息;
对象构造过程监控模块107的工作流程如下:
检测当前执行的方法的名字是否为<init>或者<cinit>,如果是,并且ThreadLocal中的上下文栈为null,则在ThreadLocal中建立一个上下文栈,用于存储构造过程中的文件依赖信息,并压入一个空的构造过程记录单元;
从ThreadLocal中取出构造过程的上下文栈;
a)如果上下文栈为空,则表明这个依赖信息不属于某个对象的构造过程,返回即可;
b)如果上下文栈不为空,取出上下文栈,并获取栈顶的构造过程记录单元。
对于方法执行,收集方法的名称,所属类信息,参数类信息以及返回值类信息,并封装为依赖信息;
对于文件,收集文件的绝对路径信息并封装为依赖信息
将封装的依赖信息放入当前的构造过程记录单元;
当构造方法执行完毕后,先从ThreadLocal中取出线程对应的上下文栈,然后弹出构造过程记录单元;
将弹出的构造过程记录单元,存入一个Map,其key为对象,value即为该构造过程记录单元;如果弹出后的上下文栈为空,则设置当前线程的ThreadLocal为null;如果弹出后上下文栈不是空的,那么将新的栈顶元素和弹出的元素进行合并作为新的栈顶。
所述临时依赖信息管理模块108用于对Http请求处理监控模块106和对象构造过程监控模块107所生成的依赖信息序列化处理并保存。
临时依赖信息管理模块108的处理流程为:
将依赖信息进行序列化处理,将将序列化后的数据发送给收集模块102。
作为一个优选的实施例,所述Http请求处理监控模块106还包括Http请求调用追踪模块109;
所述Http请求调用追踪模块109用于为Http请求处理监控模块106中的Http请求插入测试ID。Http请求调用追踪模块109是有针对性的插装的,一旦某个方法进入到该模块,则表明这个方法是一个发送Http请求的相关代码,Http请求会做以下处理:
从Http请求处理模块中,获取当前线程所处理的请求的属于哪个测试;如果这个调用不属于任何测试,则直接返回,不做处理;
将返回的测试ID插入本次发送请求的User-Agent字段之后返回。
如图2所示,一种Web应用回归测试用例选择方法,所述方法包括以下步骤:
监控Web测试用例在Web服务器端所涉及的文件,基于所涉及的文件生成依赖信息并对依赖信息进行序列化处理;
收集序列化处理后的依赖信息并进行反序列化解析,并计算解析后的依赖信息的校验和;
对依赖信息的校验和进行储存;
调取储存的依赖信息的校验和,将新版本Web应用编译后的代码文件的校验和与依赖信息的校验和进行对比,根据对比结果选择出最终的测试用例。
作为一个优选的实施例,监控Web测试用例中的对象构造过程在Web服务器端所涉及的文件以及Http请求处理过程在Web服务器端所涉及的文件,基于所涉及的文件生成依赖信息并对依赖信息进行序列化处理。
作为一个优选的实施例,监控Web测试用例中的对象构造过程在Web服务器端所涉及的文件的具体过程如下:
检测Web测试用例的函数执行的构造函数,判断是构造函数的开始还是结束;
若为开始,则建立线程上下文栈thread-constructor-stack,向栈中压入一个对象构造记录单元object-constructor-record;获取线程上下文栈thread-constructor-stack的栈顶元素,向栈顶元素元素中添加所涉及的文件的信息,生成依赖信息;
若为构造函数的结束,弹出线程上下文栈thread-constructor-stack的栈顶元素,将弹出元素中记录的对象构造依赖信息进行保存;判断线程上下文栈thread-constructor-stack是否为空;如果栈非空,当从构造函数中返回时,弹出thread-constructor-stack的顶层元素,将弹出的元素和新的栈顶元素进行合并,将合并后的元素压入栈中,作为新的栈顶元素;如果栈为空,则释放该线程上下文栈thread-construtor-stack对象。
作为一个优选的实施例,监控Web测试用例中的Http请求处理过程在Web服务器端所涉及的文件的具体过程如下:
检测Web测试用例的函数执行,若检测到的为Http请求处理的入口函数,判断是入口函数的开始还是结束;
若为开始,则新建一个线程上下文thread-http用于存储本次Http请求处理过程在Web服务器端所涉及的文件,并从Http请求处理的User-Agent字段中解析发送请求的测试ID,将函数信息和测试ID储存到线程上下文thread-http中作为依赖信息;
若为结束,将线程上下文thread-http中记录的依赖信息进行储存,当从Http请求处理入口函数返回时,释放线程上下文thread-http;
若检测到的为Http请求处理的文件访问函数,则先获取该Http请求处理的线程上下文thread-http;获取当前文件访问函数所属的类,文件访问函数参数的类型,文件访问函数返回值的类型并存储到线程上下文thread-http中作为依赖信息。
作为一个优选的实施例,将新版本Web应用编译后的代码文件的校验和与依赖信息的校验和进行对比,根据对比结果选择出最终的测试用例的具体过程如下:
根据输入的测试目录,扫描目录下存在的测试,并于文件名作为测试ID,根据测试ID从储存模块中地取出测试依赖信息判断新版本Web应用编译后的代码文件的校验和与依赖信息的校验和是否相同;若相同,则继续检验测试用例的下一项文件依赖信息的校验和;若不相同,则保存该不相等的代码文件的信息,将其加入需要运行的测试列表中,根据用户自定义的测试过滤正则,进一步选择出最终的测试用例。
如图3所示,一种Web应用回归测试用例选择设备30,所述设备包括处理器300以及存储器301;
所述存储器301用于存储程序代码302,并将所述程序代码302传输给所述处理器;
所述处理器300用于根据所述程序代码302中的指令执行上述的一种Web应用回归测试用例选择方法中的步骤。
示例性的,所述计算机程序302可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器301中,并由所述处理器300执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序302在所述终端设备30中的执行过程。
所述终端设备30可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器300、存储器301。本领域技术人员可以理解,图3仅仅是终端设备30的示例,并不构成对终端设备30的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器300可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器301可以是所述终端设备30的内部存储单元,例如终端设备30的硬盘或内存。所述存储器301也可以是所述终端设备30的外部存储设备,例如所述终端设备30上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器301还可以既包括所述终端设备30的内部存储单元也包括外部存储设备。所述存储器301用于存储所述计算机程序以及所述终端设备所需的其他程序和数据。所述存储器301还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种Web应用回归测试用例选择系统,其特征在于,包括Agent模块、选择模块、收集模块以及储存模块;
所述Agent模块用于监控Web测试用例在Web服务器端所涉及的文件,基于所涉及的文件生成依赖信息并对依赖信息进行序列化处理;
所述收集模块用于收集序列化处理后的依赖信息并进行反序列化解析,并计算解析后的依赖信息的校验和;
所述储存模块用于储存依赖信息以及依赖信息的校验和;
所述选择模块用于调取储存模块中依赖信息的校验和,将新版本Web应用编译后的代码文件的校验和与依赖信息的校验和进行对比,根据对比结果选择出最终的测试用例。
2.根据权利要求1所述的一种Web应用回归测试用例选择系统,其特征在于,所述收集模块还包括校验和计算模块;所述校验和计算模块用于计算依赖信息的校验和。
3.根据权利要求1所述的一种Web应用回归测试用例选择系统,其特征在于,所述Agent模块还包括Http请求处理监控模块、对象构造过程监控模块以及临时依赖信息管理模块;
所述Http请求处理监控模块用于监控Web测试用例的Http请求处理过程中在Web服务器端所涉及的文件并生成依赖信息;
所述对象构造过程监控模块用于监控Web测试用例的对象构造过程中在Web服务器端所涉及的文件并生成依赖信息;
所述临时依赖信息管理模块用于对Http请求处理监控模块和对象构造过程监控模块所生成的依赖信息序列化处理并保存。
4.根据权利要求3所述的一种Web应用回归测试用例选择系统,其特征在于,所述Http请求处理监控模块还包括Http请求调用追踪模块;
所述Http请求调用追踪模块用于为Http请求处理监控模块中的Http请求插入测试ID。
5.一种Web应用回归测试用例选择方法,其特征在于,所述方法包括以下步骤:
监控Web测试用例在Web服务器端所涉及的文件,基于所涉及的文件生成依赖信息并对依赖信息进行序列化处理;
收集序列化处理后的依赖信息并进行反序列化解析,并计算解析后的依赖信息的校验和;
对依赖信息的校验和进行储存;
调取储存的依赖信息的校验和,将新版本Web应用编译后的代码文件的校验和与依赖信息的校验和进行对比,根据对比结果选择出最终的测试用例。
6.根据权利要求5所述的一种Web应用回归测试用例选择方法,其特征在于,监控Web测试用例中的对象构造过程在Web服务器端所涉及的文件以及Http请求处理过程在Web服务器端所涉及的文件,基于所涉及的文件生成依赖信息并对依赖信息进行序列化处理。
7.根据权利要求6所述的一种Web应用回归测试用例选择方法,其特征在于,监控Web测试用例中的对象构造过程在Web服务器端所涉及的文件的具体过程如下:
检测Web测试用例的函数执行的构造函数,判断是构造函数的开始还是结束;
若为构造函数的开始,则建立线程上下文栈thread-constructor-stack,向栈中压入一个对象构造记录单元object-constructor-record;获取线程上下文栈thread-constructor-stack的栈顶元素,向栈顶元素中添加所涉及的文件的信息,生成依赖信息;
若为构造函数的结束,弹出线程上下文栈thread-constructor-stack的栈顶元素,将弹出元素中记录的对象构造依赖信息进行保存;判断线程上下文栈thread-constructor-stack是否为空;如果栈非空,当从构造函数中返回时,弹出thread-constructor-stack的顶层元素,将弹出的元素和新的栈顶元素进行合并,将合并后的元素压入栈中,作为新的栈顶元素;如果栈为空,则释放该线程上下文栈thread-construtor-stack对象。
8.根据权利要求7所述的一种Web应用回归测试用例选择方法,其特征在于,监控Web测试用例中的Http请求处理过程在Web服务器端所涉及的文件的具体过程如下:
检测Web测试用例的函数执行,若检测到的为Http请求处理的入口函数,判断是入口函数的开始还是结束;
若为开始,则新建一个线程上下文thread-http用于存储本次Http请求处理过程在Web服务器端所涉及的文件,并从Http请求处理的User-Agent字段中解析发送请求的测试ID,将函数信息和测试ID储存到线程上下文thread-http中作为依赖信息;
若为结束,将线程上下文thread-http中记录的依赖信息进行储存,当从Http请求处理入口函数返回时,释放线程上下文thread-http;
若检测到是非Http请求处理函数或者是文件访问操作,则先获取该非Http请求处理函数的线程上下文thread-http,并将该非Http请求处理函数的信息或者文件信息放入线程上下文thread-http中,作为依赖信息。
9.根据权利要求8所述的一种Web应用回归测试用例选择方法,其特征在于,将新版本Web应用编译后的代码文件的校验和与依赖信息的校验和进行对比,根据对比结果选择出最终的测试用例的具体过程如下:
判断新版本Web应用编译后的代码文件的校验和与依赖信息的校验和是否相同;若相同,则继续检验测试用例的下一项文件依赖信息的校验和;若不相同,则保存该不相同的代码文件的信息,将依赖该代码文件的测试用例加入需要运行的测试列表中,根据用户自定义的测试过滤正则,进一步选择出最终的测试用例。
10.一种Web应用回归测试用例选择设备,其特征在于,所述设备包括处理器以及存储器;
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行权利要求5-9任一项所述的一种Web应用回归测试用例选择方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010150669.4A CN111324542B (zh) | 2020-03-06 | 2020-03-06 | 一种Web应用回归测试用例选择系统、方法以及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010150669.4A CN111324542B (zh) | 2020-03-06 | 2020-03-06 | 一种Web应用回归测试用例选择系统、方法以及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111324542A CN111324542A (zh) | 2020-06-23 |
CN111324542B true CN111324542B (zh) | 2023-03-14 |
Family
ID=71171373
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010150669.4A Active CN111324542B (zh) | 2020-03-06 | 2020-03-06 | 一种Web应用回归测试用例选择系统、方法以及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111324542B (zh) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103176895B (zh) * | 2011-12-22 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种回归测试方法和系统 |
CN105528293B (zh) * | 2015-12-14 | 2018-01-16 | 苏州洞察云信息技术有限公司 | 一种用于回归测试选取测试用例的系统及方法 |
US10146753B2 (en) * | 2016-07-25 | 2018-12-04 | Intuit Inc. | Visual regression testing tool |
US10268574B2 (en) * | 2016-09-01 | 2019-04-23 | Salesforce.Com, Inc. | Deployment testing for infrastructure delivery automation |
CN109446085A (zh) * | 2018-10-26 | 2019-03-08 | 长飞光纤光缆股份有限公司 | 用于web应用系统的分层测试方法 |
CN110554954B (zh) * | 2019-07-19 | 2020-12-01 | 中国科学院软件研究所 | 一种结合静态依赖和动态执行规则的测试用例选择方法 |
-
2020
- 2020-03-06 CN CN202010150669.4A patent/CN111324542B/zh active Active
Non-Patent Citations (1)
Title |
---|
马壮展.测试自动化的设计和实施.2004,(第01期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111324542A (zh) | 2020-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8219856B2 (en) | Memory growth detection | |
Ghoshal et al. | Provenance from log files: a BigData problem | |
CN110750458A (zh) | 大数据平台测试方法、装置、可读存储介质及电子设备 | |
CN112559285B (zh) | 基于分布式服务架构的微服务监控方法及相关装置 | |
JP2010524060A (ja) | 分散コンピューティングにおけるデータマージング | |
CN112148610A (zh) | 测试用例执行方法、装置、计算机设备和存储介质 | |
CN111190551B (zh) | 一种redis数据的迁移系统、迁移方法、装置及终端 | |
CN112035471B (zh) | 一种事务处理方法及计算机设备 | |
CN110059068B (zh) | 一种分布式存储系统中的数据校验方法及数据校验系统 | |
CN112559525A (zh) | 数据检查系统、方法、装置和服务器 | |
CN110543426A (zh) | 一种软件性能风险检测方法及装置 | |
CN112433908B (zh) | 确定检测服务器的间隔时间的方法、系统、设备及介质 | |
Qian et al. | Load balancing on generalized hypercube and mesh multiprocessors with LAL | |
CN112346981A (zh) | 联调测试覆盖率检测方法及系统 | |
CN112527642A (zh) | 性能测试指标数据的显示方法、装置、设备及存储介质 | |
CN111324542B (zh) | 一种Web应用回归测试用例选择系统、方法以及设备 | |
CN112631894A (zh) | 代码检测方法、装置、存储介质及计算机设备 | |
CN116483888A (zh) | 程序评估方法及装置、电子设备和计算机可读存储介质 | |
CN115687129A (zh) | 一种覆盖率报告生成方法、装置、存储介质和计算机设备 | |
CN115587048A (zh) | 回归测试方法、终端设备及计算机可读存储介质 | |
CN108345541A (zh) | 一种程序检测方法及系统 | |
CN114238140A (zh) | 一种准入测试方法及装置 | |
CN109886327B (zh) | 一种分布式系统中Java数据的处理系统及方法 | |
JP2009181494A (ja) | ジョブ処理システムおよびジョブ情報取得方法 | |
CN117130917B (zh) | 一种容器化Java应用的灰盒测试方法、装置及系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |