掌桥专利:专业的专利平台
掌桥专利
首页

用例分组方法、装置、计算机设备及存储介质

文献发布时间:2024-04-18 19:58:26


用例分组方法、装置、计算机设备及存储介质

技术领域

本申请涉及计算机技术领域,具体涉及一种用例分组方法、装置、计算机设备及存储介质。

背景技术

用例(use case),是软件工程或系统工程中对系统如何反应外界请求的描述,是一种通过用户的使用场景来获取需求的技术。

为便于对用例的运行管控,在运行用例时,往往都会对用例进行分组,按组运行用例,每个用例组占用一定的资源,在运行成功之后,释放占用的资源。用例可以通过人工进行分组,或者采用随机策略、线性排序策略等方式进行分组。

然而,上述分组方式无法实现资源的充分利用。

发明内容

本申请实施例提供一种用例分组方法、装置、计算机设备及存储介质,旨在实现资源的充分利用。

一方面,本申请提供一种用例分组方法,所述用例分组方法包括:

获取未运行用例的功能参数和已运行用例的功能参数;

根据所述未运行用例的功能参数和已运行用例的功能参数,得到未运行用例和已运行用例之间的关联程度;

获取已运行用例的历史运行耗时;

根据所述关联程度,和所述已运行用例的历史运行耗时,得到未运行用例的预估运行耗时;

根据所述未运行用例的预估运行耗时对所述未运行用例进行分组,得到分组完成的各用例组,其中,所述各用例组的预估运行耗时总和的差异程度满足预设差异条件。

在本申请一些实施方案中,根据所述未运行用例的预估运行耗时对所述未运行用例进行分组,得到分组完成的各未运行用例组,包括:

获取各已运行用例的历史运行耗时的第一耗时均值;

获取各未运行用例的预估运行耗时的第二耗时均值;

计算所述第一耗时均值和所述第二耗时均值的差值;

在预设的差值范围与用例组组数的对应关系中,查找出与所述差值匹配的第一预估用例组组数;

根据所述第一预估用例组组数,得到用于进行分组的用例组组数;

根据所述各未运行用例的预估运行耗时将所述各未运行用例划分成N组,得到分组完成的各用例组,其中,所述N等于所述用例组组数。

在本申请一些实施方案中,在所述根据所述第一预估用例组组数,得到用于进行分组的用例组组数之前,所述方法还包括:

获取当前未被占用的线程数,所述线程数为用于运行用例的线程数;

根据所述未被占用的线程数,确定第二预估用例组组数;

所述根据所述第一预估用例组组数,得到用于进行分组的用例组组数,包括:

根据所述第一预估用例组组数和所述第二预估用例组组数,得到用于进行分组的用例组组数。

在本申请一些实施方案中,根据所述未运行用例的功能参数和已运行用例的功能参数,得到未运行用例和已运行用例之间的关联程度,包括:

遍历各已运行用例,计算未运行用例的功能参数与当前遍历到的已运行用例的功能参数的相关系数,分别得到未运行用例与各已运行用例之间的各相关系数;

在所述各相关系数中,确定满足预设关联条件的目标相关系数;

在预设的相关系数范围和关联程度的对应关系中,查找出与所述目标相关系数匹配的关联程度。

在本申请一些实施方案中,根据所述未运行用例的预估运行耗时对所述未运行用例进行分组,得到分组完成的各用例组,包括:

根据已分组的各未运行用例,得到当前分组未完成的各用例组的预估运行耗时总和;

根据所述当前各用例组的预估运行耗时总和,确定预估运行耗时总和最小的目标用例组;

将未分组的未运行用例加入所述目标用例组,并更新当前各用例组的预估运行耗时总和,直至所有未运行用例分组完成,得到分组完成的各用例组。

在本申请一些实施方案中,得到分组完成的各用例组之后,用例分组方法还包括:

在用例组运行的过程中,监测用例组的已运行耗时;

若所述用例组的已运行耗时和所述用例组中各用例的总预估运行耗时满足预设超时条件,则中止所述用例组中当前未运行用例的运行工作;

将中止运行工作的未运行用例重新进行分组。

