CN117891744A - 分布式测试用例的方法及装置 - Google Patents
分布式测试用例的方法及装置 Download PDFInfo
- Publication number
- CN117891744A CN117891744A CN202410117221.0A CN202410117221A CN117891744A CN 117891744 A CN117891744 A CN 117891744A CN 202410117221 A CN202410117221 A CN 202410117221A CN 117891744 A CN117891744 A CN 117891744A
- Authority
- CN
- China
- Prior art keywords
- test
- target
- distributed
- case
- machines
- 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
- 238000012360 testing method Methods 0.000 title claims abstract description 312
- 238000000034 method Methods 0.000 title claims abstract description 102
- 238000012545 processing Methods 0.000 claims abstract description 21
- 238000003860 storage Methods 0.000 claims description 21
- 238000004590 computer program Methods 0.000 claims description 14
- 238000012163 sequencing technique Methods 0.000 claims description 8
- 238000011161 development Methods 0.000 abstract description 12
- XSQUKJJJFZCRTK-NJFSPNSNSA-N UREA C 14 Chemical compound N[14C](N)=O XSQUKJJJFZCRTK-NJFSPNSNSA-N 0.000 abstract description 7
- 238000011112 process operation Methods 0.000 abstract description 4
- 230000008569 process Effects 0.000 description 37
- 230000006870 function Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 238000010276 construction Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 230000010354 integration Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 238000007405 data analysis Methods 0.000 description 2
- 238000013499 data model Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000011990 functional testing Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种分布式测试用例的方法及装置,涉及计算机技术领域,方法包括:将待测试的至少一个目标用例存储至预先设置的共享队列中;基于中央处理器CPU的核数,锁定N台测试机器;其中,N为大于或等于1的整数;利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试。相较于相关技术中pytest和gtest只支持单进程运行,测试集运行的时间的随着测试用例的增加不断增加,本申请采用多台测试机器对共享队列中的目标用例进行分布式测试的方式,这里的分布式测试也即利用N台测试机器同步对不同的目标用例进行测试,可以有效缩短测试环节的总时长,进而提高测试效率及整体的开发效率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种分布式测试用例的方法及装置。
背景技术
持续集成(Continuous Integration,CI)/持续部署(Continuous Deployment,CD)是一种软件开发实践,旨在通过自动化的流程和工具来频繁地集成和部署代码。在CI/CD流程中,测试用例的执行是至关重要的一环,测试用例是用来验证软件功能和质量的一系列测试步骤,可以确保代码的正确性和稳定性。
目前,单个测试集包括的测试用例数量可以高达数万条,数量如此多的测试用例会导致测试环节的时间非常长,进而导致开发效率低。
发明内容
本发明提供一种分布式测试用例的方法及装置,用以解决现有技术中测试环节的时间非常长,进而导致开发效率低的问题。
本发明提供一种分布式测试用例的方法,包括:
将待测试的至少一个目标用例存储至预先设置的共享队列中;
基于中央处理器CPU的核数,锁定N台测试机器;其中,N为大于或等于1的整数;
利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试。
根据本发明提供的一种分布式测试用例的方法,所述将待测试的至少一个目标用例存储至预先设置的共享队列中,包括:
将所述目标用例通过目标形式存储至所述共享队列中;其中,所述目标形式包括以下至少一项:
单个目标用例;
可执行文件,所述可执行文件包括至少两个目标用例。
根据本发明提供的一种分布式测试用例的方法,在所述目标形式包括单个目标用例的情况下,所述共享队列中的目标用例满足以下至少一项:
随机排序;
按照所述目标用例的待执行时间排序。
根据本发明提供的一种分布式测试用例的方法,在所述利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试之前,包括:
将所述共享队列中的所述至少一个目标用例分配至所述N台测试机器;
所述利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试,包括:
对所述N台测试机器中的每一个测试机器,对分配至所述测试机器的目标用例进行分布式测试。
根据本发明提供的一种分布式测试用例的方法,所述将所述共享队列中的所述至少一个目标用例分配至所述N台测试机器,包括:
在所述目标形式包括可执行文件的情况下,将所述共享队列中的所述至少一个目标用例按照以下任一项,分配至所述N台测试机器:
测试机器的数目;
可执行文件的待执行时间。
根据本发明提供的一种分布式测试用例的方法,所述方法还包括:
在利用所述测试机器判定所述目标用例的失败次数大于或等于M次的情况下,输出表征所述目标用例测试失败的结果;
其中,M为大于0的整数。
本发明还提供一种分布式测试用例的装置,包括:
存储模块,用于将待测试的至少一个目标用例存储至预先设置的共享队列中;
锁定模块,用于基于中央处理器CPU的核数,锁定N台测试机器;其中,N为大于或等于1的整数;
测试模块,用于利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述分布式测试用例的方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述分布式测试用例的方法。
本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述分布式测试用例的方法。
本发明提供的分布式测试用例的方法及装置,将待测试的至少一个目标用例存储至预先设置的共享队列中,进而基于CPU的核数,锁定N台测试机器,利用这N台测试机器对共享队列中的目标用例进行分布式测试,这里的分布式测试也即利用N台测试机器同步对不同的目标用例进行测试,相较于相关技术中pytest和gtest只支持单进程运行,测试集运行的时间的随着测试用例的增加不断增加,本申请采用多台测试机器对共享队列中的目标用例进行分布式测试的方式,可以有效缩短测试环节的总时长,进而提高测试效率及整体的开发效率。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的分布式测试用例的方法的流程示意图之一;
图2是相关技术中构建、测试和部署软件项目的流程示意图;
图3是本发明提供的分布式测试用例的方法中的不同进程对应不同目标用例的示意图;
图4是本发明提供的分布式测试用例的方法的流程示意图之二;
图5是本发明提供的分布式测试用例的装置的结构示意图;
图6是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合附图描述本发明的分布式测试用例的方法及装置。
图1是本发明提供的分布式测试用例的方法的流程示意图之一,如图1所示,分布式测试用例的方法包括步骤101至步骤103;其中:
步骤101、将待测试的至少一个目标用例存储至预先设置的共享队列中。
步骤102、基于CPU的核数,锁定N台测试机器;其中,N为大于或等于1的整数。
具体地,CPU也即中央处理器(Central Processing Unit,CPU)。
步骤103、利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试。
相关技术中,在持续集成阶段,开发人员将他们的代码频繁地集成到共享存储库中,并通过自动化构建和测试流程来验证代码的质量。在持续部署阶段,经过测试的代码会自动部署到生产环境中。在CI/CD流程中,测试用例可以通过自动化测试工具来执行,以确保代码的质量和稳定性。常用的自动化测试工具是jenkins。jenkins是一个开源的自动化构建工具,它提供了一个易于使用的平台,用于自动化构建、测试和部署软件项目,图2是相关技术中构建、测试和部署软件项目的流程示意图,构建过程如图2所示。在测试环节需要执行开发的测试用例,常用的测试用例开发框架包括pytest和gtest,pytest是一个功能强大的Python测试框架,可以用于编写和运行各种类型的测试,包括单元测试、集成测试和功能测试,gtest是Google开发的C++测试框架,也是一个用于进行单元测试的工具,可以帮助开发人员编写和运行C++代码的单元测试。
但是,目前的pytest和gtest只支持单进程运行,测试集运行的时间的随着测试用例的增加不断增加,没能有效的利用CPU资源,大多数CPU资源处于空闲状态,这对于CPU是一种极大的浪费,所以如果能将空闲的CPU资源利用起来,可以极大提升测试用例的执行时间。
针对上述问题,本发明实施例提供了一种分布式测试用例的方法,基于CPU的核数确定需要锁定测试机器的台数N,以由N台测试机器分布式对目标用例进行测试。具体通过将待测试的至少一个目标用例存储至预先设置的共享队列中,以利用N台测试机器对共享队列中的目标用例进行分布式测试。基于CPU的核数确定需要锁定测试机器的台数N,并利用这些测试机器进行分布式并行测试,可以有效利用CPU资源,提高测试效率及整体的开发效率。
需要说明的是,N台测试机器的并行数取决于CPU核数,CPU核数越多,并行处理的能力越强。
在一些实施例中,在测试机器运行测试用例时,还可以采用多进程并发运行测试用例,这样相当于同时处理多个测试用例,测试用例的总数的确定的,并行测试用例越多,所花费时间越少,并行数取决于CPU核数,CPU核数越多,并行处理的能力越强。
可选地,可以使用Python内置的多进程(multiprocessing)模块来实现上述多进程,Python是一种高级编程语言,具有简单易学的语法和强大的功能,它被广泛应用于Web开发、数据分析、人工智能和科学计算等领域,multiprocessing模块提供了创建和管理进程的功能,可以在Python中轻松地实现并行处理和多核利用,并且为了节省切换进程的开销,使用了Python的进程池进行管理。
在一些实施例中,本发明实施例将开发的测试用例(也即目标用例)放入共享队列中,这样每一台测试机器可以独立获取共享队列中的测试用例,且放入共享队列之后,每一台机器的测试时间能够很好的平衡,原因在于:跑的快的机器可以不断获取测试用例,直至测试用例执行完成,基本上能够保持所有机器同时结束。
可选地,可以使用Redis(Remote Dictionary Server)实现共享队列,Redis是一个开源的内存数据库,它可以用作缓存、消息队列、会话存储和数据存储等多种用途。它以键值对的形式存储数据,并且支持多种数据结构,如字符串、列表、集合、哈希表等。Redis是一个功能强大、性能优越的内存数据库,适用于多种场景,包括缓存、消息队列、会话存储、分布式锁等。它的灵活性和高性能使其成为许多应用程序的首选数据存储解决方案。
在本发明实施例提供的分布式测试用例的方法中,将待测试的至少一个目标用例存储至预先设置的共享队列中,进而基于CPU的核数,锁定N台测试机器,利用这N台测试机器对共享队列中的目标用例进行分布式测试,这里的分布式测试也即利用N台测试机器同步对不同的目标用例进行测试,相较于相关技术中pytest和gtest只支持单进程运行,测试集运行的时间的随着测试用例的增加不断增加,本申请采用多台测试机器对共享队列中的目标用例进行分布式测试的方式,可以有效缩短测试环节的总时长,进而提高测试效率及整体的开发效率。
可选地,所述将待测试的至少一个目标用例存储至预先设置的共享队列中的实现方式可以包括:
将所述目标用例通过目标形式存储至所述共享队列中;其中,所述目标形式包括以下至少一项:
1)单个目标用例;
2)可执行文件,所述可执行文件包括至少两个目标用例。
具体地,可以按照单个目标用例的形式存储在共享队列中,或者按照可执行文件的形式存储在共享队列中,可执行文件中包括至少两个目标用例,在实际的项目中,单个目标用例并不能反映目标用例的真实情况,不同的目标用例之间往往是耦合的,故可以以可执行文件的形式将目标用例存入共享队列,这样目标用例可以连续不断的执行,满足了目标用例之间相互依赖的问题。
可选地,在所述目标形式包括单个目标用例的情况下,所述共享队列中的目标用例可以满足以下至少一项:
1)随机排序;
2)按照所述目标用例的待执行时间排序。
具体地,将单个目标用例存入队列的过程中,可以分为按照目标用例的待执行时间存入队列和随机存入队列,如果目标用例的待执行时间都比较平均,那么可以选择随机存入队列的方式,此时共享队列中目标用例满足随机排序;如果目标用例的待执行时间区别较大,那么可以选择按照目标用例的待执行时间存入队列,此时共享队列中目标用例满足按照目标用例的待执行时间排序,这样的话待执行时间长的目标用例会优先被测试机器取走并执行测试,在待执行时间长的目标用例的执行过程中,多个待执行时间较短的目标用例可以覆盖在长的目标用例的执行过程中,节省了总测试时间。
举例来说,图3是本发明提供的分布式测试用例的方法中的不同进程对应不同目标用例的示意图,如图3所示,例如通过进程1处理待执行时间较长的测试5,通过进程2并行处理待执行时间较短的测试1、2、3、4,相较于单进程可以有效减少测试时间。
可选地,在所述利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试之前,可以将所述共享队列中的所述至少一个目标用例分配至所述N台测试机器;
所述利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试的实现方式可以包括:
对所述N台测试机器中的每一个测试机器,对分配至所述测试机器的目标用例进行分布式测试。
可选地,所述将所述共享队列中的所述至少一个目标用例分配至所述N台测试机器的实现方式可以包括:
在所述目标形式包括可执行文件的情况下,将所述共享队列中的所述至少一个目标用例按照以下任一项,分配至所述N台测试机器:
1)测试机器的数目;
2)可执行文件的待执行时间。
具体地,将可执行文件取出共享队列的过程,可以分为按照测试机器的数目分配和可执行文件的待执行时间分配,具体按照测试机器的数目分配是按照可执行文件的总数除以测试机器的数目,那么每一台测试机器就能平均分配到相应的可执行文件,这样的场景适用于每一个可执行文件的平均待执行时间差不多的情况;如果可执行文件的时间相差太大,就会导致时间分配不均匀的情况,部分测试机器可能早就执行完测试操作了,但是还需要等待执行时间长的测试机器执行完,此时可以按照可执行文件的待执行时间进行分配,就可以解决这个问题,根据某一个平均时间的可执行文件进行划分,那么每一台机器执行测试操作的时间就是可以控制的,可以有效利用机器资源,进一步提高测试效率。
可选地,在利用所述测试机器判定所述目标用例的失败次数大于或等于M次的情况下,输出表征所述目标用例测试失败的结果;其中,M为大于0的整数。
具体地,由于测试机器多进程测试的过程中,可能面临机器资源等问题导致对目标用例测试失败的情况,比如内存不够等,此时并不能认为目标用例是测试失败的,本发明提出重新运行失败的目标用例的策略,在利用测试机器判定目标用例的失败次数大于或等于M次的情况下,才会输出表征目标用例测试失败的结果,具体重新运行失败的目标用例可以根据每一个项目的具体要求指定次数,在目标用例多次运行失败的时候,可以根据具体要求判断一个目标用例是否测试成功,例如某一些项目要求严格,必须要保证每一次测试目标用例都成功才算成功,而某一些项目要求没有那么严格,那么可以设置只需要一次成功就表明该目标用例测试成功。
在一些实施例中,由于多台测试机器之间无法通信,测试用例的结果状态也无法共享,生成在机器本地的测试用例的结果需要存入数据库中作为共享测试用例的一种方式,等到所有测试用结果写入数据库中之后,只需要最后读取数据库中测试用例的状态即可获取本次构建的结果。本发明实施例中使用了MongoDB数据库作为存储,MongoDB是一个开源的、面向文档的NoSQL数据库,它使用类似JSON的BSON格式来存储数据。MongoDB的设计目标是为了满足现代应用程序对灵活性、扩展性和性能的需求,MongoDB是一个功能强大、灵活且易于扩展的NoSQL数据库,适用于多种应用场景。它的特点包括面向文档的存储、分布式架构、高可用性、灵活的数据模型和丰富的查询功能,使其成为许多应用程序的首选数据库解决方案。
下面举例说明本发明实施例提供的分布式测试用例的方法。
持续集成和持续部署的流程可以帮助团队更快地交付高质量的软件,减少错误和bug,并提高团队的生产力,通过自动化执行测试用例,团队可以更快地发现和修复问题,从而提高软件的质量和稳定性,因此,在CI/CD流程中,测试用例的执行是至关重要的一环。单个测试集包括的测试用例数量可以高达数万条,数量如此多的测试用例带来的后果就是测试环节的时间非常长,现有测试用例数量和测试时间的对应关系如下表1:
表1现有测试用例数量和测试时间的对应关系
项目 | 测试用例数量 | 测试时间 |
模块A | 4113 | 3小时26分钟 |
模块B | 9808 | 27小时 |
模块C | 11220 | 3小时13分钟 |
模块D | 51323 | 18小时 |
测试环节时间长的危害是延长了开发周期,影响了项目的交付进度,同时开发人员需要等待测试结果才能继续工作,导致了开发效率下降,而且长时间的测试占用了更多的计算资源,浪费宝贵的机器资源。在开发迭代的过程中,测试用例的数量会不断增加,测试时间也会逐渐增加,但是目前的pytest和gtest只支持单进程,没能有效的利用CPU资源,大多数CPU资源处于空闲状态,这对于CPU是一种极大的浪费,所以如果能将空闲的CPU资源利用起来,可以极大提升测试用例的执行时间。
本发明实施例是通过分布式联合多台机器共同协作,且使用多进程加速测试用例的一项软件方法。
具体基于的原理就是分布式、多进程处理任务。分布式系统是由多个独立的计算机节点组成,这些节点通过网络进行通信和协作,共同完成一个或多个共享的任务,分布式系统可以是由几台计算机组成的小型网络,也可以是由成千上万台计算机组成的大型互联网,这些节点之间可以是对等的,也可以是有层次结构的,它们通过消息传递、远程过程调用等方式进行通信,它将数据和任务分散在多个计算机节点上进行处理,以提高系统的可靠性、可扩展性和性能,分布式技术中的分布式计算就是利用多个计算机节点进行并行计算,以加速计算任务的处理速度,在运行测试用例时,可以将多个测试用例均匀分布在各台机器上面执行,这样每一台机器均分了测试用例的时长,提升了效率。多进程技术是一种操作系统的设计思想,它允许在一个计算机系统中同时运行多个进程,并且这些进程之间可以相互独立地执行不同的任务,每个进程都有自己的内存空间、代码和数据,它们之间通过进程间通信(IPC)来进行数据交换和协作。多进程的并发性保证了多进程可以同时执行,从而提高了系统的并发性和处理能力。在运行测试用例时,可以采用多进程并发运行测试用例,这样相当于同时处理多个测试用例,测试用例的总数的确定的,并行测试用例越多,所花费时间越少,并行数取决于CPU核数,CPU核数越多,并行处理的能力越强。
为了将开发的代码持续自动化的验证交付,使用了jenkins流水线构建测试,该部分是jenkins构建过程中的测试部分,图4是本发明提供的分布式测试用例的方法的流程示意图之二,如图4所示,通过以下的步骤方法实现:
(1)jenkins的流水线有并行流水线的功能,这允许用户在同一时间运行多个任务,启动并行流水线功能使用parallel函数实现,同时获取多台机器并行执行开发的测试用例。
(2)由于多台机器启动之后无法通信,开发测试用例的状态不可知,所以将开发的测试用例放入共享队列中,这样每一台机器可以独立获取共享队列中的测试用例,且放入共享队列之后,每一台机器的测试时间能够很好的平衡,原因在于跑的快的机器不断获取测试用例,直至测试用例执行完成,基本上能够保持所有机器同时结束。
本次使用的共享队列是Redis,Redis是一个开源的内存数据库,它可以用作缓存、消息队列、会话存储和数据存储等多种用途。它以键值对的形式存储数据,并且支持多种数据结构,如字符串、列表、集合、哈希表等。Redis是一个功能强大、性能优越的内存数据库,适用于多种场景,包括缓存、消息队列、会话存储、分布式锁等。它的灵活性和高性能使其成为许多应用程序的首选数据存储解决方案。
(3)Python是一种高级编程语言,具有简单易学的语法和强大的功能。它被广泛应用于Web开发、数据分析、人工智能和科学计算等领域。在本方法中使用了Python内置的multiprocessing模块来实现多进程,这个模块提供了创建和管理进程的功能,可以在Python中轻松地实现并行处理和多核利用,并且为了节省切换进程的开销,使用了Python的进程池进行管理。
(4)由于多台机器之间无法通信,测试用例的结果状态也无法共享,生成在机器本地的测试用例的结果需要存入数据库中作为共享测试用例的一种方式,等到所有测试用结果写入数据库中之后,只需要最后读取数据库中测试用例的状态即可获取本次构建的结果。在本方法中使用了MongoDB数据库作为存储,MongoDB是一个开源的、面向文档的NoSQL数据库,它使用类似JSON的BSON格式来存储数据。MongoDB的设计目标是为了满足现代应用程序对灵活性、扩展性和性能的需求,MongoDB是一个功能强大、灵活且易于扩展的NoSQL数据库,适用于多种应用场景。它的特点包括面向文档的存储、分布式架构、高可用性、灵活的数据模型和丰富的查询功能,使其成为许多应用程序的首选数据库解决方案。
(5)入队策略中分成了可执行文件入队列和单个测试用例入队列,在实际的项目中单个测试用例并不能反映测试用例的真实情况,不同的测试用例之间是耦合的,因此将可执行文件入队列,这样测试用例可以连续不断的执行,满足了测试用例之间依赖的问题。在单个测试用例入队列的过程中又分为按照测试用例时间入队列和随机入队列,如果测试用例的执行时间都比较平均,那么可以选择随机入队列,如果测试用例执行时间区别较大,那么可以选择按照测试用例的时间入队列,这样的话时间长的测试用例会被首先拿走,那么执行的过程中,较短的测试用例会被覆盖在长的测试用例当中,节省了测试时间。
(6)在可执行文件出队列的过程中分为机器数目分配和可执行文件分配,根据机器数目分配是按照可执行文件总数除以机器数目,那么每一台机器就能平均分配到相应的可执行文件,这样的场景适用于每一个可执行文件平均时间长不多的情况,如果可执行文件的时间相差太大,那么就会导致时间分配不均匀,机器可能早就执行完了,但是还是需要等待时间长的机器执行完。那么按照可执行文件分配就可以解决这个问题,根据某一个平均时间的可执行文件划分,那么每一台机器执行的时间就是可以控制的,就能有效利用机器资源。
(7)由于多进程可能面临机器资源等问题导致测试用例失败,比如内存不够等等,那么此时并不能认为测试用例是失败的,因此提出了重新运行失败测试用例的策略,重新运行失败用例可以根据每一个项目的具体要求指定次数,在多次运行失败的测试用例的时候,可以根据具体要求判断一个测试用例使用成功。某一些项目要求严格,必须要每一次运行测试用例保证成功才算成功,某一些项目要求没有那么严格,那么只需要一次成功就表明测试用例成功。
采用本发明的运行测试用例的时间明显缩短,具体指标见下表2。
表2测试用例对比表
从表中可以看出,项目使用的进程数目分别是4进程和12进程,主要是因为过多的进程数会导致内存不够,从实践中总结出来的进程数目。模块B项目中测试用例时长达到了27个小时,故采用了分布式方式,使用两台机器共同协作。从表中可以总结出进程数和提升倍数是成正比的,每增加一核就提升一倍,但是模块C采用12核只提升了8倍,其原因是因为测试用例执行和CPU的利用率有关,模块C的测试用例并不能完全利用CPU资源,所以导致提升的性能略有下降。
下面对本发明提供的分布式测试用例的装置进行描述,下文描述的分布式测试用例的装置与上文描述的分布式测试用例的方法可相互对应参照。
图5是本发明提供的分布式测试用例的装置的结构示意图,如图5所示,分布式测试用例的装置500包括:
存储模块501,用于将待测试的至少一个目标用例存储至预先设置的共享队列中;
锁定模块502,用于基于中央处理器CPU的核数,锁定N台测试机器;其中,N为大于或等于1的整数;
测试模块503,用于利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试。
在本发明实施例提供的分布式测试用例的装置中,存储模块将待测试的至少一个目标用例存储至预先设置的共享队列中,进而锁定模块基于CPU的核数,锁定N台测试机器,测试模块利用这N台测试机器对共享队列中的目标用例进行分布式测试,这里的分布式测试也即利用N台测试机器同步对不同的目标用例进行测试,相较于相关技术中pytest和gtest只支持单进程运行,测试集运行的时间的随着测试用例的增加不断增加,本申请采用多台测试机器对共享队列中的目标用例进行分布式测试的方式,可以有效缩短测试环节的总时长,进而提高测试效率及整体的开发效率。
可选地,存储模块501具体用于:
将所述目标用例通过目标形式存储至所述共享队列中;其中,所述目标形式包括以下至少一项:
单个目标用例;
可执行文件,所述可执行文件包括至少两个目标用例。
可选地,在所述目标形式包括单个目标用例的情况下,所述共享队列中的目标用例满足以下至少一项:
随机排序;
按照所述目标用例的待执行时间排序。
可选地,分布式测试用例的装置500还包括:
处理模块,用于将所述共享队列中的所述至少一个目标用例分配至所述N台测试机器;
测试模块503具体用于:
对所述N台测试机器中的每一个测试机器,对分配至所述测试机器的目标用例进行分布式测试。
可选地,处理模块具体用于:在所述目标形式包括可执行文件的情况下,将所述共享队列中的所述至少一个目标用例按照以下任一项,分配至所述N台测试机器:
测试机器的数目;
可执行文件的待执行时间。
可选地,处理模块还用于:在利用所述测试机器判定所述目标用例的失败次数大于或等于M次的情况下,输出表征所述目标用例测试失败的结果;其中,M为大于0的整数。
图6是本发明提供的电子设备的结构示意图,如图6所示,该电子设备600可以包括:处理器(processor)610、通信接口(Communications Interface)620、存储器(memory)630和通信总线640,其中,处理器610,通信接口620,存储器630通过通信总线640完成相互间的通信。处理器610可以调用存储器630中的逻辑指令,以执行分布式测试用例的方法,该方法包括:
将待测试的至少一个目标用例存储至预先设置的共享队列中;
基于中央处理器CPU的核数,锁定N台测试机器;其中,N为大于或等于1的整数;
利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试。
此外,上述的存储器630中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的分布式测试用例的方法,该方法包括:
将待测试的至少一个目标用例存储至预先设置的共享队列中;
基于中央处理器CPU的核数,锁定N台测试机器;其中,N为大于或等于1的整数;
利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的分布式测试用例的方法,该方法包括:
将待测试的至少一个目标用例存储至预先设置的共享队列中;
基于中央处理器CPU的核数,锁定N台测试机器;其中,N为大于或等于1的整数;
利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种分布式测试用例的方法,其特征在于,包括:
将待测试的至少一个目标用例存储至预先设置的共享队列中;
基于中央处理器CPU的核数,锁定N台测试机器;其中,N为大于或等于1的整数;
利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试。
2.根据权利要求1所述的分布式测试用例的方法,其特征在于,所述将待测试的至少一个目标用例存储至预先设置的共享队列中,包括:
将所述目标用例通过目标形式存储至所述共享队列中;其中,所述目标形式包括以下至少一项:
单个目标用例;
可执行文件,所述可执行文件包括至少两个目标用例。
3.根据权利要求2所述的分布式测试用例的方法,其特征在于,在所述目标形式包括单个目标用例的情况下,所述共享队列中的目标用例满足以下至少一项:
随机排序;
按照所述目标用例的待执行时间排序。
4.根据权利要求2所述的分布式测试用例的方法,其特征在于,在所述利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试之前,包括:
将所述共享队列中的所述至少一个目标用例分配至所述N台测试机器;
所述利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试,包括:
对所述N台测试机器中的每一个测试机器,对分配至所述测试机器的目标用例进行分布式测试。
5.根据权利要求4所述的分布式测试用例的方法,其特征在于,所述将所述共享队列中的所述至少一个目标用例分配至所述N台测试机器,包括:
在所述目标形式包括可执行文件的情况下,将所述共享队列中的所述至少一个目标用例按照以下任一项,分配至所述N台测试机器:
测试机器的数目;
可执行文件的待执行时间。
6.根据权利要求1至5任一项所述的分布式测试用例的方法,其特征在于,所述方法还包括:
在利用所述测试机器判定所述目标用例的失败次数大于或等于M次的情况下,输出表征所述目标用例测试失败的结果;其中,M为大于0的整数。
7.一种分布式测试用例的装置,其特征在于,包括:
存储模块,用于将待测试的至少一个目标用例存储至预先设置的共享队列中;
锁定模块,用于基于中央处理器CPU的核数,锁定N台测试机器;其中,N为大于或等于1的整数;
测试模块,用于利用所述N台测试机器,对所述共享队列中的所述至少一个目标用例进行分布式测试。
8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述分布式测试用例的方法。
9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述分布式测试用例的方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述分布式测试用例的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410117221.0A CN117891744A (zh) | 2024-01-26 | 2024-01-26 | 分布式测试用例的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410117221.0A CN117891744A (zh) | 2024-01-26 | 2024-01-26 | 分布式测试用例的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117891744A true CN117891744A (zh) | 2024-04-16 |
Family
ID=90651894
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410117221.0A Pending CN117891744A (zh) | 2024-01-26 | 2024-01-26 | 分布式测试用例的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117891744A (zh) |
-
2024
- 2024-01-26 CN CN202410117221.0A patent/CN117891744A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Athlur et al. | Varuna: scalable, low-cost training of massive deep learning models | |
US10042886B2 (en) | Distributed resource-aware task scheduling with replicated data placement in parallel database clusters | |
JP6499986B2 (ja) | フォールトトレラントバッチ処理 | |
US20180158034A1 (en) | Dynamic reordering of blockchain transactions to optimize performance and scalability | |
US10496532B1 (en) | Automatically reconfiguring a performance test environment | |
US8739171B2 (en) | High-throughput-computing in a hybrid computing environment | |
US8914805B2 (en) | Rescheduling workload in a hybrid computing environment | |
US9396028B2 (en) | Scheduling workloads and making provision decisions of computer resources in a computing environment | |
US10013340B1 (en) | Testing in virtualized computing environments | |
US20220164222A1 (en) | Execution of Services Concurrently | |
CN110233802B (zh) | 一种构建一主链多侧链的区块链架构的方法 | |
US20240111586A1 (en) | Multi-policy intelligent scheduling method and apparatus oriented to heterogeneous computing power | |
Ward et al. | Colmena: Scalable machine-learning-based steering of ensemble simulations for high performance computing | |
CN112395736B (zh) | 一种分布交互仿真系统的并行仿真作业调度方法 | |
CN112416585A (zh) | 面向深度学习的gpu资源管理与智能化调度方法 | |
Miao et al. | Spotserve: Serving generative large language models on preemptible instances | |
CN111857984A (zh) | 银行系统中的作业调用处理方法、装置和计算机设备 | |
Harichane et al. | KubeSC‐RTP: Smart scheduler for Kubernetes platform on CPU‐GPU heterogeneous systems | |
Chen et al. | Hare: Exploiting inter-job and intra-job parallelism of distributed machine learning on heterogeneous gpus | |
CN111597035B (zh) | 基于多线程的仿真引擎时间推进方法及系统 | |
CN106844024B (zh) | 一种自学习运行时间预测模型的gpu/cpu调度方法及系统 | |
Aach et al. | Large scale performance analysis of distributed deep learning frameworks for convolutional neural networks | |
CN117891744A (zh) | 分布式测试用例的方法及装置 | |
US9639636B1 (en) | Algorithmically driven selection of parallelization technique for running model simulation | |
US20080077925A1 (en) | Fault Tolerant System for Execution of Parallel Jobs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination |