CN112506808B - 测试任务执行方法、计算设备、计算系统和存储介质 - Google Patents
测试任务执行方法、计算设备、计算系统和存储介质 Download PDFInfo
- Publication number
- CN112506808B CN112506808B CN202110170327.3A CN202110170327A CN112506808B CN 112506808 B CN112506808 B CN 112506808B CN 202110170327 A CN202110170327 A CN 202110170327A CN 112506808 B CN112506808 B CN 112506808B
- Authority
- CN
- China
- Prior art keywords
- test
- execution module
- task
- message queue
- asynchronous message
- 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/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种测试任务执行方法、计算设备、计算系统和计算机可读存储介质。该测试任务执行方法包括:基于一个或多个测试用例产生一个测试任务;将该测试任务加入异步消息队列,该异步消息队列包括一个或多个测试任务;基于多个分布式测试执行模块的第一服务性能数据确定从该异步消息队列中消费该测试任务的测试执行模块;基于与该测试任务对应的被测服务的第二服务性能数据确定该测试执行模块从该异步消息队列中消费该测试任务的时间间隔;以及按照该时间间隔从该异步消息队列中获取该测试任务并且向任务调度模块上报该测试执行模块执行该测试任务时的更新的第一服务性能数据。
Description
技术领域
本发明概括而言涉及计算机软件领域,更具体地,涉及一种测试任务执行方法、计算设备、计算系统和计算机可读存储介质。
背景技术
面向服务的架构(SOA)是一种常用的组件模型,它将应用程序的各种功能/模块拆分和组合为不同的服务,并通过在这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它可以独立于实现服务的硬件平台、操作系统和编程语言,这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
在常规的自动化测试方案中,测试执行功能通常和诸如测试用例管理之类的功能被放置在同一个服务中进行资源共用。然而,测试执行模块和其他模块资源消耗大小和时机不同,容易出现分配不均的情况。尤其是,这种自动化测试执行不会考虑自身服务的性能和资源问题,当测试执行模块出现高并发时,所需资源急速增长,导致服务资源耗尽,此时其他模块所需资源受限会带来功能受影响甚至不可用的问题。
此外,常规的自动化测试方案中,在执行测试任务时可用资源限制于服务自身,且服务容量一般固定大小,而当用例执行没有并发时,会造成资源的浪费;当用例执行并发量大时,资源不足又会导致该服务所有功能卡慢甚至不可用的问题。
此外,常规的自动化测试方案中,测试执行是同步操作,自动化服务的测试执行速率和频率由测试触发决定。测试执行本身具有时间长度特性,定时任务、第三方服务触发或者批量执行触发等不需要实时获取执行结果。自动化测试执行的执行速率和频率由测试触发直接决定,高并发情况下,没有削峰限流等操作会导致系统承载过高的并发压力,进而造成执行异常或系统宕机。
此外,常规的自动化测试方案中,不会关注被测服务的状态。当测试执行频率较高时,会造成被测服务接受的请求并发高,被测服务的性能受到较大影响。如果此时自动化测试执行继续执行会导致被测服务压力过大,影响服务功能。如果底层被测服务受影响过大可能会引起其他被测服务的异常。
发明内容
针对上述问题中的至少一个,本发明提供了一种测试任务执行方案,其中以异步消息队列的形式管理待执行的测试任务,将测试执行模块和其他功能模块分离并且构建分布式的多个测试执行模块来根据异步消息队列中的测试任务的需求进行调用。
根据本发明的一个方面,提供了一种测试任务执行方法。该测试任务执行方法包括:基于一个或多个测试用例产生一个测试任务;将该测试任务加入异步消息队列,该异步消息队列包括一个或多个测试任务;基于多个分布式测试执行模块的第一服务性能数据确定从该异步消息队列中消费该测试任务的测试执行模块;基于与该测试任务对应的被测服务的第二服务性能数据确定该测试执行模块从该异步消息队列中消费该测试任务的时间间隔;以及按照该时间间隔从该异步消息队列中获取该测试任务并且向任务调度模块上报该测试执行模块执行该测试任务时的更新的第一服务性能数据。
根据本发明的另一个方面,提供了一种计算设备。该计算设备包括:至少一个处理器;以及至少一个存储器,该至少一个存储器被耦合到该至少一个处理器并且存储用于由该至少一个处理器执行的指令,该指令当由该至少一个处理器执行时,使得该计算设备执行根据上述方法的步骤。
根据本发明的又一个方面,提供了一种计算系统。该计算系统包括:一个或多个计算设备,每个计算设备包括:至少一个处理器;以及至少一个存储器,该至少一个存储器被耦合到该至少一个处理器并且存储用于由该至少一个处理器执行的指令,该指令当由该至少一个处理器执行时,使得该计算设备执行如上所述的方法的一部分。
根据本发明的再一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序代码,该计算机程序代码在被运行时执行如上所述的方法。
在一种实施例中,基于一个或多个测试用例产生一个测试任务包括:从该一个或多个测试用例中的每个测试用例中去除该测试用例的用例环境以获得该测试用例的用例内容;以及基于该用例内容、触发信息和执行环境产生该测试任务。
在一种实施例中,确定从该异步消息队列中消费该测试任务的测试执行模块之前包括:确定是否出现用于触发测试任务执行的触发事件;如果确定出现用于触发测试任务执行的触发事件,确定该触发事件是否与该触发信息相匹配;以及如果确定该触发事件与该触发信息相匹配,确定从该异步消息队列中消费该测试任务的测试执行模块。
在一种实施例中,该第一服务性能数据包括该测试执行模块的可用线程数、处理器空闲率、可用内存、第一IO等待特性和磁盘剩余量。确定从该异步消息队列中消费该测试任务的测试执行模块包括:确定该测试执行模块的可用线程数是否大于零;如果确定该测试执行模块的可用线程数大于零,确定该测试执行模块的处理器空闲率是否大于第一阈值;如果确定该测试执行模块的处理器空闲率大于该第一阈值,确定该测试执行模块的可用内存是否大于第二阈值;如果确定该测试执行模块的可用内存大于该第二阈值,确定该测试执行模块的第一IO等待特性是否小于或等于第三阈值;如果确定该测试执行模块的第一IO等待特性小于或等于该第三阈值,确定该测试执行模块的磁盘剩余量是否大于第四阈值;以及如果确定该测试执行模块的磁盘剩余量大于该第四阈值,确定由该测试执行模块从该异步消息队列中消费该测试任务。
在一种实施例中,该第一性能数据还包括该测试执行模块的带宽速度。确定由该测试执行模块从该异步消息队列中消费该测试任务还包括:如果确定该测试执行模块的磁盘剩余量大于该第四阈值,确定该测试执行模块的带宽速度是否大于从该异步消息队列中消费该测试任务所需的带宽速度;以及如果确定该测试执行模块的带宽速度大于从该异步消息队列中消费该测试任务所需的带宽速度,确定由该测试执行模块从该异步消息队列中消费该测试任务。
在一种实施例中,该被测服务的第二服务性能数据包括该被测服务的健康状况和性能状况,该健康状况包括该被测服务的可用性和连通性,该性能状况包括该被测服务的处理器利用率、内存占用率、可用磁盘占比和第二IO等待特性。确定该测试执行模块从该异步消息队列中消费该测试任务的时间间隔包括:确定该被测服务的处理器利用率是否小于第五阈值并且该内存占用率是否小于第六阈值;如果确定该被测服务的处理器利用率小于该第五阈值并且该内存占用率小于该第六阈值,确定该可用磁盘占比是否大于第七阈值并且该第二IO等待特性是否大于或等于第八阈值;如果确定该可用磁盘占比大于该第七阈值并且该第二IO等待特性大于或等于该第八阈值,基于该被测服务的处理器利用率和该内存占用率确定该测试执行模块从该异步消息队列中消费测试任务的时间间隔。
在一种实施例中,基于该被测服务的处理器利用率和该内存占用率确定该测试执行模块从该异步消息队列中消费测试任务的时间间隔包括:确定该被测服务的处理器利用率相对于第九阈值的第一差值以及该内存占用率相对于第十阈值的第二差值;以及基于该第一差值、该第二差值和初始时间间隔确定该测试执行模块从该异步消息队列中消费测试任务的时间间隔,其中该初始时间间隔被设置为该被测服务的处理器利用率等于该第九阈值且该内存占用率等于该第十阈值时该测试执行模块从该异步消息队列中消费测试任务的时间间隔。
在一种实施例中,该测试任务执行方法还包括:确定该异步消息队列是否为空;如果确定该异步消息队列为空,确定该测试执行模块中是否有正在执行的测试任务;以及如果确定该测试执行模块中没有正在执行的测试任务,销毁该测试执行模块的所有线程。
在一种实施例中,该测试任务执行方法还包括:确定该异步消息队列是否为空;如果确定该异步消息队列不为空,确定该多个分布式测试执行模块的所有线程是否都有正在执行的测试任务;以及如果确定该多个分布式测试执行模块的所有线程都有正在执行的测试任务,配置另一分布式测试执行模块以使其包含用于执行测试任务的一个或多个线程。
在一种实施例中,该测试任务执行方法还包括:为该测试任务设置缓存锁,该缓存锁指示该测试任务的运行位置;以及如果该测试任务执行异常,执行中断操作并且将该测试任务及其缓存锁重新放入该异步消息队列。
附图说明
通过参考下列附图所给出的本发明的具体实施方式的描述,将更好地理解本发明,并且本发明的其他目的、细节、特点和优点将变得更加显而易见。
图1示出了用于实现根据本发明的实施例的测试任务执行方法的计算系统的结构示意图。
图2示出了根据本发明的一些实施例的测试任务执行方法的流程图。
图3示出了根据本发明一种实施例的用于产生测试任务的步骤的流程图。
图4示出了根据本发明实施例的用于确定消费异步消息队列中的一个测试任务的测试执行模块的步骤的流程图。
图5示出了根据本发明一种实施例的用于确定测试执行模块从异步消息队列中消费测试任务的时间间隔的步骤的流程图。
图6示出了适合实现本发明的实施例的计算设备的结构方框图。
具体实施方式
下面将参照附图更详细地描述本发明的优选实施方式。虽然附图中显示了本发明的优选实施方式,然而应该理解,可以以各种形式实现本发明而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本发明更加透彻和完整,并且能够将本发明的范围完整的传达给本领域的技术人员。
在下文的描述中,出于说明各种发明的实施例的目的阐述了某些具体细节以提供对各种发明实施例的透彻理解。但是,相关领域技术人员将认识到可在无这些具体细节中的一个或多个细节的情况来实践实施例。在其它情形下,与本申请相关联的熟知的装置、结构和技术可能并未详细地示出或描述从而避免不必要地混淆实施例的描述。
除非语境有其它需要,在整个说明书和权利要求中,词语“包括”和其变型,诸如“包含”和“具有”应被理解为开放的、包含的含义,即应解释为“包括,但不限于”。
在整个说明书中对“一个实施例”或“一些实施例”的提及表示结合实施例所描述的特定特点、结构或特征包括于至少一个实施例中。因此,在整个说明书的各个位置“在一个实施例中”或“在一些实施例”中的出现不一定全都指相同实施例。另外,特定特点、结构或特征可在一个或多个实施例中以任何方式组合。
此外,说明书和权利要求中所用的第一、第二等术语,仅仅出于描述清楚起见来区分各个对象,而并不限定其所描述的对象的大小或其他顺序等。
图1示出了用于实现根据本发明的实施例的测试任务执行方法的计算系统100的结构示意图。如图1中所示,计算系统100可以包括用例管理模块110、一个或多个测试执行模块120、异步消息队列130、任务调度模块140、运维监控模块150和任务补偿模块160。这些模块可以通过网络进行数据交互,每个模块可以基于来自其他模块的数据或指令执行相应的操作。
在一些实施例中,计算系统100的各个模块可以通过一个或多个计算设备来实现。每个计算设备可以包括至少一个处理器和与该至少一个处理器耦合的至少一个存储器,该存储器中存储有可由该至少一个处理器执行的指令,该指令在被该至少一个处理器执行时执行如下所述的测试任务执行方法200的至少一部分。计算设备的具体结构例如可以如下结合图6所述。
在另一些实施例中,可以通过软件模块来实现计算系统100的各个模块。在这种情况下,虽然使用术语“模块”来命名计算系统100的各个部分,但是在SOA语境中,这些部分也可以使用术语“服务”来命名,或者,在其他情况下,这些部分还可以称为“功能”等。例如,在SOA语境中,测试执行模块120也可以称为测试执行服务。
此外,本领域技术人员可以理解,上述软件和硬件的实现形式仅仅是示意性的而不用于限制本发明的范围。例如,在一些其他实现中,图1所示的模块中的一个或多个可以实现为独立的硬件模块(如芯片)。尤其是,多个测试执行模块120可以是分布式的,分别位于不同的计算设备或其他硬件模块上,在这种情况下,每个测试执行模块120所位于的计算设备或硬件模块也可以称为测试执行节点。
图2示出了根据本发明的一些实施例的测试任务执行方法200的流程图。测试任务执行方法200例如可以由图1中所示的计算系统100中的多个模块协同执行。以下结合图1至图6对测试任务执行方法200进行描述。
如图2中所示,在步骤210,用例管理模块110基于一个或多个测试用例产生一个测试任务。
这里,测试用例是指对一项软件产品进行测试的任务的描述,其内容包括测试输入、测试条件(包括测试用例的用例环境)以及预期结果,用于核实是否满足某个特定软件需求。用例管理模块110用于对多个测试用例进行管理和调度。测试用例调试、批量执行、动态定时触发、失败重试执行、第三方系统触发等都可以以测试任务形式进行。并且,用例管理模块110可以将一个测试用例打包为一个测试任务,也可以将多个测试用例打包为一个测试任务。例如,当多个测试用例之间存在着时间上的顺序关系或者输入输出结果上的因果关系时,用例管理模块110可以将这几个测试用例打包为一个测试任务。或者,当用例管理模块110接收到用户的测试触发指令,并且该测试触发指令包括多个测试用例时,可以将这几个测试用例打包为一个测试任务。
在根据本发明的实施例中,用于执行测试任务的测试执行模块120与用例管理模块110位于不同的硬件设备上并且很可能具有不同的执行环境,因此,与常规的测试任务不同,本发明中的测试任务应当避免测试用例的用例环境对待执行的测试任务的影响。
图3示出了根据本发明一种实施例的用于产生测试任务的步骤210的流程图。
如图3中所示,步骤210可以包括子步骤212,其中用例管理模块110从一个或多个测试用例(例如用例管理模块110判断可以打包为一个测试任务的一个或多个测试用例)中的每个测试用例中去除测试用例的用例环境以获得该测试用例的用例内容。这样,测试用例的用例内容与用例环境剥离,从而后续的测试执行可以不受用例环境的影响,确保了在不同执行环境下执行测试的可行性和稳定性。
接下来,在子步骤214,用例管理模块110基于子步骤212得到的用例内容、触发信息和执行环境产生测试任务。
触发信息用于指示该测试任务被触发执行的条件,其例如可以包括触发人、触发时间、触发方式中的至少一项。进一步地,触发方式还可以包括手动触发(即,用户通过点击“测试”按钮等方式下达测试触发指令)、动态定时触发(即按照给定时间间隔定时触发该测试任务)、第三方服务调用触发(即,由其他系统调用计算系统100的接口来触发该测试任务)。
执行环境用于指示执行该测试任务的环境,例如各个测试执行模块120的环境。对于同样的用例内容(即待测试内容),不同的执行环境下同一变量具有不同的解析结果。例如,用例内容中引用的一个全局变量在环境a的设置值为AA,在环境b的设置值为BB,因此在执行环境a中执行该全局变量时,其值被解析为AA,在执行环境b中执行该全局变量时,其值被解析为BB。因此,在产生测试任务时应当包含该测试任务的执行环境的信息以便于对测试内容中的变量进行解析。
在一些实施例中,在子步骤214,用例管理模块110还基于用例查询条件来产生该测试任务。用例查询条件用于指示对该测试任务进行查询的条件,例如可以包括接口所属的被测服务、接口所属的模块、用例的名称、用例的优先级等。
接下来,在步骤220,用例管理模块110可以将步骤210产生的测试任务加入异步消息队列130中。该异步消息队列130是用于管理计算系统100中的测试任务的消息队列,其可以包括按照如上所述的方式产生的一个或多个测试任务。相对于同步调用来说,利用异步消息队列130来管理测试任务不需要每个测试任务消费(例如由测试执行模块120)完成之后才继续消费下一测试任务,从而在各个测试任务被触发执行时的稳定性更高并且资源分配更合理。
接下来,在步骤230,任务调度模块140可以基于多个分布式测试执行模块120的第一服务性能数据确定从异步消息队列130中消费该测试任务的测试执行模块120。
这里,测试执行模块120的第一服务性能数据包括测试执行模块120的可用线程数、处理器空闲率、可用内存、第一IO等待特性和磁盘剩余量。服务性能数据的这些参数构成了任务调度模块140用来判断一个测试执行模块120是否能够消费一个测试任务的决策条件。在一些实施例中,服务性能数据的这些参数具有各自的优先级,即,任务调度模块140按照服务性能数据的这些参数的优先级来依次确定该测试执行模块120是否满足消费该测试任务的条件。
每个测试执行模块120可以定期或者被测试任务触发时向任务调度模块140发送或更新其服务性能数据,从而任务调度模块140中可以维护各个测试执行模块120的服务性能数据的列表,并且根据各个测试执行模块120的服务性能数据确定该测试执行模块120是否能够消费新的测试任务。
图4示出了根据本发明实施例的用于确定消费异步消息队列130中的一个测试任务的测试执行模块120的步骤230的流程图。
如图4中所示,步骤230可以包括子步骤231,其中任务调度模块140确定该测试执行模块120的可用线程数是否大于零。每个测试执行模块120可以预先配置一个或多个线程,每个线程可以用于执行一个测试任务。测试执行模块120中可以维护一个可用线程数参数,当一个线程被调度用于执行一个测试任务时,测试执行模块120中的可用线程数减1,而当一个线程被释放(例如由于其所执行的测试任务完成)时,测试执行模块120中的可用线程数加1。
如果确定该测试执行模块120的可用线程数大于零(子步骤231的判断为“是”),在子步骤232,任务调度模块140确定该测试执行模块120的处理器空闲率是否大于第一阈值。该第一阈值用于指示允许测试执行模块120消费新的测试任务的最低处理器空闲率。例如,该第一阈值可以是10%至20%之间的一个值,优选地可以是10%。
如果确定测试执行模块120的处理器空闲率大于该第一阈值(子步骤232的判断为“是”),在子步骤233,任务调度模块140确定该测试执行模块120的可用内存是否大于第二阈值。该第二阈值用于指示允许测试执行模块120消费新的测试任务的最低可用内存。例如,该第二阈值可以是总内存的10%至20%之间的一个值,优选地可以是10%。
如果确定测试执行模块120的可用内存大于该第二阈值(子步骤233的判断为“是”),在子步骤234,任务调度模块140确定该测试执行模块120的第一输入输出(IO)等待特性是否小于或等于第三阈值。该第三阈值用于指示允许测试执行模块120消费新的测试任务的最大IO等待特性。例如,在第一IO等待特性是IOwait的情况下,该第三阈值可以是90%至100%之间的一个值,优选地可以是100%。其中,IOwait是指由于执行IO操作所导致的处理器等待(空闲)时间所占的百分比。
如果确定测试执行模块120的第一IO等待特性小于或等于该第三阈值(子步骤234的判断为“是”),在子步骤235,任务调度模块140确定测试执行模块120的磁盘剩余量是否大于第四阈值。该第四阈值用于指示允许测试执行模块120消费新的测试任务的最低磁盘剩余量。例如,该第四阈值可以是总磁盘大小的10%至20%之间的一个值,优选地可以是10%。
如果确定该测试执行模块120的磁盘剩余量大于该第四阈值(子步骤235的判断为“是”),在子步骤236,任务调度模块140确定由该测试执行模块120从异步消息队列130中消费该测试任务。
也就是说,当任务调度模块140确定测试执行模块120的第一服务性能数据的各个参数满足相应的阈值条件时,确定该测试执行模块120能够消费异步消息队列130中的一个测试任务。
另一方面,如果任务调度模块140确定测试执行模块120的第一服务性能数据的上述参数中的任一个不满足相应的阈值条件时(如上述子步骤231至235中任一个的判断为“否”),则步骤230进行到子步骤237,其中任务调度模块140确定该测试执行模块120不能够继续消费异步消息队列130中的新的测试任务。在这种情况下,任务调度模块140可以重新选择多个分布式测试执行模块120中的另一个测试执行模块120并且对该另一个测试执行模块120重复执行步骤230以确定该测试执行模块120是否能够消费异步消息队列130中的新的测试任务(图中未示出)。
在一种实施例中,第一性能数据还可以包括该测试执行模块120的带宽速度。在这种情况下,子步骤236进一步包括:在确定该测试执行模块120的磁盘剩余量大于该第四阈值时,进一步确定该测试执行模块120的带宽速度是否大于从异步消息队列130中消费该测试任务所需的带宽速度,并且在确定该测试执行模块120的带宽速度大于从异步消息队列130中消费该测试任务所需的带宽速度时,才确定由该测试执行模块120从异步消息队列130中消费该测试任务。
如前所述,在步骤210中,测试任务中可以包括触发信息,其中触发信息包括触发人、触发时间和触发方式中的至少一项。因此,在步骤230之前,方法200还可以包括:确定是否出现用于触发测试任务执行的触发事件。该触发事件例如可以是“测试”按钮被点击。如果确定出现该触发事件,确定该触发事件是否与测试任务的触发信息相匹配。在触发信息包括触发人、触发时间和触发方式中的至少一项的情况下,可以确定该触发事件的发起者(如点击“测试”按钮的用户)、发起时间(如“测试”按钮被点击的时间)和发起方式(如手动点击“测试”按钮)是否与触发信息中的触发人、触发时间和触发方式分别匹配。在确定该触发事件与测试任务的触发信息相匹配时,执行上述步骤230,确定能够从异步消息队列130中消费该测试任务的测试执行模块120。
继续图2,在确定了从异步消息队列130中消费该测试任务的测试执行模块120之后,在步骤240,任务调度模块140可以基于与该测试任务对应的被测服务的第二服务性能数据确定该测试执行模块120从异步消息队列130中消费测试任务的时间间隔。
这里,被测服务的第二服务性能数据可以包括被测服务的健康状况和性能状况。其中健康状况包括该被测服务的可用性和连通性,即被测服务当前是否可用以及是否可连通。性能状况包括该被测服务的处理器利用率、内存占用率、可用磁盘占比和第二IO等待特性。可以理解,虽然这里对第二服务性能数据中的性能状况的参数的描述与第一服务性能数据的各个参数不同,但是二者实际体现的本质内容是相同的,在不同的实施例中,可以互换使用(注意,在互换使用时相应的阈值可能会发生变化)。
图5示出了根据本发明一种实施例的用于确定测试执行模块120从异步消息队列130中消费测试任务的时间间隔的步骤240的流程图。
如图5中所示,步骤240可以包括子步骤241,其中任务调度模块140确定被测服务的处理器利用率是否小于第五阈值并且内存占用率是否小于第六阈值。这里,该第五阈值和第六阈值分别用于指示允许执行被测服务的最高处理器利用率和最高内存占用率。例如,该第五阈值和第六阈值可以是80%至90%之间的一个值,优选地可以是90%。
如果确定被测服务的处理器利用率小于第五阈值并且内存占用率小于第六阈值(子步骤241的判断为“是”),在子步骤242,任务调度模块140可以确定被测服务的可用磁盘占比是否大于第七阈值并且第二IO等待特性是否大于或等于第八阈值。这里,该第七阈值用于指示允许执行被测服务的最低可用磁盘占比,第八阈值用于指示允许执行被测服务的最大IO等待特性。例如,该第七阈值可以是90%至100%之间的一个值,优选地可以是95%。在第二IO等待特性是IOwait的情况下,该第八阈值可以是90%至100%之间的一个值,优选地可以是100%。
如果确定被测服务的可用磁盘占比大于该第七阈值并且第二IO等待特性大于或等于该第八阈值(子步骤242的判断为“是”),在子步骤243,任务调度模块140可以基于被测服务的处理器利用率和内存占用率确定测试执行模块120从异步消息队列130中消费测试任务的时间间隔。
另一方面,如果确定被测服务的处理器利用率大于或等于第五阈值或者内存占用率大于或等于第六阈值(子步骤241的判断为“否”),或者确定被测服务的可用磁盘占比小于或等于该第七阈值并且第二IO等待特性小于该第八阈值(子步骤242的判断为“否”),则在子步骤244,任务调度模块140可以确定测试执行模块120跳过该被测服务,即该被测服务不被执行。也就是说,如果被测服务的处理器利用率、内存占用率、可用磁盘占比和第二IO等待特性中的任一项不满足相应的阈值,该被测服务将被跳过不被执行。只有在被测服务的上述参数都满足相应的阈值的情况下,才会执行该被测服务,并且确定与被测服务对应的测试任务被消费的时间间隔。
进一步地,基于被测服务的处理器利用率和内存占用率确定该时间间隔的子步骤243可以进一步包括:确定该被测服务的处理器利用率相对于第九阈值的第一差值以及内存占用率相对于第十阈值的第二差值,并且基于该第一差值、第二差值和初始时间间隔确定该测试执行模块120从异步消息队列130中消费测试任务的时间间隔。
这里,第九阈值和第十阈值用于确定消费测试任务的初始时间间隔,即,当被测服务的处理器利用率等于第九阈值并且内存占用率等于第十阈值时,设置该初始时间间隔作为测试执行模块120从异步消息队列130中消费测试任务的时间间隔。第九阈值和第十阈值通常是较小的值,例如可以为10%至20%之间的一个值。相应地,初始时间间隔可以是0或者一个较小值。也就是说,当被测服务的处理器利用率和内存占用率都比较小时,初始时间间隔比较小,甚至为0,即,可以基本上连续地消费测试任务。而当被测服务的处理器利用率和内存占用率相对较大时,所确定的时间间隔相对较大。例如,假设第九阈值和第十阈值都为20%,并且当被测服务的处理器利用率和内存占用率都小于20%时,将初始时间间隔设置为0。并且假设被测服务的(实际)处理器利用率和(实际)内存占用率每增加一预定比率(如10%),时间间隔相对于初始时间间隔增大一预定时间值(如150ms)。因此,可以通过计算被测服务的(实际)处理器利用率和(实际)内存占用率相对于第九阈值和第十阈值的差值来确定实际的时间间隔。
与上述第一服务性能数据类似,任务调度模块140可以定期或者在各个被测服务被调用时(例如通过运维监控模块150)获取该被测服务的第二服务性能数据,并且维护各个被测服务的服务性能数据的列表,甚至进一步维护根据各个被测服务的第二服务性能数据确定的各个被测服务被消费的时间间隔的列表。因此,上述步骤240中从异步消息队列130中消费测试任务的时间间隔可以是任务调度模块140从其维护的各个被测服务的时间间隔的列表中确定的。通过这种方式,可以根据被测服务的性能数据动态调整和配置对测试任务的请求频率,防止被测服务同时接收过多的接口调用引起服务雪崩的问题,既保证执行效率又保障被测服务的可用性,防止影响被测服务的正常使用。
继续图2,接下来,在步骤250,测试执行模块120按照步骤240确定的时间间隔从异步消息队列130中获取该测试任务。测试执行模块120执行该测试任务并且向任务调度模块140上报其执行该测试任务时的更新的第一服务性能数据。
通过构建分布式的多个测试执行模块120和包含待执行的测试任务的异步消息队列130并且通过任务调度模块140维护各个测试执行模块120和各个被测服务的服务性能数据,任务调度模块140能够容易地确定一个测试执行模块120是否能够继续消费新的测试任务以及消费新的测试任务的时间间隔。
进一步地,对于这种分布式的多个测试执行模块120和包含待执行的测试任务的异步消息队列130,任务调度模块140还可以根据当前待执行的测试任务的量以及测试执行模块120中是否有正在执行的测试任务来确定是否需要销毁测试执行模块120或配置新的测试执行模块120。
具体地,在一些实施例中,任务调度模块140可以确定异步消息队列130是否为空。如果确定异步消息队列130为空,任务调度模块140可以确定一个测试执行模块120中是否有正在执行的测试任务。如果确定该测试执行模块120中没有正在执行的测试任务,则任务调度模块140可以销毁该测试执行模块120的所有线程。即,如果异步消息队列130中没有待执行的测试任务并且一个测试执行模块120中没有正在执行的测试任务,则可以结束该测试执行模块120的所有线程,即结束该测试执行服务,回收该测试执行节点。
另一方面,如果确定异步消息队列130不为空,则任务调度模块140可以确定多个分布式测试执行模块120的所有线程是否都有正在执行的测试任务。如果确定多个分布式测试执行模块120的所有线程都有正在执行的测试任务,则任务调度模块140可以配置另一分布式测试执行模块120以使其包含用于执行测试任务的一个或多个线程。即,如果异步消息队列130中有待执行的测试任务,并且当前所有测试执行模块120的所有线程都有正在执行的测试任务,则可以重新配置一个新的测试执行节点和新的测试执行服务来执行异步消息队列130中的测试任务。
通过这种方式,可以根据待执行的测试任务的量动态增加或减少测试执行节点的配置。进一步地,还可以基于测试执行节点的历史配置数据提前预测和配置测试执行节点。例如,如果测试执行节点的历史配置数据显示每天特定时间(如凌晨1点10分)测试执行需要特定数量(如5台2C4G)的测试执行服务,则任务调度模块140可以在该特定时间之前(如每天凌晨1点5分)通过执行调度服务来提前配置该特定数量的测试执行服务,从而避免出现测试任务堆积。
进一步地,在一些实施例中,可以为每个测试任务设置缓存锁,该缓存锁指示该测试任务的运行位置。在该测试任务执行期间,该缓存锁被不断刷新直至测试任务结束被清除。如果该测试任务执行异常,则测试执行模块120执行中断操作,并且任务补偿模块160可以将该测试任务及其缓存锁重新放入异步消息队列130。这样,当该测试任务再次被任务调度模块140调度并且由一个测试执行模块120执行时,该测试执行模块120可以检查该测试任务的缓存锁的运行位置(即中断位置),并且从该运行位置之后继续执行该测试任务而不会重复执行已执行的内容。
图6示出了适合实现本发明的实施例的计算设备600的结构方框图。计算设备600例如可以是如上所述的用于实现计算系统100中的一个或多个模块的硬件设备。尤其是,多个分布式测试执行模块120可以位于分布式的多个不同的计算设备600上。
如图6中所示,计算设备600可以包括一个或多个中央处理单元(CPU)610(图中仅示意性地示出了一个),其可以根据存储在只读存储器(ROM)620中的计算机程序指令或者从存储单元680加载到随机访问存储器(RAM)630中的计算机程序指令,来执行各种适当的动作和处理。在RAM 630中,还可存储计算设备600操作所需的各种程序和数据。CPU 610、ROM 620以及RAM 630通过总线640彼此相连。输入/输出(I/O)接口650也连接至总线640。
计算设备600中的多个部件连接至I/O接口650,包括:输入单元660,例如键盘、鼠标等;输出单元670,例如各种类型的显示器、扬声器等;存储单元680,例如磁盘、光盘等;以及通信单元690,例如网卡、调制解调器、无线通信收发机等。通信单元690允许计算设备600通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
上文所描述的方法200例如可由一个或多个计算设备600的CPU 610执行。例如,在一些实施例中,方法200可被实现为计算机软件程序,其被有形地包括于机器可读介质,例如存储单元680。在一些实施例中,计算机程序的部分或者全部可以经由ROM 620和/或通信单元690而被载入和/或安装到计算设备600上。当计算机程序被加载到RAM 630并由CPU610执行时,可以执行上文描述的方法200的一个或多个操作。此外,通信单元690可以支持有线或无线通信功能。
本领域技术人员可以理解,图6所示的计算设备600仅是示意性的。在一些实施例中,计算设备600可以包含比图6所示的更多或更少的部件。
利用本发明的方案,通过构建分布式的多个测试执行模块和包含待执行的测试任务的异步消息队列并且通过任务调度模块维护各个测试执行模块和各个被测服务的服务性能数据,任务调度模块能够容易地确定一个测试执行模块是否能够继续消费新的测试任务以及消费新的测试任务的时间间隔。进一步地,任务调度模块还可以根据异步消息队列中的待执行的测试任务的数量和各个测试执行模块的线程被占用的情况来动态决定是否结束某个测试执行服务的节点或者重新配置新的测试执行服务的节点。
以上结合附图对根据本发明的测试任务执行方法200以及可用来实现该测试任务执行方法200的计算系统100和计算设备600进行了描述。然而本领域技术人员可以理解,方法200的步骤的执行并不局限于图中所示和以上所述的顺序,而是可以以任何其他合理的顺序来执行。此外,计算设备600也不必须包括图6中所示的所有组件,其可以仅仅包括执行本发明中所述的功能所必须的其中一些组件,并且这些组件的连接方式也不局限于图中所示的形式。
本发明可以是方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本发明的各个方面的计算机可读程序指令。
在一个或多个示例性设计中,可以用硬件、软件、固件或它们的任意组合来实现本发明所述的功能。例如,如果用软件来实现,则可以将所述功能作为一个或多个指令或代码存储在计算机可读介质上,或者作为计算机可读介质上的一个或多个指令或代码来传输。
本文公开的装置的各个单元可以使用分立硬件组件来实现,也可以集成地实现在一个硬件组件,如处理器上。例如,可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或者晶体管逻辑、分立硬件组件或用于执行本文所述的功能的任意组合来实现或执行结合本发明所描述的各种示例性的逻辑块、模块和电路。
本领域普通技术人员还应当理解,结合本发明的实施例描述的各种示例性的逻辑块、模块、电路和算法步骤可以实现成电子硬件、计算机软件或二者的组合。
本发明的以上描述用于使本领域的任何普通技术人员能够实现或使用本发明。对于本领域普通技术人员来说,本发明的各种修改都是显而易见的,并且本文定义的一般性原理也可以在不脱离本发明的精神和保护范围的情况下应用于其它变形。因此,本发明并不限于本文所述的实例和设计,而是与本文公开的原理和新颖性特性的最广范围相一致。
Claims (11)
1.一种测试任务执行方法,包括:
基于一个或多个测试用例产生一个测试任务;
将所述测试任务加入异步消息队列,所述异步消息队列包括一个或多个测试任务;
基于多个分布式测试执行模块的第一服务性能数据确定从所述异步消息队列中消费所述测试任务的测试执行模块;
基于与所述测试任务对应的被测服务的第二服务性能数据确定所述测试执行模块从所述异步消息队列中消费所述测试任务的时间间隔;以及
按照所述时间间隔从所述异步消息队列中获取所述测试任务并且向任务调度模块上报所述测试执行模块执行所述测试任务时的更新的第一服务性能数据,
其中所述被测服务的第二服务性能数据包括所述被测服务的健康状况和性能状况,所述健康状况包括所述被测服务的可用性和连通性,所述性能状况包括所述被测服务的处理器利用率、内存占用率、可用磁盘占比和第二输入输出等待特性,并且其中确定所述测试执行模块从所述异步消息队列中消费所述测试任务的时间间隔包括:
确定所述被测服务的处理器利用率是否小于第五阈值并且所述内存占用率是否小于第六阈值;
如果确定所述被测服务的处理器利用率小于所述第五阈值并且所述内存占用率小于所述第六阈值,确定所述可用磁盘占比是否大于第七阈值并且所述第二输入输出等待特性是否大于或等于第八阈值;
如果确定所述可用磁盘占比大于所述第七阈值并且所述第二输入输出等待特性大于或等于所述第八阈值,基于所述被测服务的处理器利用率和所述内存占用率确定所述测试执行模块从所述异步消息队列中消费测试任务的时间间隔,
并且其中基于所述被测服务的处理器利用率和所述内存占用率确定所述测试执行模块从所述异步消息队列中消费测试任务的时间间隔包括:
确定所述被测服务的处理器利用率相对于第九阈值的第一差值以及所述内存占用率相对于第十阈值的第二差值;以及
基于所述第一差值、所述第二差值和初始时间间隔确定所述测试执行模块从所述异步消息队列中消费测试任务的时间间隔,其中所述初始时间间隔被设置为所述被测服务的处理器利用率等于所述第九阈值且所述内存占用率等于所述第十阈值时所述测试执行模块从所述异步消息队列中消费测试任务的时间间隔。
2.如权利要求1所述的方法,其中基于一个或多个测试用例产生一个测试任务包括:
从所述一个或多个测试用例中的每个测试用例中去除所述测试用例的用例环境以获得所述测试用例的用例内容;以及
基于所述用例内容、触发信息和执行环境产生所述测试任务。
3.如权利要求2所述的方法,其中确定从所述异步消息队列中消费所述测试任务的测试执行模块之前包括:
确定是否出现用于触发测试任务执行的触发事件;
如果确定出现用于触发测试任务执行的触发事件,确定所述触发事件是否与所述触发信息相匹配;以及
如果确定所述触发事件与所述触发信息相匹配,确定从所述异步消息队列中消费所述测试任务的测试执行模块。
4.如权利要求1所述的方法,其中所述第一服务性能数据包括所述测试执行模块的可用线程数、处理器空闲率、可用内存、第一输入输出等待特性和磁盘剩余量,并且其中确定从所述异步消息队列中消费所述测试任务的测试执行模块包括:
确定所述测试执行模块的可用线程数是否大于零;
如果确定所述测试执行模块的可用线程数大于零,确定所述测试执行模块的处理器空闲率是否大于第一阈值;
如果确定所述测试执行模块的处理器空闲率大于所述第一阈值,确定所述测试执行模块的可用内存是否大于第二阈值;
如果确定所述测试执行模块的可用内存大于所述第二阈值,确定所述测试执行模块的第一输入输出等待特性是否小于或等于第三阈值;
如果确定所述测试执行模块的第一输入输出等待特性小于或等于所述第三阈值,确定所述测试执行模块的磁盘剩余量是否大于第四阈值;以及
如果确定所述测试执行模块的磁盘剩余量大于所述第四阈值,确定由所述测试执行模块从所述异步消息队列中消费所述测试任务。
5.如权利要求4所述的方法,其中所述第一服务性能数据还包括所述测试执行模块的带宽速度,并且其中确定由所述测试执行模块从所述异步消息队列中消费所述测试任务还包括:
如果确定所述测试执行模块的磁盘剩余量大于所述第四阈值,确定所述测试执行模块的带宽速度是否大于从所述异步消息队列中消费所述测试任务所需的带宽速度;以及
如果确定所述测试执行模块的带宽速度大于从所述异步消息队列中消费所述测试任务所需的带宽速度,确定由所述测试执行模块从所述异步消息队列中消费所述测试任务。
6.如权利要求1所述的方法,还包括:
确定所述异步消息队列是否为空;
如果确定所述异步消息队列为空,确定所述测试执行模块中是否有正在执行的测试任务;以及
如果确定所述测试执行模块中没有正在执行的测试任务,销毁所述测试执行模块的所有线程。
7.如权利要求1所述的方法,还包括:
确定所述异步消息队列是否为空;
如果确定所述异步消息队列不为空,确定所述多个分布式测试执行模块的所有线程是否都有正在执行的测试任务;以及
如果确定所述多个分布式测试执行模块的所有线程都有正在执行的测试任务,配置另一分布式测试执行模块以使其包含用于执行测试任务的一个或多个线程。
8.如权利要求1所述的方法,还包括:
为所述测试任务设置缓存锁,所述缓存锁指示所述测试任务的运行位置;以及
如果所述测试任务执行异常,执行中断操作并且将所述测试任务及其缓存锁重新放入所述异步消息队列。
9.一种计算设备,包括:
至少一个处理器;以及
至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理器并且存储用于由所述至少一个处理器执行的指令,所述指令当由所述至少一个处理器执行时,使得所述计算设备执行根据权利要求1至8中任一项所述的方法的步骤。
10.一种计算系统,包括:
一个或多个计算设备,每个计算设备包括:
至少一个处理器;以及
至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理器并且存储用于由所述至少一个处理器执行的指令,所述指令当由所述至少一个处理器执行时,使得所述计算设备执行根据权利要求1至8中任一项所述的方法的一部分。
11.一种计算机可读存储介质,其上存储有计算机程序代码,所述计算机程序代码在被运行时执行如权利要求1至8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110170327.3A CN112506808B (zh) | 2021-02-08 | 2021-02-08 | 测试任务执行方法、计算设备、计算系统和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110170327.3A CN112506808B (zh) | 2021-02-08 | 2021-02-08 | 测试任务执行方法、计算设备、计算系统和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112506808A CN112506808A (zh) | 2021-03-16 |
CN112506808B true CN112506808B (zh) | 2021-05-25 |
Family
ID=74952802
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110170327.3A Active CN112506808B (zh) | 2021-02-08 | 2021-02-08 | 测试任务执行方法、计算设备、计算系统和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112506808B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112948255B (zh) * | 2021-03-23 | 2024-05-14 | 三六零数字安全科技集团有限公司 | 分布式的内核模糊测试系统及方法 |
CN114035928B (zh) * | 2021-11-26 | 2024-07-30 | 重庆富民银行股份有限公司 | 分布式任务分配处理方法 |
CN115114230A (zh) * | 2022-06-28 | 2022-09-27 | 重庆长安汽车股份有限公司 | 一种文件测试方法、系统、电子设备及可读存储介质 |
CN117539750A (zh) * | 2023-10-25 | 2024-02-09 | 中科驭数(北京)科技有限公司 | 持续集成方法、装置、设备及介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101217418B (zh) * | 2007-12-28 | 2010-08-11 | 西安西电捷通无线网络通信有限公司 | 用于网络性能测试的多任务调度方法 |
CN101645036B (zh) * | 2009-09-11 | 2011-06-01 | 兰雨晴 | 基于测试执行机能力度的测试任务自动分配方法 |
KR101623297B1 (ko) * | 2012-04-13 | 2016-05-20 | 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 | 목적지 클라우드 시스템 요건들의 결정 |
CN109117244B (zh) * | 2018-06-13 | 2021-12-03 | 成都颠峰科创信息技术有限公司 | 一种虚拟机资源申请排队机制的实现方法 |
-
2021
- 2021-02-08 CN CN202110170327.3A patent/CN112506808B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112506808A (zh) | 2021-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112506808B (zh) | 测试任务执行方法、计算设备、计算系统和存储介质 | |
US5440741A (en) | Software overload control method | |
US10558498B2 (en) | Method for scheduling data flow task and apparatus | |
US6633942B1 (en) | Distributed real-time operating system providing integrated interrupt management | |
CN111625331B (zh) | 任务调度方法、装置、平台、服务器及存储介质 | |
JP2003298599A (ja) | 分散制御方法及び装置 | |
US20230229495A1 (en) | Task scheduling method and apparatus | |
WO2020238989A1 (zh) | 一种调度任务处理实体的方法及装置 | |
CN111897637B (zh) | 作业调度方法、装置、主机及存储介质 | |
CN111104227B (zh) | 一种K8s平台的资源控制方法、装置及相关组件 | |
EP3874369A1 (en) | Resource conservation for containerized systems | |
CN114138434B (zh) | 一种大数据任务调度系统 | |
CN109960591A (zh) | 一种面向租户资源侵占的云应用资源动态调度的方法 | |
CN112860387A (zh) | 分布式任务调度方法、装置、计算机设备及存储介质 | |
CN112486642B (zh) | 资源调度方法、装置、电子设备及计算机可读存储介质 | |
CN111124829A (zh) | 一种kubernetes计算节点状态监测方法 | |
CN114816709A (zh) | 任务调度方法、装置、服务器及可读存储介质 | |
CN111190719B (zh) | 优化集群资源分配的方法、装置、介质及电子设备 | |
CN112817772A (zh) | 一种数据通信方法、装置、设备及存储介质 | |
CN116048791B (zh) | 一种测试节点的调控方法、装置、电子设备以及存储介质 | |
CN112860401A (zh) | 任务调度方法、装置、电子设备和存储介质 | |
CN115712572A (zh) | 任务的测试方法、装置、存储介质及电子装置 | |
WO2022151951A1 (zh) | 任务调度方法及管理系统 | |
CN111813546B (zh) | 一种多网络连接应用的资源分配方法、系统及相关装置 | |
CN114546631A (zh) | 任务调度方法、控制方法、核心、电子设备、可读介质 |
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 |