在本申请一些实施方案中,用例分组方法还包括:

获取当前未被占用的线程数,所述线程数为用于运行所述用例的线程数;

根据所述未运行用例的个数和所述当前未被占用的线程数,计算每个未运行用例的可用线程数;

获取当前空闲CPU资源、和当前空闲内存资源以及当前耗时波动系数;其中,所述耗时波动系数根据当前各未运行用例的预估运行耗时均值确定;

根据所述当前空闲CPU资源、每个未运行用例的可用线程数,以及当前的耗时波动系数,计算每个线程的预估可用CPU资源;

根据所述当前空闲内存资源、每个未运行用例的可用线程数,以及当前的耗时波动系数,计算每个线程的预估可用内存资源;

若所述每个未运行用例的可用线程数、每个线程的预估可用CPU资源以及每个线程的预估可用内存资源满足预设的资源不足条件,则发出资源不足告警提示。

另一方面,本申请提供一种用例分组装置,所述用例分组装置包括:

获取模块,用于获取未运行用例的功能参数和已运行用例的功能参数;

计算模块,用于根据所述未运行用例的功能参数和已运行用例的功能参数,得到未运行用例和已运行用例之间的关联程度;

预估模块,用于获取已运行用例的历史运行耗时,根据所述关联程度,和所述已运行用例的历史运行耗时,得到未运行用例的预估运行耗时;

分组模块,用于根据所述未运行用例的预估运行耗时对所述未运行用例进行分组,得到分组完成的各用例组,其中,所述各用例组的预估运行耗时总和的差异程度满足预设差异条件。

另一方面,本申请还提供一种计算机设备,所述计算机设备包括:

一个或多个处理器;

存储器;以及

一个或多个应用程序,其中所述一个或多个应用程序被存储于所述存储器中,并配置为由所述处理器执行以实现第一方面中任一项所述的用例分组方法。

第四方面,本申请还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器进行加载,以执行第一方面任一项所述的用例分组方法中的步骤。

本申请实施例通过未运行用例和已运行用例的功能参数,计算未运行用例和已运行用例的关联程度,基于关联程度和已运行用例的历史运行耗时,即可在未运行用例未运行之前,提前预估出未运行用例的运行耗时,通过预估运行耗时进行分组,分组完成的各用例组的预估运行耗时总和接近,以此,实现各用例组之间执行的负载均衡,减少在各用例组运行时,一部分用例组占用的资源持续使用,而一部分用例组占用的资源过早空闲的情况,有利于实现资源分配的效用最大化。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例中提供的用例分组方法的一个实施例流程示意图;

图2是本申请实施例的对刚提交的新用例代码的处理示意图;

图3是本申请实施例中步骤102的一个实施例流程示意图;

图4是本申请实施例中提供的资源动态预估的示意图;

图5是本申请实施例中提供的用例组分组的示意图;

图6是本申请实施例中提供的用例组执行的示意图;

图7是本申请实施例中提供的用例分组装置的一个实施例结构示意图;

图8是本申请实施例中提供的计算机设备的一个实施例结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

在本申请的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个所述特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。

在本申请中,“示例性”一词用来表示“用作例子、例证或说明”。本申请中被描述为“示例性”的任何实施例不一定被解释为比其它实施例更优选或更具优势。为了使本领域任何技术人员能够实现和使用本申请,给出了以下描述。在以下描述中,为了解释的目的而列出了细节。应当明白的是,本领域普通技术人员可以认识到,在不使用这些特定细节的情况下也可以实现本申请。在其它实例中,不会对公知的结构和过程进行详细阐述,以避免不必要的细节使本申请的描述变得晦涩。因此,本申请并非旨在限于所示的实施例,而是与符合本申请所公开的原理和特征的最广范围相一致。

需要说明的是,本申请实施例方法由于是在电子设备中执行,各电子设备的处理对象均以数据或信息的形式存在,例如时间,实质为时间信息,可以理解的是,后续实施例中若提及尺寸、数量、位置等,均为对应的数据存在,以便电子设备进行处理,具体此处不作赘述。

