一种提高自动化测试资源利用率的方法
技术领域
本发明涉及一种对测试资源的合理利用,尤其涉及一种提高自动化测试系统中的测试资源利用率的方法。
背景技术
为了保证软件质量,软件测试是软件开发过程中一个必不可少的环节。在测试执行的过程中,测试人员可能对某一模块进行反复多次的测试,特别是当产品有功能的频繁改动时,为了保证改动的功能不会影响其他功能的正常运行,必须对原有的功能进行验证,即所谓的回归测试。在回归测试过程中,测试人员可能要执行几十甚至几百上千次的重复测试,这就难免会让测试工作变得枯燥无味,难以提高测试人员的工作积极性,同时也造成人力资源的严重浪费,增加了软件产品的开发成本。为了将测试人员从枯燥的重复测试工作中解放出来、降低软件开发成本,自动化测试技术逐渐发展起来,部分或者完全取代了测试人员的重复性劳动,降低了软件开发成本,缩短了软件开发周期。
一般来说,自动化测试技术的实现方式为:由一台主控设备替代测试人员控制被测资源和辅测资源,向它们发送指令,并收集指令执行的回显信息,根据他们的回显信息来判断用例是否通过。在自动化测试过程中,首先根据测试任务的逻辑TOPO(topology的缩写,中文含义为“拓扑结构”),给测试任务分配满足测试条件的测试资源,等测试任务执行完后,再把测试资源释放出来,供其它测试任务使用,这就涉及到一种测试资源分配和释放的管理问题。目前比较通用的管理方式是:按需求最大的逻辑TOPO给测试任务分配测试资源,并且一直独占所分配资源,直到整个测试任务完成。由于这种管理方式满足了所有测试TOPO的测试需求,使得测试任务能够胜利完成,但是,它也存在着明显的缺陷:对于每一个测试任务,它可能涉及到几个甚至几十个逻辑TOPO,而这些TOPO的资源需求可能相差很大,另外,需求测试资源多的逻辑TOPO可能只有少部分用例需要,而绝大部分的测试用例只需要少部分的测试资源,这就造成了测试资源的巨大浪费。例如,有一个测试任务包含100个测试用例,涉及到2种测试TOPO(TOPO1和TOPO2),其中TOPO1需要10台测试资源,TOPO2需要1台测试资源,那么在测试执行之前,需要给该测试任务分配10台测试资源,而在这100个测试用例中,只有1个测试用例需要用到TOPO1,其它测试用例都用TOPO2,由于测试资源需要在整个测试任务结束时才会被释放,这就造成了那9台测试资源的严重浪费。另外,由于测试资源没有及时被释放,使得其他测试任务没能及时的运行,这也就延长了测试时间,延长了开发周期,增加了开发成本。
发明内容
本发明要解决的技术问题:提供了一种在自动化测试过程中,将测试任务中的空闲资源及时释放出来供其它测试任务使用的提高自动化测试资源利用率的方法。
本发明的技术方案是:一种提高自动化测试资源利用率的方法,其特征在于,包括以下步骤:
a、为测试任务分配所需的各类测试资源;
b、确定当前测试资源Rn的释放优先级;
c、执行需求数量最多且释放优先级最高的测试资源的所有测试用例;
d、统计并释放空闲测试资源;
e、判断测试任务是否执行完成,若是,则结束;若否,则返回步骤b。
所述步骤b具体为:
b1、若存在用户自定义的测试资源释放优先级,则直接进入步骤c;否则进入步骤b2;
b2、测试用例占用数量最多的测试资源Rn表示为most_Rn,统计需求所述most_Rn的测试用例个数,所述测试用例个数越少,则测试资源Rn的释放优先级越高,若能唯一确定释放优先级最高的测试资源first_R,则进入步骤c;否则筛选出释放优先级并列最高的各类测试资源,进入步骤b3;
b3、统计所述步骤b2中筛选出的各类测试资源的最高需求数量与次高需求数量的差量DK,所述DK越大,则其释放优先级越高,若能唯一确定释放优先级最高的测试资源first_R,则进入步骤c;否则进入步骤b4;
b4、取所述步骤b2中筛选出的各类测试资源中的任一测试资源为释放优先级最高的测试资源first_R。
具体的,所述步骤b也可包括以下步骤:
b1、若存在用户自定义的测试资源释放优先级,则直接进入步骤c;否则进入步骤b2;
b2、测试用例占用数量最多的测试资源Rn表示为most_Rn,统计需求所述most_Rn的测试用例个数,所述测试用例个数越少,则测试资源Rn的释放优先级越高,若能唯一确定释放优先级最高的测试资源first_R,则进入步骤c;否则进入步骤b3;
b3、统计所述most_Rn对应的测试资源Rn的最高需求数量与次高需求数量的差量DK,所述DK越大,则其释放优先级越高,若能唯一确定释放优先级最高的测试资源first_R,则进入步骤c;否则进入步骤b4;
b4、从步骤b2中所述的所有most_Rn涉及的测试用例集合中任选一个测试用例进行执行后,直接进入步骤d。
进一步的,所述步骤a包括以下步骤:
a1、获取测试任务的所有测试用例的逻辑TOPO信息;
a2、按逻辑TOPO最高需求为测试任务分配测试资源。
进一步的,步骤a2中,所述逻辑TOPO最高需求为一种逻辑TOPO需求的测试资源或多种逻辑TOPO需求的测试资源的叠加。
进一步的,所述步骤d包括以下步骤:
d1、测试用例需求最高数量的测试资源Rn定义为most_Rn,统计most_Rn所涉及的测试用例个数,当所述测试用例个数为0时,其对应的测试资源Rn为释放资源rel_Rn,若当前存在rel_Rn,则进入步骤d2;否则直接进入步骤e;
d2、统计所述rel_Rn的最高需求数量与次高需求数量的差量DK,释放DK个rel_Rn。
本发明的有益效果是:通过本发明的方法,可以根据用户需求情况及时、灵活地释放自动化测试过程中测试任务的空闲测试资源,使得测试资源达到最大程度的利用,从而有效降低了软件开发成本,缩短了软件开发周期。
附图说明
图1是本发明具体实施方式的流程图。
具体实施方式
下面将结合具体附图和具体实施例对本发明作进一步的描述。
本发明提供一种提高自动化测试资源利用率的方法,包括如下步骤:a、为测试任务分配所需的各类测试资源;b、确定当前测试资源Rn的释放优先级;c、执行需求数量最多且释放优先级最高的测试资源的所有测试用例;d、统计并释放空闲测试资源;e、判断测试任务是否执行完成,若是,则结束;若否,则返回步骤b。当多个测试任务并行执行时,测试资源在物理上只能互斥使用,即同一时间内一个测试资源只能由一个测试任务占用,各测试任务的测试资源释放流程不相关。
图1为本发明具体实施方式的流程图,具体包括如下步骤:
步骤1:获取某测试任务的所有测试用例逻辑TOPO信息;
步骤2:按逻辑TOPO最大需求给测试任务分配物理资源;
步骤3:对所有逻辑TOPO涉及到的逻辑资源需求情况进行统计;
步骤4:确定当前存在的各类逻辑资源的释放优先级;
步骤5:确定释放优先级最高的逻辑资源;
步骤6:对测试用例中逻辑TOPO涉及到的逻辑测试资源与在步骤2中分配给测试任务的物理测试资源进行一一映射;
步骤7:执行需求数量最多且释放优先级最高的测试资源的所有测试用例;
步骤8:统计并释放所有与逻辑资源相对应的空闲物理测试资源;
步骤9:判断测试任务的测试用例是否执行完毕,若是,则跳到步骤10;若否,则转到步骤3;
步骤10:结束本测试任务。
步骤2中,对于本测试任务涉及到的所有逻辑TOPO,按最高逻辑TOPO资源需求给测试任务分配相应的物理资源,其中,“最高逻辑TOPO资源需求”为某一种逻辑TOPO涉及到的资源需求或多种逻辑TOPO涉及到的资源需求的叠加,即分配给测试任务的物理资源需要满足本测试任务所有测试用例的资源需求。
例如,现在有一个测试任务S1包含3个测试用例,每一个测试用例的逻辑TOPO资源需求情况如下:
①1DUT 2AUX 3PC
②1DUT 2AUX 3PC
③1DUT 1AUX 3PC
其中,DUT表示被测设备的逻辑设备名,AUX表示辅助测试设备的逻辑设备名,PC表示辅测逻辑设备——主机,针对上述逻辑TOPO资源情况,可定义表示形式为“XY”,“X”表示某一个测试用例需求逻辑资源Y的数量,“Y”表示某一个测试用例需求的逻辑测试资源类型。在这上述3个测试用例中,涉及到2种逻辑TOPO:“1DUT 2AUX 3PC”和“1DUT 1AUX 3PC”,则测试任务S1的“最高逻辑TOPO资源需求”为“1DUT 2AUX3PC”,即“最高逻辑TOPO资源需求”为某一种逻辑TOPO涉及到的资源需求。
又例如,现在有一个测试任务S2包含3个测试用例,每一个测试用例的逻辑TOPO资源需求情况如下:
①1DUT 1AUX 3PC
②1DUT 2AUX 2PC
③2DUT 1AUX 3PC
在这上述3个测试用例中,涉及到3种逻辑TOPO:“1DUT 1AUX 3PC”、“1DUT 2AUX2PC”和“2DUT 1AUX 3PC”,则测试任务S2的“最高逻辑TOPO资源需求”为“2DUT2AUX 3PC”,即“最高逻辑TOPO资源需求”为多种逻辑TOPO涉及到的资源需求的叠加。
步骤3中,对所有逻辑TOPO涉及到的当前逻辑资源需求情况进行统计,包含两个信息的统计:第一、针对所有逻辑TOPO,统计每一类逻辑资源在各个逻辑TOPO中的数量,这些“逻辑资源”包括被测逻辑设备和辅测逻辑设备;第二、针对各类逻辑资源,统计需要相同数量逻辑资源的用例个数。
步骤4中,所谓测试资源的释放优先级,是指测试资源的释放先后顺序。测试资源释放优先级的确定依次考虑以下四个因素:
第一、与用户自定义资源释放优先级有关,如果用户指定了资源释放优先级或者指定了测试资源的释放顺序,则根据用户自定义的释放优先级进入步骤5,不再进一步考虑第二个因素。所谓的“自定义”,是指用户根据现有物理资源的紧缺情况,以及其它测试任务的资源需求情况,自行定义测试任务的测试资源释放顺序;
第二、如果用户没有自定义资源释放优先级,针对各类逻辑资源,其释放优先级与占用同类测试资源数量最多的测试用例个数有关,用most_Rn表示测试用例占用数量最多的测试资源Rn,依据步骤3的统计信息,对每一类测试资源选出在同一个逻辑TOPO中逻辑资源需求数量最大的测试用例的个数,然后将占用各类逻辑资源most_Rn的测试用例个数进行比较,个数越小,释放一个资源前需要执行测试用例的时间就越短,物理资源也就可以越快地被释放,所以,该类逻辑资源的释放优先级也就越高,若能唯一确定释放优先级最高的测试资源first_R,则进入步骤5,不再进一步考虑第三个因素;否则筛选出释放优先级并列最高的各类测试资源,接着考虑第三个因素;
第三、统计在第二个因素中筛选出的各类测试资源(释放优先级并列最高)的最高需求数量与次高需求数量的差量DK,DK越大,则其释放优先级越高,若能唯一确定释放优先级最高的测试资源first_R,则进入步骤5,不再进一步考虑第四个因素;否则接着考虑第四个因素;
第四、依据第二因素中筛选出释放优先级并列最高的各类测试资源,从中选择任一测试资源为释放优先级最高的测试资源first_R。
例如,一个测试任务S3包含5个测试用例,每一个测试用例的逻辑TOPO资源需求情况如下:
①2DUT 2AUX 2PC
②2DUT 2AUX 3PC
③1DUT 1AUX 2PC
④1DUT 1AUX 1PC
⑤1DUT 3PC
从测试任务34的TOPO信息中可以看出,需要三类逻辑资源:DUT、AUX、PC,其中,在同一个逻辑TOPO中,DUT的需求情况包括2台DUT和1台DUT,AUX的需求情况包括2台AUX和1台AUX,PC的需求情况包括3台PC、2台PC和1台PC;需求不同数量的各类逻辑资源表示如下:
2DUT=2
1DUT=3
2AUX=2
1AUX=2
3PC=2
2PC=2
1PC=1
上述表示形式可定义为“XY=Z”的表示形式,“X”为在某一逻辑TOPO中同一逻辑资源的需求数量,“Y”为某一逻辑TOPO中逻辑资源的类型,“Z”为需要X个逻辑资源Y的测试用例个数。例如“2DUT=2”,X对应于式中的“2”,Y对应于“DUT”,Z对应于“2”。
在不考虑用户自定义释放优先级的前提下,测试任务S3中各类测试资源的释放优先级。首先统计各类逻辑资源most_Rn的测试用例个数,统计结果如下:
2DUT=2
2AUX=2
3PC=2
因各类逻辑资源most_Rn的测试用例个数均相等,不能依据各类逻辑资源most_Rn的测试用例个数唯一确定释放优先级最高的测试资源first_R,则筛选出释放优先级并列最高的各类逻辑测试资源:DUT、AUX、PC,继续考虑下一个因素。此时DUT、AUX、PC最高需求数量与次高需求数量的差量DK分别如下:
DK(DUT)=2DUT-1DUT
DK(AUT)=2AUX-1AUX
DK(PC)=3PC-2PC
由上可看出,因各类测试资源DK均为1的此时依据筛选出释放优先级并列最高的各类逻辑测试资源(DUT、AUX、PC)的最高需求数量与次高需求数量的差量DK也不能唯一确定释放优先级最高的测试资源first_R,则继续考虑下一个因素,从已筛选出的释放优先级并列最高的各类测试资源(DUT、AUX、PC)中选择任一测试资源为释放优先级最高的测试资源first_R,假设此时选中的first_R为AUX,逻辑资源AUX的最大需求为2台,在测试任务S3中,涉及需要2台的AUX的测试用例①和②,在步骤7中执行测试用例①和②,执行的先后顺序可以依据测试用例编号大小,也可以依照其他顺序。
在确定测试资源释放优先级时,上述的四个因素的具体实现可以有其他不同的实现方法,例如在第二个因素中,若通过比较各类逻辑资源most_Rn的测试用例个数(most_Rn的测试用例个数个数越小,释放优先级越高)不能唯一确定释放优先级最高的测试资源first_R,不进行“筛选出释放优先级并列最高的各类测试资源”的操作,而是直接考虑第三个因素,若仍不能唯一确定释放优先级最高的测试资源first_R,则直接从涉及各类逻辑资源most_Rn的测试用例集合中,选出任一测试用例进行执行,执行完成后再进行“对逻辑资源与物理资源进行一一映射”的步骤,执行完成后直接进行“统计并释放空闲物理测试资源”。例如在上述的测试任务S3中,当前各类逻辑资源most_Rn的测试用例个数情况分别为:2DUT=2(测试用例①和②)、2AUX=2(测试用例①和②)、3PC=2(测试用例②和⑤),则此时各类逻辑资源most_Rn的测试用例集合为:①、②、⑤。
步骤8中,针对与逻辑资源相对应的那些物理测试资源,统计在步骤7中的所有测试用例执行完后,可以释放的空闲物理资源。具体的实现可表述为:首先统计当前存在的各类逻辑资源most_Rn涉及的测试用例个数,当其测试用例个数为0时,其对应的测试资源Rn为释放资源rel_Rn,若当前存在rel_Rn,则进行测试资源释放,释放的空闲资源为DK个rel_Rn。
实施例
假设某测试任务S4有6个测试用例,各个测试用例逻辑TOPO的资源需求信息如下:
①1DUT 3AUX 1PC
②2DUT 3AUX 2PC
③1DUT 3AUX 1PC
④1DUT 1AUX 2PC
⑤1DUT 1AUX
⑥1DUT
步骤1:获取测试任务S4的所有测试用例逻辑TOPO信息;这里总共有6个测试用例,涉及到5种逻辑TOPO资源需求(第1个和第3个测试用例的逻辑TOPO资源需求情况相同);
步骤2:按逻辑TOPO最大需求给测试任务分配物理资源;对于上述的测试任务S4,需要2台DUT,3台AUX,2台PC,所以,需要给该测试任务分配2台与逻辑资源DUT相对应的被测物理设备,3台与逻辑资源AUX相对应的辅测物理设备,2台与逻辑主机PC相对应的物理主机;
步骤3:对所有逻辑TOPO涉及到的逻辑资源需求情况进行统计;从测试任务S4的TOPO信息中可以看出,需要三类逻辑资源:DUT、AUX、PC,各类逻辑资源的需求数量用“XY=Z”的表示形式来表示,具体表示如下:
2DUT=1
1DUT=5
3AUX=3
1AUX=2
2PC=2
1PC=2
步骤4:确定各类逻辑资源的释放优先级;本实施例假设用户没有自定义资源释放优先级,则先考虑影响资源释放优先级的第二因素,先找各类逻辑资源most_Rn的测试用例个数,然后对找出的逻辑资源most_Rn的测试用例个数行比较,个数越小,则该测试资源的释放优先级越高;从步骤2的统计信息中可以看出,逻辑资源DUT的最大需求数量为2,它所涉及的用例个数为1,逻辑资源AUX的最大需求数量为3,它所涉及的用例个数为3,逻辑资源PC的最大需求数量为2,它所涉及的用例个数为2,通过比较,需求同类资源数量最大且所涉及测试用例个数最少的逻辑资源是DUT,则逻辑资源DUT的释放优先级最高;
步骤5:确定需求数量最多且释放优先级最高的逻辑测试资源(DUT)的所有测试用例,从测试任务S4的TOPO信息中可以看出,需要2台DUT的测试用只有一个,即测试用例②;
步骤6:将逻辑资源与物理资源进行物理映射,即将测试用例②的逻辑TOPO涉及到的逻辑资源DUT、AUX、PC与在步骤2中分配给测试任务S4的物理资源进行一一映射;
步骤7:执行步骤5选出的所有测试用例,即测试用例②;
步骤8:统计并释放所有与逻辑资源DUT相对应的空闲物理资源,当测试用例②执行完时,此时需要2台DUT的测试用例个数为0,即存在可释放的空闲测试资源(DUT);逻辑资源DUT的最高需求数量为2,次高需求数量为1,它们的差为1,所以,可以释放出1台与逻辑资源DUT相对应的被测物理资源;
步骤9:判断测试任务S4的测试用例是否已经执行完,如果测试用例已经执行完,则跳到步骤10,如果测试用例还没有执行完,则转到步骤3;由于还有5个测试用例还没执行完,所以转到步骤3继续该测试任务的分析及执行;由于分析过程类似,所以下面只对相关步骤的关键信息进行详细分析;
步骤3:对所有TOPO涉及到的逻辑资源需求情况进行重新统计;由于执行完了测试用例②,所以需要2台逻辑资源DUT、3台逻辑资源AUX、2台逻辑资源PC的测试用例个数都应该相应的减1,此时的逻辑资源需求情况为:
1DUT=5
3AUX=2
1AUX=2
2PC=1
1PC=2
步骤4:确定当前各类逻辑资源(DUT、AUX、PC)的释放优先级;从上面的逻辑资源统计情况可以看出,需要2台PC的用例个数为最小,所以逻辑资源PC的释放优先级最高;
步骤5:确定需求数量最多且释放优先级最高的逻辑测试资源(PC)的所有测试用例,从测试任务S4的TOPO信息中可以看出,需要2台PC的测试用只有一个,即测试用例④;
步骤6:将逻辑资源与物理资源进行物理映射,即将测试用例④的逻辑TOPO涉及到的逻辑资源DUT、AUX、PC与在步骤2中分配给测试任务S4的物理资源进行一一映射;
步骤7:执行的测试用例④;
步骤8:统计并释放所有与逻辑资源PC相对应的空闲物理资源,当测试用例④执行完时,需要2台PC的测试用例个数为0,即存在可释放的空闲测试资源(PC);逻辑资源PC的最高需求数量为2,次高需求数量为1,它们的差为1,所以,可以释放出1台与逻辑资源PC相对应的物理资源;
步骤9:判断测试任务的测试用例是否已经执行完,如果测试用例已经执行完,则跳到步骤10,如果测试用例还没有执行完,则转到步骤3;由于还有4个测试用例还没执行完,所以转到步骤3继续该测试任务的分析及执行;
步骤3:对所有逻辑TOPO涉及到的逻辑资源需求情况进行重新统计;由于执行完了测试用例④,所以需要1台逻辑资源DUT、1台逻辑资源AUX、2台逻辑资源PC的测试用例个数都应该相应的减1,此时的逻辑资源需求情况为:
1DUT=4
3AUX=2
1AUX=1
1PC=2
步骤4:确定当前各类逻辑资源(DUT、AUX、PC)的释放优先级;从上面的逻辑资源统计情况可以看出,需要3台AUX的用例个数和需要1台PC的用例个数都为2,且都小于需要1台DUT的用例个数,此时,不能唯一确定出最高释放优先级的逻辑资源,则考虑所有并列最高优先级的逻辑资源(AUX和PC)的最高需求数量和次高需求数量的差量大小,逻辑资源AUX的最高需求数量3与次高数量1的差为2,而逻辑资源PC的最高需求数量1与次高数量0的差为1,所以逻辑资源AUX的释放优先级最高;
步骤5:确定需求数量最多且释放优先级最高的逻辑测试资源(AUX)的所有测试用例,从测试任务S4的TOPO信息中可以看出,需要3台AUX的测试用有2个,即测试用例①和③;
步骤6:将逻辑资源与物理资源进行物理映射,即将测试用例①和③的逻辑TOPO涉及到的逻辑资源DUT、AUX、PC与在步骤2中分配给测试任务S的物理资源进行一一映射;
步骤7:执行测试用例①和③;
步骤8:统计并释放所有与逻辑资源AUX相对应的空闲物理资源,当测试用例①和③执行完时,需要3台AUX的测试用例个数为0,即存在可释放的空闲测试资源(AUX);且逻辑资源AUX的最高需求数量为3,次高需求数量为1,它们之差为2,所以,可以释放出2台与逻辑资源AUX相对应的物理资源;同时,由于测试用例①和③执行完后,占用逻辑资源PC的测试用例个数变为了0,即还存在可释放的空闲测试资源(PC);所以还可以释放出1台与逻辑资源PC相对应的物理主机资源;对于测试用例⑤和⑥的执行,其分析过程与测试用例①、②、③、④的分析过程类似,这里不再赘述。
步骤9:判断测试任务的测试用例是否已经执行完,如果测试用例已经执行完,则跳到步骤10,如果测试用例还没有执行完,则转到步骤3;假设此时已经执行完了所有测试用例,所以转到步骤10;
步骤10:当本测试任务的所有测试用例执行完毕时,结束本测试任务的测试。
至此,6个测试用例全部执行完毕,它们的执行顺序是:②④①③⑤⑥,它们的资源释放情况为:当执行完测试用例②时,释放1台与逻辑资源DUT相对应的物理资源,当执行完测试用例④时,释放1台与逻辑资源PC相对应的物理资源,当执行完测试用例①和③时,释放2台与逻辑资源AUX相对应的物理资源,另外,此时还释放了1台与逻辑资源PC相对应的物理资源,当执行完测试用例⑤时,释放1台与逻辑资源AUX相对应的物理资源,当执行完测试用例⑥时,释放1台与逻辑资源DUT相对应的物理资源。