发明内容
本申请实施例所要解决的技术问题是提供一种基于测试的执行路径的记录方法,用以提高去除干扰数据的数量,提高测试结果评估的准确率。
相应的,本申请实施例还提供了一种基于测试的执行路径的记录装置,用以保证上述方法的实现及应用。
为了解决上述问题,本申请实施例公开了一种基于测试的执行路径的记录方法,包括:
当接收到通过会话发送的针对测试对象的测试请求时,记录所述会话的会话标识;
获取所述会话标识对应的存储空间;
拦截根据所述测试请求对所述测试对象的执行;
在所述存储空间中记录被执行的所述测试对象的信息,获得执行路径。
优选地,所述获取所述会话标识对应的存储空间的步骤包括:
判断所述会话标识是否存储在预设的全局变量中;
若是,则获取所述会话标识对应的,在所述全局变量中的已有的存储空间;
若否,则在所述全局变量中,为所述会话标识配置新的存储空间。
优选地,所述测试对象包括一个或多个测试子对象;
所述拦截根据所述测试请求对所述测试对象的执行的步骤包括:
拦截根据所述测试请求对所述一个或多个测试子对象的执行。
优选地,所述在所述存储空间中记录被执行所述测试对象的信息,获得执行路径的步骤包括:
在所述新的存储空间中记录被执行的所述一个或多个测试子对象的信息,获得执行路径。
优选地,所述已有的存储空间中记录有旧的执行路径;
所述在所述存储空间中记录被执行的所述测试对象的信息,获得执行路径的步骤包括:
在所述旧的执行路径上,记录被执行所述一个或多个测试子对象的信息,获得新的执行路径。
优选地,还包括:
当执行所述测试对象完成时,根据所述执行路径生成测试报告。
本申请实施例还公开了一种基于测试的执行路径的记录装置,包括:
会话标识记录模块,用于当接收到通过会话发送的针对测试对象的测试请求时,记录所述会话的会话标识;
存储空间获取模块,用于获取所述会话标识对应的存储空间;
测试对象执行拦截模块,用于拦截根据所述测试请求对所述测试对象的执行;
执行路径获得模块,用于在所述存储空间中记录被执行的所述测试对象的信息,获得执行路径。
优选地,所述存储空间获取模块包括:
存储判断子模块,用于判断所述会话标识是否存储在预设的全局变量中;若是,则调用获取子模块,若否,则代用配置子模块;
获取子模块,用于获取所述会话标识对应的,在所述全局变量中的已有的存储空间;
配置子模块,用于在所述全局变量中,为所述会话标识配置新的存储空间。
优选地,所述测试对象包括一个或多个测试子对象;所述测试对象执行拦截模块步骤包括:
测试子对象拦截子模块,用于拦截根据所述测试请求对所述一个或多个测试子对象的执行。
优选地,所述执行路径获得模块包括:
第一获得子模块,用于在所述新的存储空间中记录被执行的所述一个或多个测试子对象的信息,获得执行路径。
优选地,所述已有的存储空间中记录有旧的执行路径;所述执行路径获得模块包括:
第二获得子模块,用于在所述旧的执行路径上,记录被执行所述一个或多个测试子对象的信息,获得新的执行路径。
优选地,还包括:
测试报告生成模块,用于在执行所述测试对象完成时,根据所述执行路径生成测试报告。
与背景技术相比,本申请实施例包括以下优点:
本申请实施例在接收到通过会话发送的针对测试对象的测试请求时,记录会话的会话标识,获取会话标识对应的存储空间,拦截根据测试请求对测试对象的执行,在存储空间中记录被执行的所述测试对象的信息,获得执行路径,通过会话session来唯一标识一次或一组测试操作的执行路径,可以在复杂的应用环境中彻底过滤掉干扰数据,大大提高了去除干扰数据的数量,精准地收集到有效数据,在后续的测试质量分析中,可有效减少分析投入量、提高分析效率、避免测试遗漏,提高测试结果评估的准确率,从而确保应用系统按时按质发布上线。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
目前记录执行路径的三种方案至多只能过滤部分干扰数据。
针对某台测试服务器,收集在其运行的应用系统的执行路径的方案或与其相近的方案,只能获取到整个测试执行路径总和,无法过滤干扰数据;
按时间段来获取某个时间段内的执行路径的方案或与其相近的方案,只能过滤时间段外的干扰数据,无法过滤在时间段内的干扰数据;
按URL、参数等方式获取局部执行路径的方案或与其相近的方案,只能过滤某URL和某参数情况外的干扰数据,而无法过滤对于同URL、同参数的干扰数据。
上述三种记录执行路径的方案均无法从记录的执行路径中完全剥离干扰数据、精准地获取单个人员甚至是单次操作的测试执行路径,无法有针对性地获取单个人员甚至是单次操作形成的测试执行路径,因而造成无法准确分析测试执行结果,导致测试退出点判断难且不准、程序质量评估难、系统发布上线风险变大。随着自动化测试应用越来越广泛,上述问题日益突出。
因此,提出了本申请实施例的核心构思之一,采用会话session来唯一标识一组或一次测试操作的执行路径,可以在复杂的应用环境中彻底过滤掉干扰数据,精准地收集到有效数据。
参照图1,示出了本申请的一种基于测试的执行路径的记录方法实施例的步骤流程图,具体可以包括如下步骤:
步骤101,当接收到通过会话发送的针对测试对象的测试请求时,记录所述会话的会话标识;
需要说明的是,本申请实施例可以在应用系统中部署覆盖率的统计平台ACC,即本申请可以是应用在ACC中,也是应用在应用系统,因为部署ACC需要对应用系统进行插桩(增加了载入ACC的代码),被插过桩的应用系统启动后,ACC就已经作为一个组件侵入到应用系统中,ACC此时已经作为应用系统的一部分可以和应用系统的其他功能进行交互。
当然,本申请实施例还可以单独应用于应用系统中,本申请实施例对此不加以限制。
会话session可以指客户端与服务端(例如部署有ACC的应用系统)进行通信的时间间隔,是一种作为客户端和服务器之间的一种会话机制,可以唯一标示客户端和服务端的一一对应关系。
没有建立会话session的情况下,第一次客户端与服务端的连接会自动建立会话session。
在一个有效的时间内,或指定的开始和结束之间,使用的是同一个会话标识。该会话标识可以指能够代表一个唯一确定的会话session的信息,例如sessionID(Identity,身份标识号码)。
测试对象的测试请求可以是指用户发出的执行某个测试对象,以进行测试的指示。
测试对象可以为进行测试的对象,具体可以包括Java(一种可以撰写跨平台应用软件的面向对象的程序设计语言)程序等等。
在具体实现中,大多数采用Java编写的企业应用程序系统中,接受用户的测试请求的入口一般是名为servlet的一段程序,该程序将实现或分派另一段程序去处理用户的测试请求并做出响应。在servlet之前,有另一段名为filter的程序可以允许首先处理。
本申请实施例中,可以采用filter记录用于唯一标识用户操作的会话session的会话标识,用于后续标识执行路径。
具体而言,在ACC中可以创建了一个名为ACCFilter的filter,在该fitler中将会话标识(如sessionID)保存在了名为ACCSessionContext的上下文中,该上下文可以保存在本地线程变量(ThreadLocal)中以确保线程安全。
步骤102,获取所述会话标识对应的存储空间;
在本申请实施例中,可以通过插桩的方式在应用系统中部署ACC。
插桩可以是指在应用系统中插入具有拦截测试对象执行并记录测试对象执行信息的代码。
在本申请的一种优选实施例中,步骤102可以包括如下子步骤:
子步骤S11,判断所述会话标识是否存储在预设的全局变量中;若是,则执行子步骤S12,若否,则执行子步骤S13;
子步骤S12,获取所述会话标识对应的,在所述全局变量中的已有的存储空间;
子步骤S13,在所述全局变量中,为所述会话标识配置新的存储空间。
在插桩后的应用系统中,可以增加一个名为$ACC$Coverages的全局变量和名为$ACC$Hook$MethodBefore的方法。
名为$ACC$Coverages的全局变量,可以用于记录由会话标识(如sessionID)进行标识的执行路径。
名为$ACC$Hook$MethodBefore的方法,可以用于在测试对象执行前从名为ACCSessionContext的上下文中获取会话标识(如sessionID);若全局变量记录有当前会话标识(如sessionID)标识的上一次的执行路径,则可以获取由上一次的执行路径,用以继续记录执行路径;若全局变量未记录有当前会话标识(如sessionID)标识的上一次的执行路径,则可以为当前会话标识(如sessionID)配置存储空间,用以记录执行路径。
步骤103,拦截根据所述测试请求对所述测试对象的执行;
一般情况下,在测试对象在正式运行前,可以对测试对象中的全部或部分功能进行测试,以确保该测试对象能按预定的方式正确地运行。
在具体实现中,所述测试对象包括一个或多个测试子对象,该测试子对象可以为测试对象的组成部分,具体可以包括能实现可执行语句等等。
在本申请的一种优选实施例中,步骤103可以包括如下子步骤:
子步骤S21,拦截根据所述测试请求对所述一个或多个测试子对象的执行。
在具体实现中,可以在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。
其中,测试用例可以指一组由输入数据、执行步骤、期望结果组成的测试描述信息,用于验证测试对象的某个功能。
当输入测试用例时,按照测试用例执行一个或多个测试子对象。
设计出的测试用例一般保证在测试中每个可执行语句至少执行一次,但每个可执行语句并非一定要执行,本申请实施例对此不加以限制。
本申请实施例中,通过插桩,在应用系统中测试子对象的入口增加记录执行路径的方法,使得在测试子对象被调用前,都需要经过该记录执行路径的方法,实现对测试子对象的执行的拦截。
步骤104,在所述存储空间中记录被执行的所述测试对象的信息,获得执行路径。
在记录执行路径的方法拦截对测试子对象的执行时,可以记录当前执行的测试子对象的信息,例如,入口地址等等,以获得执行路径。
在本申请的一种优选实施例中,步骤104可以包括如下子步骤:
子步骤S31,在所述新的存储空间中记录被执行的所述一个或多个测试子对象的信息,获得执行路径。
本申请实施例中,新的存储空间中未记录有旧的执行路径,因此,可以直接记录被执行的一个或多个测试子对象的信息,获得执行路径。
例如,当前测试对象包括测试子对象A、测试子对象B、测试子对象C、测试子对象D,若当前执行顺序为测试子对象C、测试子对象B、测试子对象A、测试子对象D,则可以获得C→B→A→D的执行路径。
在本申请的一种优选实施例中,所述已有的存储空间中记录有旧的执行路径,则在本申请实施例中,步骤104可以包括如下子步骤:
子步骤S32,在所述旧的执行路径上,记录被执行的所述一个或多个测试子对象的信息,获得新的执行路径。
本申请实施例中,用户可以在一次会话session中进行一次或一组测试,该旧的执行路径可以为上一次的执行路径。
当前的会话session仍未中断,当前的测试操作,也是同一客户端进行的,可以在旧的执行路径的基础之上,继续记录执行路径。
例如,当前测试对象包括测试子对象A、测试子对象B、测试子对象C、测试子对象D,旧的测试路径为C→B,若当前的执行顺序为测试子对象C、测试子对象B、测试子对象A、测试子对象D,则可以获得C→B→C→B→A→D的执行路径。
需要说明的是,一组和一次可以是针对测试而言的,其实质是单位,比如一个测试用例可以认为是一次测试操作,而多个测试用例可以认为是一组测试操作,具体可以由用户根据实际情况进行定义,本申请实施例对象不加以限制。
本申请实施例在接收到通过会话发送的针对测试对象的测试请求时,记录会话的会话标识,获取会话标识对应的存储空间,拦截根据测试请求对测试对象的执行,在存储空间中记录被执行的所述测试对象的信息,获得执行路径,通过会话session来唯一标识一次或一组测试操作的执行路径,可以在复杂的应用环境中彻底过滤掉干扰数据,大大提高了去除干扰数据的数量,精准地收集到有效数据,在后续的测试质量分析中,可有效减少分析投入量、提高分析效率、避免测试遗漏,提高测试结果评估的准确率,从而确保应用系统按时按质发布上线。
在本申请的一种优选实施例中,所述的方法还可以包括如下步骤:
步骤105,当执行所述测试对象完成时,根据所述执行路径生成测试报告。
在具体实现中,当用户认为已经完成了测试过程或者完成某一阶段的测试过程时,就通过在ACC操作,将执行路径从应用系统的服务器上传到ACC上,ACC对执行路径解析后生成一个测试报告,用户即可在ACC上分析本次测试的结果了。
在插桩后的应用系统中,可以增加一个static方法,该方法将在该测试对象被初始化时调用,用于将保存测试路径的变量$ACC$Coverages传递到ACC中做记录,并且启动并初始化ACC核心代码。
在该测试报告中,可以包括执行路径,也可以包括覆盖率等等。其中,覆盖率可以度量测试对执行路径的一个覆盖情况,具体地,覆盖率=执行的代码行数/总的代码行数。
该测试报告可以以表格的形式生成,也可以以图形的形式生成,还可以以其他形式生成,本申请实施例对此不加以限制。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。
参照图2,示出了本申请一种基于测试的执行路径的记录装置实施例的结构框图,具体可以包括如下模块:
会话标识记录模块201,用于当接收到通过会话发送的针对测试对象的测试请求时,记录所述会话的会话标识;
存储空间获取模块202,用于获取所述会话标识对应的存储空间;
测试对象执行拦截模块203,用于拦截根据所述测试请求对所述测试对象的执行;
执行路径获得模块204,用于在所述存储空间中记录被执行的所述测试对象的信息,获得执行路径。
在本申请的一种优选实施例中,所述存储空间获取模块202可以包括如下子模块:
存储判断子模块,用于判断所述会话标识是否存储在预设的全局变量中;若是,则调用获取子模块,若否,则代用配置子模块;
获取子模块,用于获取所述会话标识对应的,在所述全局变量中的已有的存储空间;
配置子模块,用于在所述全局变量中,为所述会话标识配置新的存储空间。
在本申请的一种优选实施例中,所述测试对象可以包括一个或多个测试子对象;所述测试对象执行拦截模块203可以包括如下子模块:
测试子对象拦截子模块,用于拦截根据所述测试请求对所述一个或多个测试子对象的执行。
在本申请的一种优选实施例中,所述执行路径获得模块204可以包括如下子模块:
第一获得子模块,用于在所述新的存储空间中记录被执行的所述一个或多个测试子对象的信息,获得执行路径。
在本申请的一种优选实施例中,所述已有的存储空间中可以记录有旧的执行路径;所述执行路径获得模块204可以包括如下子模块:
第二获得子模块,用于在所述旧的执行路径上,记录被执行所述一个或多个测试子对象的信息,获得新的执行路径。
在本申请的一种优选实施例中,还可以包括如下模块:
测试报告生成模块,用于在执行所述测试对象完成时,根据所述执行路径生成测试报告。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
在一个典型的配置中,所述计算机设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非持续性的电脑可读媒体(transitorymedia),如调制的数据信号和载波。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种基于测试的执行路径的记录方法和一种基于测试的执行路径的记录装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。