本申请实施例提供一种用例分组方法、装置、计算机设备及存储介质,以下分别进行详细说明。

首先,本申请实施例中提供一种用例分组方法,该用例分组方法的执行主体为用例分组装置,该用例分组装置应用于计算机设备,计算机设备可以为服务器等,该计算机设备可应用于持续集成(Continuous integration,CI)系统。

该用例分组方法包括:获取未运行用例的功能参数和已运行用例的功能参数,根据未运行用例的功能参数和已运行用例的功能参数,得到未运行用例和已运行用例之间的关联程度;获取已运行用例的历史运行耗时,根据关联程度,和已运行用例的历史运行耗时,得到未运行用例的预估运行耗时,根据未运行用例的预估运行耗时对未运行用例进行分组,得到分组完成的各用例组,其中,各用例组的预估运行耗时总和的差异程度满足预设差异条件。

本申请实施例能够在用例未运行之前,提取预估该用例的运行耗时,并基于运行耗时进行分组,实现各用例组执行的负载均衡,减少在各用例组运行时,一部分用例组占用资源持续使用,而一部分用例组占用的资源过早空闲的情况,有利于实现资源分配的效用最大化,并且,能够节约大批量用例执行的总耗时。

下面对本申请实施例的用例分组方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须。

如图1所示,为本申请实施例中用例分组方法的一个实施例流程示意图,该用例分组方法包括:

步骤101,获取未运行用例的功能参数和已运行用例的功能参数。

具体地,本申请实施例的用例可以为测试用例,从而能实现自动化测试过程的资源的最优分配以及降低测试用例执行的总耗时。

每个用例有至少一个功能,每个功能存在至少一个输入参数,该输入参数称为用例的功能参数。例如登录功能的参数包括:账号、密码等。

本申请实施例中未运行用例可以包括计算机设备刚接收到的新用例,其中,当前提交的用例代码对应的用例即为新用例。

若当前存在用例代码提交到本申请实施例的计算机设备,本申请实施例的计算机设备即可从提交的用例代码提取到未运行用例的功能参数。

可参照图2所示,用例代码提交后,计算机设备会对用例代码进行遍历扫描并临时存储;然后,调用历史用例代码,历史用例代码对应的用例包括:已运行用例,通过diff方法处理历史用例代码以及当前提交的用例代码,获得变更项,变更项构成无序字段池,其中,历史用例代码中的用例包括:已运行用例;然后对变更项构建序号映射,例如,序号1:id、方法名、参数值;序号2:id、方法名、参数值…序号i:id、方法名、参数值等,其中,序号i代表变更项字段所属的类别数,类别数通过查询“用例预设的类别管理表单”确定,不同的方法对应不同的功能。

得到序号映射表后,基于序号映射表解析出变更参数列表,对变更参数列表进行归并排序,将归并排序后的参数列表和计算机设备中存储的历史用例参数表做去重处理,去重处理包括:采用哈希表遍历查询算法,若查询到相同的节点,则删除,没有查询到,则插入列表尾部,从而得到一份与历史用例在序号映射表上内容不重复的“新用例逻辑管理结构表”,将新用例逻辑关系结构表存储与用例代码仓库及参数化文档存储库。

可从新用例逻辑关系结构表中得到未运行用例的功能参数,以及已运行用例的功能参数,然后执行步骤102。

步骤102,根据未运行用例的功能参数和已运行用例的功能参数,得到未运行用例和已运行用例之间的关联程度。

可参考图3所示,在一些实施例中,步骤101进一步包括:

步骤1021,各已运行用例是否已遍历完成。

参与遍历的已运行用例可以为计算机设备中的所有已运行用例,也可以未根据预设规则选择的部分已运行用例,本申请实施例不对预设规则进行限定。

若未遍历完成,在未遍历到的已运行用例中选择一个已运行用例作为本轮遍历的已运行用例,并进入步骤1022,若遍历完成,进入步骤1023。

步骤1022,计算未运行用例的功能参数与当前遍历到的已运行用例的功能参数的相关系数。

具体地,相关系数的计算公式如下:

其中,X可代表未运行用例的功能参数,Y为当前遍历到的已运行用例的功能参数,Cov(X,Y)为X与Y的协方差,Var[X]为X的方差,Var[Y]为Y的方差。

r可以表示在两个用例的参数组合线性关系上,是否具有一定程度的相关性。

示例性的,若未运行用例包括{方法1[参数1],方法2[参数2]};当前遍历到的已运行用例包括{方法3[参数3],方法4[参数4]},则未运行用例的功能参数包括参数1和参数2,当前遍历到的已运行用例的功能参数包括:参数3和参数4,基于此,得到未运行用例和当前遍历到的已运行用例的相关系数r1。

在将各已运行用例遍历完成之后,可得到未运行用例和各已运行用例之间的相关系数r1,r2,……,rn,其中,n代表遍历的各已运行用例的个数,r的范围位于0至1之间,然后,执行步骤1023。

步骤1023,在各相关系数中,确定满足预设关联条件的目标相关系数。

其中,预设关联条件可以设置为在相关系数中,值最大的相关系数。也可以根据实际需求设置预设关联条件,本实施例不对此进行限定。

步骤1024,在预设的相关系数范围和关联程度的对应关系中,查找出与所述目标相关系数匹配的关联程度。

其中,关联程度可具有不同的级别,相关系数范围不同对应不同的级别。

示例性的,关联程度的级别包括:

1、关联程度P0级别:β=0.89,对应的相关系数范围为范围a,例如,r=0,落在p0级别。

2、关联程度P1级别:β=0.91,对应的相关系数范围为范围b;

3、关联程度P3级别:β=0.95,对应的相关系数范围为范围c;

4、关联程度P4级别:β=0.97,对应的相关系数范围为范围d;

5、关联程度P5级别:β=0.99,对应的相关系数范围为范围e。

其中,相关系数范围a、b、c、d、e可根据需求设置,本实施例不对此进行限定。

例如,目标相关系数落在范围e内,则关联程度为P5级别,关联程度具体数值为0.99。

其中,如图2所示,上述判断目标相关系数的范围的过程,即为图2中的区间评价,得到的评价标签即为关联程度级别的确定过程,每个级别具有一个数值。

上述步骤1021和1024综合考虑各已运行用例的相关性得到关联程度,提高关联程度计算的精准性,从而能够使得预估的运行耗时更加准确。

除上述步骤1021和1024的获取关联程度的方式外,还可使用如下方式;

在另一些实施例中,也可在存储的各已运行用例中选择一个已运行用例,进行相关性的计算,根据得到相关性确定关联程度。

在另一些实施例中,还可在得到当前运行用例与各已运行用例之间的相关性之后,根据各相关性的统计值,例如平均值,根据平均值的范围确定关联程度。

上述给出了几种获取关联程度的获取方法,在实际应用中,也可根据实际情况设置关联程度的获取方式,本申请实施例不对此进行限定。

在获取关联程度之后,可执行步骤103。

步骤103,获取已运行用例的历史运行耗时,根据关联程度,和已运行用例的历史运行耗时,得到未运行用例的预估运行耗时。

在一些实施例中,可将已运行用例的历史运行耗时与关联程度相乘,得到未运行用例的预估运行耗时。

具体地,根据目标相关系数确定目标已运行用例,将目标已运行用例的历史运行耗时与目标相关系数对应的关联程度相乘。

例如,已运行用例user1,和未运行用例user2的相关系数为目标相关系数,则已运行用例user1为目标已运行用例,将与运行用例user1的历史运行耗时与目标相关系数对应的关联程度相乘,得到未运行用例的预估运行耗时。

在另一些实施例,可获取未运行用例和各已运行用例之间的各相关系数,查找与所述各相关系数匹配的各关联程度,根据各关联程度的大小设置各耗时权值,将各耗时权值分别与各已运行用例的历史运行耗时相乘,得到预估运行耗时,其中,关联程度越大,耗时权值越大。

例如,未运行用例和已运行用例a的相关系数为r1,与r1匹配的关联程度为p0级别;未运行用例和已运行用例b的相关系数为r2,与r2匹配的关联程度为p0级别,根据p0级别和p1级别对应的值的大小关系设置已运行用例a的耗时权值ta,以及已运行用例b的耗时权值tb,由于p0级别对应的β值小于p1对应的β值,因此,ta大于tb。

上述是预估未运行用例的运行耗时的方式,参考图4所示,本申请实施例不仅可以对未运行用例进行耗时预估,还可以对集群自身的可用资源进行预估,以下给出预估每个未运行用例的可用线程数、每个线程的可用CPU资源,以及内存资源的方式。

对于每个未运行用例的可用线程数预估,包括:获取当前未被占用的线程数,所述线程数为用于运行所述用例的线程数根据所述未运行用例的个数和所述当前未被占用的线程数,计算每个未运行用例可用的线程数,计算得到的线程数即为每个未运行用例的预估可用线程数。

即,每个为运行用例的预估可用线程数N=(总启动线程S-已占用线程数M)/未运行用例数目K。

对于预估每个线程的可用CPU资源的方式,包括:根据所述当前空闲CPU资源、每个未运行用例可用的线程数,以及当前的耗时波动系数,计算每个线程的预估可用CPU资源。

具体地,每个线程预估可用CPU资源=空闲CPU资源/(可用线程数N*复杂度系数i),其中,复杂度系数i根据耗时波动系数确定,耗时波动系数根据当前各未运行用例的预估运行耗时均值确定。

以下简述复杂度系数i的获取过程:

首先,获取各已运行用例的历史运行耗时的中位数,将中位数作为耗时波动系数,并获取各未运行用例的预估耗时的第二耗时均值,即计算:各未运行用预估耗时总和/未运行用例数n。

其次,比较耗时波动系数和第二耗时均值的大小,若第二耗时均值大于耗时波动系数,则复杂度系数为第一预设值;若第二耗时均值等于耗时波动系数,则复杂度系数为第二预设值;若第二耗时均值等于耗时波动系数,则复杂度系数为第三预设值。

其中,第一预设值>第二预设值>第三预设值。

示例性的,第一预设值为1.2,第二预设值为1.0,第三预设值为0.6。

对于预估每个线程的预估可用内存(MEM)资源的方式,包括:根据所述当前空闲内存资源、每个未运行用例可用的线程数,以及当前的耗时波动系数,计算每个线程的预估可用内存资源。

具体地,每个线程预估可用内存资源=空闲内存资源/(可用线程数N*复杂度系数i)。

若上述计算得到的每个未运行用例的可用线程数、每个线程的预估可用CPU资源以及每个线程的预估可用内存资源满足预设的资源不足条件,则发出资源不足告警提示。

例如,预设的资源不足条件可包括:可用线程数不足条件,预估可用CPU资源不足条件,预估可用内存资源不足条件,若其中一个条件不满足,则发出资源不足告警提示。

又例如,可对可用线程数、预估可用CPU资源以及预估可用内存资源进行评分,若评分低于预设阈值,表征满足预设的资源不足条件。

本申请实施例可对集群中的资源进行监控,提前预判用例运行资源是否充足,若不充足,进行告警提示,以便于用户针对于资源不足情况处理,提高用例运行的成功率。

上述为资源预估以及运行耗时预估,在得到预估运行耗时之后,执行步骤104。

步骤104,根据未运行用例的预估运行耗时对未运行用例进行分组,得到分组完成的各用例组。

其中,各用例组的预估运行耗时总和的差异程度满足预设差异条件。

预设差异条件表征预估运行耗时总和接近,例如,各用例组的预估运行耗时总和的方差最小。

在分组时,可参照图5所示,需要先确定用例组组数N,以此未运行用例划分为N组。

在一些实施例中,确定用例组组数的方式可包括:获取各已运行用例的历史运行耗时的第一耗时均值;获取各未运行用例的预估运行耗时的第二耗时均值;根据第一耗时均值和所述耗时第二均值,得到用于进行分组的用例组组数。

具体地,根据第一耗时均值和耗时第二均值,得到用于进行分组的用例组组数,包括:

计算所述第一耗时均值和第二耗时均值的差值;

在预设的差值范围与用例组组数的对应关系中,查找出与所述差值匹配的的第一预估用例组组数;

将第一预估用例组组数当作用于进行分组的用例组组数。

示例性的,将第一耗时均值记作A,第二耗时记作B,第一预估用例组组数记作X,预设的差值范围与用例组组数的对应关系可如下所示:

若|A-B|∈【10,100】ms,则X=2,其中,ms为毫秒单位;

若|A-B|∈【100,500】ms,则X=8;

若|A-B|∈【500,900】ms,则X=24;

若|A-B|∈【90,1400】ms,则X=30;

若|A-B|∈【1400,2200】ms,则X=55。

在另一些实施例中,确定用例组组数的方式可包括:根据未被占用的线程数,确定第二预估用例组组数,其中未被占用的线程数为用于运行用例的线程数。

未被占用的线程数=总启动线程数-已占用线程数。

例如,未被占用的线程数为20,则第二预估用例组组数也为20,可将第二预估用例组组数作为用于进行分组的用例组组数。

在另一些实施例中,可根据第一预估用例组组数和第二预估用例组组数,得到用例组组数。

具体地,用于进行分组的用例组组数=min(第一预估用例组组数,第二预估用例组组数),即,第一预估用例组组数和第二预估用例组组数中的最小值作为用于进行分组的用例组组数。

参照图5所示,在确定用于进行分组的用例组组数后,可通过动态规划算法对用例进行划分。

在一些实施例中,根据已分组的各未运行用例,得到当前分组未完成的各用例组的预估运行耗时总和;

根据当前各用例组的预估运行耗时总和,确定预估运行耗时总和最小的目标用例组;

将未分组的未运行用例加入所述目标用例组,并更新当前各用例组的预估运行耗时总和,直至所有未运行用例分组完成,得到分组完成的各用例组。

示例性的,若当前未分组的未运行用例为case1,用例组有三组,三组用例组的预估运行耗时总和分别为t1,t2,t3,其中,t3最小,则将case1分到t3对应的用例组,并更新各用例组的预估运行耗时总和,更新后的预估总耗时分别为t1,t2,t3+tcase1,其中,tcase1为用例case1的运行耗时,若下一轮未分组的未运行用例为case2,在t1,t2,t3+tcase2中,t2最小,因此,将case2分到t2对应的组,以此类推直到所有未运行用例分组完成。

值得一提的是,若是将首个未运行用例进行分组时,即各用例组中还不存在用例,各用例组的运行耗时可都设置为0,若存在多个用例组的预估运行耗时总和相同,且,该预估运行耗时总和在所有用例组中最小,可在该多个用例组中随机选择一个用例组,将当前未分组的未运行用例划分到该用例组。

上述用例组划分的方式还可使用以下动态规划公式表达:

Sub(T)=min(sub(T-Tcase_i)+1);

其中,Sub(T)代表分组的预估运行耗时,Tcase_i代表第i个用例case_i的预估运行耗时。

示例性的,可参照图5所示,图5为将9个用例划分为3个用例组的分组示意图,其中,每个用例被标记为case_1,case_2、case_3…case_i,每个sub代表一个组别,图示中单个矩形的长短表征用例的预估运行耗时的大小,分组完成后的各用例组的预估运行耗时大致相同。

即,本申请实施例通过动态规划,在每轮分组中都查找最小预估运行耗时总和最小的组,以此,进行分组,更有利于实现各用例组运行时间的负载均衡。

参照图6所示,在分组完成后,可按组执行各用例,步骤如下:

1.每个用例组按照服务器多线程来负载执行,即每个用例组携带若干个case纳入线程池中构成工作任务job。job为k8s(Kubernetes)中负责批量处理短暂的一次性任务,仅执行一次,并保证处理的一个或者多个Pod成功结束,Kubernetes是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。

2.job1、job2、job3、…、jobn可以进行并行执行。

3.在用例组运行过程中,检测用例组的已运行耗时,并通过【预估预估耗时-已运行耗时】做进度监控。

4.若所述用例组的已运行耗时和用例组中各用例的总预估运行耗时满足预设超时条件,则中止所述用例组中当前未运行用例的运行工作。

其中,预设超时条件可以为:已运行耗时>预估耗时*1.5。若满足预设条件,则触发熔断,即中止该用例组内剩余case未运行的运行工作,纳入动态分配用例的过程,重新自动编排,即进入下一轮的“根据未运行用例的预估运行耗时对所述未运行用例进行分组”的步骤。

也就是说,参与进行分组的未运行用至少包括两种情况:一个是刚提交的新用例,另一种是在上一轮已经经过分组,但是并没有运行成功的未运行用例。

5.若用例为测试用例,将该用例执行后的测试数据/结果被记录器不断写入,以供测试报告编写绘制。

6.测试数据结果记录,其中每个已经运行完毕的用例实际耗时作为历史耗时,输入至【资源动态预估模块】更新每个用例的预估耗时,更新规则按照AVG(实际耗时T1、历史预估耗时T2)求平均值。

即,本申请实施例在未运行用例运行完成之后,将其设置为已运行用例,并根据该用例的实际耗时和预估运行耗时,即历史预估运行耗时的平均值,作为已运行用例的历史运行耗时。

本申请实施例通过两用例之间功能参数,获取两用例之间的关联程度,解决了无法分析用例相关性的问题;通过关联程度和历史运行耗时,能够提取预估用例运行消耗的时间,并且还能提取预估服务器的资源是否足以用例使用;过预估运行耗时进行分组,能够减少在各用例组运行时,一部分用例组占用资源持续使用,而一部分用例组占用的资源过早空闲的情况,使得各用例组尽量同时结束,节约大批量用例执行的总耗时,有利于实现资源分配的效用最大化。

本申请实施例还提供一种用例分组装置,参考图7所示,包括:

获取模块701,用于获取未运行用例的功能参数和已运行用例的功能参数;

计算模块702,用于根据所述未运行用例的功能参数和已运行用例的功能参数,得到未运行用例和已运行用例之间的关联程度;

预估模块703,用于获取已运行用例的历史运行耗时,根据所述关联程度,和所述已运行用例的历史运行耗时,得到未运行用例的预估运行耗时;

分组模块704,用于根据所述未运行用例的预估运行耗时对所述未运行用例进行分组,得到分组完成的各用例组,其中,所述各用例组的预估运行耗时总和的差异程度满足预设差异条件。

在本申请一些实施方案中,计算模块702进一步用于获取各已运行用例的历史运行耗时的第一耗时均值;

获取各未运行用例的预估运行耗时的第二耗时均值;

计算所述第一耗时均值和所述第二耗时均值的差值;

在预设的差值范围与用例组组数的对应关系中,查找出与所述差值匹配的第一预估用例组组数;根据所述第一预估用例组组数,得到用于进行分组的用例组组数;

根据所述各未运行用例的预估运行耗时将所述各未运行用例划分成N组,得到分组完成的各用例组,其中,所述N等于所述用例组组数。

在本申请一些实施方案中,计算模块702进一步用于获取当前未被占用的线程数,所述线程数为用于运行用例的线程数;

根据所述未被占用的线程数,确定第二预估用例组组数;

所述根据所述第一预估用例组组数,得到用于进行分组的用例组组数,包括:

根据所述第一预估用例组组数和所述第二预估用例组组数,得到用于进行分组的用例组组数。

在本申请一些实施方案中,计算模块702进一步用于遍历各已运行用例,计算未运行用例的功能参数与当前遍历到的已运行用例的功能参数的相关系数,分别得到未运行用例与各已运行用例之间的各相关系数;

在所述各相关系数中,确定满足预设关联条件的目标相关系数;

在预设的相关系数范围和关联程度的对应关系中,查找出与所述目标相关系数匹配的关联程度。

在本申请一些实施方案中,分组模块704进一步用于根据已分组的各未运行用例,得到当前分组未完成的各用例组的预估运行耗时总和;

根据所述当前各用例组的预估运行耗时总和,确定预估运行耗时总和最小的目标用例组;

将未分组的未运行用例加入所述目标用例组,并更新当前各用例组的预估运行耗时总和,直至所有未运行用例分组完成,得到分组完成的各用例组。

在本申请一些实施方案中,分组模块704进一步用于在用例组运行的过程中,监测用例组的已运行耗时;

若所述用例组的已运行耗时和所述用例组中各用例的总预估运行耗时满足预设超时条件,则中止所述用例组中当前未运行用例的运行工作;

将中止运行工作的未运行用例重新进行分组。

在本申请一些实施方案中,分组模块704进一步用于获取当前未被占用的线程数,所述线程数为用于运行所述用例的线程数;

根据所述未运行用例的个数和所述当前未被占用的线程数,计算每个未运行用例的可用线程数;

获取当前空闲CPU资源、和当前空闲内存资源以及当前耗时波动系数;其中,所述耗时波动系数根据当前各未运行用例的预估运行耗时均值确定;

根据所述当前空闲CPU资源、每个未运行用例的可用线程数,以及当前的耗时波动系数,计算每个线程的预估可用CPU资源;

根据所述当前空闲内存资源、每个未运行用例的可用线程数,以及当前的耗时波动系数,计算每个线程的预估可用内存资源;

若所述每个未运行用例的可用线程数、每个线程的预估可用CPU资源以及每个线程的预估可用内存资源满足预设的资源不足条件,则发出资源不足告警提示。

本申请实施例还提供一种计算机设备,其集成了本申请实施例所提供的任一种用例分组装置,所述计算机设备包括:

一个或多个处理器;

存储器;以及

一个或多个应用程序,其中所述一个或多个应用程序被存储于所述存储器中,并配置为由所述处理器执行上述用例分组方法实施例中任一实施例中所述的用例分组方法中的步骤。

本申请实施例还提供一种计算机设备,其集成了本申请实施例所提供的任一种用例分组装置。如图8所示,其示出了本申请实施例所涉及的计算机设备的结构示意图,具体来讲:

该计算机设备可以包括一个或者一个以上处理核心的处理器801、一个或一个以上计算机可读存储介质的存储器802、电源803和输入单元804等部件。本领域技术人员可以理解,图8中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:

处理器801是该计算机设备的控制中心,利用各种接口和线路连接整个计算机设备的各个部分,通过运行或执行存储在存储器802内的软件程序和/或模块,以及调用存储在存储器802内的数据,执行计算机设备的各种功能和处理数据,从而对计算机设备进行整体监控。可选的,处理器801可包括一个或多个处理核心;优选的,处理器801可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器801中。

存储器802可用于存储软件程序以及模块,处理器801通过运行存储在存储器802的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器802可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器802可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器802还可以包括存储器控制器,以提供处理器801对存储器802的访问。

计算机设备还包括给各个部件供电的电源803,优选的,电源803可以通过电源管理系统与处理器801逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源803还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。

该计算机设备还可包括输入单元804,该输入单元804可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。

尽管未示出,计算机设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,计算机设备中的处理器801会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器802中,并由处理器801来运行存储在存储器802中的应用程序,从而实现各种功能.

本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。

为此,本申请实施例提供一种计算机可读存储介质,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。其上存储有计算机程序,所述计算机程序被处理器进行加载,以执行本申请实施例所提供的任一种用例分组方法中的步骤。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见上文针对其他实施例的详细描述,此处不再赘述。

具体实施时,以上各个单元或结构可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元或结构的具体实施可参见前面的方法实施例,在此不再赘述。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

以上对本申请实施例所提供的一种用例分组方法、装置、计算机设备及存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

相关技术
  • 测试用例的调度方法、装置、计算设备及计算机存储介质
  • 接口测试用例生成方法、装置、计算机设备和存储介质
  • 分组测试方法、装置、计算机设备及存储介质
  • 人员分组方法、装置、电子装置及计算机可读存储介质
  • 测试用例生成方法、装置及计算机可读存储介质
  • 一种UI测试用例管理方法、装置、计算机设备以及计算机可读存储介质
  • 测试用例与测试数据分离系统、方法、计算机设备和计算机可读存储介质
技术分类

06120116489763