一种测试任务执行方法、装置、电子设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种测试任务执行方法、装置、电子设备及存储介质。
背景技术
目前,AI技术在各个领域都有很广泛的应用,极大方便了人们的生活,例如刷脸支付、刷脸认证、刷脸考勤、刷脸门禁等等。在各个应用的背后,需要有各种各样的算法作为支撑,包括人脸识别算法、防伪检测算法以及各种证件的光学字符识别(Optical CharacterRecognition,OCR)算法等等。一方面,这些算法会随着在各个场景应用数据的不断积累,不停训练升级,达到更高的准确率。另一方面,对于应用场景中反馈的问题,进行优化。算法升级后,需要进行验证才可以更新到应用场景中,因此需要对每次升级后的算法进行批量测试,验证其升级效果。
由于算法测试集中包含的数据较多,测试得到的准确率等指标才具有可用性。测试脚本需要遍历所有的测试数据,因此测试脚本执行的时间较长。另外,测试脚本的执行均为串行方式,当一个测试脚本的批量测试完成后,才可进行下一算法模型的测试。这样,测试人员需要等待当前测试完成后,再上传下一算法模型对应的测试脚本进行测试。因此,当存在多个算法模型需要进行批量测试时,整个测试过程均由测试人员人工监控,测试效率较低,且花费大量时间和人力成本。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本申请实施例提供了一种测试任务执行方法、装置、电子设备及存储介质。
根据本申请实施例的一个方面,提供了一种测试任务执行方法,包括:
接收测试任务请求,所述测试任务请求中包括测试脚本参数;
查询所述测试脚本参数对应的测试脚本;
根据所述测试脚本生成测试任务;
将所述测试任务加入任务队列;
将所述任务队列中的测试任务依次下发到分布式部署的任务执行单元,进行并行处理。
可选的,所述将所述任务队列中的测试任务依次下发到分布式部署的任务执行单元,进行并行处理,包括:
获取各所述任务执行单元的负载状态;
基于所述负载状态将所述测试任务分配到所述任务执行单元。
可选的,所述方法还包括:
监测所述测试任务的任务执行状态;
执行所述任务执行状态对应的提醒操作。
可选的,所述监测所述测试任务的任务执行状态,包括:
获取各所述任务执行单元的任务执行信息;
根据所述任务执行信息确定所述任务执行状态。
可选的,所述执行所述任务执行状态对应的提醒操作,包括:
当所述任务执行状态包括任务执行进度时,周期性向所述测试任务对应的消息接收端发送包括所述任务执行进度的提醒消息;
和/或,
当所述任务执行状态符合预设条件时,向所述测试任务对应的消息接收端发送包括所述任务执行状态的提醒消息。
可选的,所述执行所述任务执行状态对应的提醒操作,包括:
当所述任务执行状态为任务执行结束时,通过预设方式将所述任务执行结束对应的提醒消息发送到消息接收端,其中,所述预设方式包括以下至少一种方式:电话、邮件、短信、消息。
根据本申请实施例的另一个方面,提供了一种测试任务执行装置,包括:
接收模块,用于接收测试任务请求,所述测试任务请求中包括测试脚本参数;
查询模块,用于查询所述测试脚本参数对应的测试脚本;
生成模块,用于根据所述测试脚本生成测试任务;
任务队列模块,用于将所述测试任务加入任务队列;
下发模块,用于将所述任务队列中的测试任务依次下发到分布式部署的任务执行单元,进行并行处理。
可选的,所述装置还包括:
监测模块,用于监测所述测试任务的任务执行状态;
提醒模块,用于执行所述任务执行状态对应的提醒操作。
根据本申请实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,程序运行时执行上述的步骤。
根据本申请实施例的另一个方面,提供了一种电子设备,包括:处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行计算机程序时,实现上述方法步骤。
根据本申请实施例的另一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述方法步骤。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:
由于测试***上预先存储了各算法模型的测试脚本,根据接收到的测试脚本参数查询测试任务所需的测试脚本,自动基于该测试脚本执行测试任务。这样,整个测试过程由***自动控制进行,***自动监测各测试任务的执行进度,以在当前测试任务完成后及时执行下一测试任务,无需人工监控各个测试脚本的执行进度,提高了测试效率,并降低了时间和人力成本。
另外,通过分布式部署的任务执行单元并行执行测试任务,这样,部署于不同机器上的任务执行单元分别执行不同的测试脚本,避免算法模型批量测试任务占用及资源过大导致其他测试任务执行速度过慢或无法执行,提高算法模型批量测试任务的执行效率。另外,通过任务队列的方式,当***确定任务执行单元上的某个测试任务完成后,即可执行下一测试任务,提高测试效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种测试任务执行方法的流程图;
图2为本申请另一实施例提供的一种测试任务执行方法的流程图;
图3为本申请实施例测试***的架构示意图;
图4为本申请实施例提供的一种测试任务执行装置的框图;
图5为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例,构建一个统一的测试***,预先将各算法模型的批量测试脚本封装成方法,提供统一的网关接口,基于接收到的测试任务请求选择相应的测试脚本,由测试***自动执行各个测试脚本。
下面首先对本发明实施例所提供的一种测试任务执行方法进行介绍。
图1为本申请实施例提供的一种测试任务执行方法的流程图。如图1所示,该方法应用于测试***,包括以下步骤:
步骤S11,接收测试任务请求,测试任务请求中包括测试脚本参数;
步骤S12,查询测试脚本参数对应的测试脚本;
步骤S13,根据测试脚本生成测试任务;
步骤S14,将测试任务加入任务队列;
步骤S15,将任务队列中的测试任务依次下发到分布式部署的任务执行单元,进行并行处理。
通过上述步骤S11至步骤S15,由于测试***上预先存储了各算法模型的测试脚本,根据接收到的测试脚本参数查询测试任务所需的测试脚本,自动基于该测试脚本执行测试任务。这样,整个测试过程由***自动控制进行,***自动监测各测试任务的执行进度,以在当前测试任务完成后及时执行下一测试任务,无需人工监控各个测试脚本的执行进度,提高了测试效率,并降低了时间和人力成本。
另外,通过分布式部署的任务执行单元并行执行测试任务,这样,部署于不同机器上的任务执行单元分别执行不同的测试脚本,避免算法模型批量测试任务占用及资源过大导致其他测试任务执行速度过慢或无法执行,提高算法模型批量测试任务的执行效率。另外,通过任务队列的方式,当***确定任务执行单元上的某个测试任务完成后,即可执行下一测试任务,提高测试效率。
可选的,上述步骤S11中,测试脚本参数可以为脚本标识,可以包括:对应的算法模型名称+版本号、脚本编号、测试人员自定义名称等等。
可选实施例中,测试人员可以预先将算法模型对应的测试脚本上传的该测试***。测试脚本可以与测试人员的用户ID绑定,即当测试人员使用用户ID登录到测试***,会将其上传的测试脚本显示出来,测试人员可以从该用户ID下的测试脚本中选择本次测试所需的测试脚本。
可选的,该测试***中,采用Flask架构提供统一网关接口来接收测试任务请求,其中,Flask是一个使用Python编写的轻量级Web应用框架。Flask架构的主要特征是核心构成比较简单,但具有很强的扩展性和兼容性。Flask架构不会指定数据库和模板引擎等对象,用户可以根据需要自己选择各种数据库。Flask自身不会提供表单验证功能,在项目实施过程中可以自由配置,从而为应用程序开发提供数据库抽象层基础组件,支持进行表单数据合法性验证、文件上传处理、用户身份认证和数据库集成等功能。通过调用该网关接口,基于接收到的测试脚本参数选择测试该算法模型所需的测试脚本。
可选的,测试***中引入Celery架构,完成测试任务的并行执行。其中,Celery是Python开发的分布式任务调度***,专注于实时处理的任务队列,同时也支持任务调度。Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。Celery提供一个异步任务队列,当接收到测试任务请求后,基于请求对应的测试脚本,将测试任务加入该异步任务队列中。任务执行单元并发的运行在分布式的***节点中。本实施例中,可将任务执行单元分布式部署在不同机器上,分别执行不同的测试任务。
可选的,上述步骤S15包括:
步骤A1,获取各任务执行单元的负载状态;
步骤A2,基于负载状态将测试任务分配到任务执行单元。
通过上述步骤A1和步骤A2,根据每个任务执行单元的负载状态分配测试任务,提高各个测试任务的执行效率,使得各个任务执行单元之间负载均衡。
其中,各任务执行单元的负载状态除了与自身处理的测试任务有关,还与其所在机器的性能有关。在进行任务调度分配时,除了考虑任务执行单元的负载状态,还需考虑测试任务对机器性能指标的要求。
因此,在进行任务调度分配时,可以基于测试任务本身的性能需求、各机器的性能指标、任务执行单元当前的负载状态,选择一个或多个任务执行单元作为执行该测试任务的候选执行单元。当其中一个候选执行单元上测试任务结束,即可执行该测试任务。可选的,也可以根据机器性能指标、任务执行单元的负载状态为候选执行单元计算权重,优先选择权重较高的候选执行单元执行该测试任务。
图2为本申请另一实施例提供的一种测试任务执行方法的流程图。如图2所示,该方法还包括以下步骤:
步骤S31,监测测试任务的任务执行状态;
步骤S32,执行任务执行状态对应的提醒操作。
通过上述步骤S31和步骤S32,测试***自动监测各个测试任务的执行状态,并可执行相应的提醒操作,测试人员无需人工定期查看测试情况即可获知批量测试任务的任务执行情况,节约了大量的时间成本和人力成本。
可选的,步骤S31包括:获取各任务执行单元的任务执行信息;根据任务执行信息确定任务执行状态。
例如,Celery架构的任务执行结果存储部分,可以存储任务执行单元的任务执行信息,支持以不同方式存储任务执行信息,包括AMQP,Redis等。
可选的,步骤S32包括:当任务执行状态包括任务执行进度时,周期性向测试任务对应的消息接收端发送包括任务执行进度的提醒消息;和/或,当任务执行状态符合预设条件时,向测试任务对应的消息接收端发送包括任务执行状态的提醒消息。
例如,可以预先设置每隔30分钟将测试任务的执行进度发送给测试人员,以便测试人员跟踪测试任务执行状态,当进度推进异常时,测试人员可以及时发现并进行问题排查。
又例如,当任务执行结束,或任务执行状态为预设执行进度值,如50%时,向测试人员发送提醒消息,告知测试人员测试任务执行情况。
可选的,该测试***够可以提供测试进度显示界面,在界面上实时显示测试任务的进度变化情况。可选的,同时将测试过程中的各项测试结果展示出来。
可选的,步骤S32包括:当任务执行状态为任务执行结束时,通过预设方式将任务执行结束对应的提醒消息发送到消息接收端,其中,预设方式包括以下至少一种方式:电话、邮件、短信、消息。
其中,可以采用Python支持的简单邮件传输协议(Simple Mail TransferProtocol,SMTP),将Celery存储的任务执行状态以邮件的方式通知测试人员。例如,当测试任务结束时,给测试人员预先输入的邮箱地址发送邮件,告知测试任务结束时间、测试结果等信息。
SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。Python对SMTP支持有Smtplib和Email两个模块,Email模块负责构造邮件,Smtplib模块负责发送邮件。
可选的,还可以采用短信协议(Short Message Protocol,SMP)以短信方式通知测试人员。SMP指的是手机所支持的短信息协议,也称为多媒体协议。目前主要有SMS短信、EMS短信和MMS彩信三种。
可选的,还可以采用传输控制协议(TCP,Transmission Control Protocol),以微信等短消息方式通知测试人员。
可选的,测试人员可以在测试***上配置至少一个邮箱地址,还可选择其他方式接收提醒消息,如短信、微信、电话等等。其中邮箱地址、手机号、微信号等可存储在配置文件中。
下面通过一个具体实例对上述方法进行详细说明。
图3为本申请实施例测试***的架构示意图。如图3所示,该测试***各个部分执行过程如下:
基于Flask架构的网关41,基于接收到的测试脚本参数从脚本库42中选择测试所需的测试脚本。基于该测试脚本生成测试任务加入到Celery架构的任务队列43中。Celery架构中分布式部署的多个任务执行单元44并行地执行测试任务。当监测到任务执行单元44完成测试任务时,Celery架构中的任务结果存储模块45存储测试任务的执行结果,调用Smtplib邮件发送模块46从配置文件中获取对应的邮箱地址,发送任务结束通知邮件给测试人员。
本实施例的测试***,将Celery和Smtplib结合,其中,Celery实现了测试脚本的并行执行,可以同时完成多个算法模型的批量测试任务;Smtplib用来发送邮件通知,批量测试任务结束后,发邮件通知测试人员任务已结束。测试人员不用定期查看脚本进度,就能及时获取任务结束状态。因此,提高了算法模型回归效率,降低了测试所需的时间成本和人力成本。
下述为本申请装置实施例,可以用于执行本申请方法实施例。
图4为本申请实施例提供的一种测试任务执行装置的框图,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。如图4所示,该测试任务执行装置包括:
接收模块51,用于接收测试任务请求,测试任务请求中包括测试脚本参数;
查询模块52,用于查询测试脚本参数对应的测试脚本;
生成模块53,用于根据测试脚本生成测试任务;
任务队列模块54,用于将测试任务加入任务队列;
下发模块55,用于将任务队列中的测试任务依次下发到分布式部署的任务执行单元,进行并行处理。
本实施例的装置,通过预先存储的各算法模型的测试脚本,根据接收到的测试脚本参数查询测试任务所需的测试脚本,自动基于该测试脚本执行测试任务。这样,整个测试过程自动控制进行,自动监测各测试任务的执行进度,以在当前测试任务完成后及时执行下一测试任务,无需人工监控各个测试脚本的执行进度,提高了测试效率,并降低了时间和人力成本。
可选的,该装置还包括:
监测模块56,用于监测测试任务的任务执行状态;
提醒模块57,用于执行任务执行状态对应的提醒操作。
本实施例的装置,通过自动监测各个测试任务的执行状态,并可执行相应的提醒操作,测试人员无需人工定期查看测试情况即可获知批量测试任务的任务执行情况,节约了大量的时间成本和人力成本。
可选的,执行模块53,还用于获取各所述任务执行单元的负载状态;基于所述负载状态将所述测试任务分配到所述任务执行单元。
可选的,监测模块54,用于获取各所述任务执行单元的任务执行信息;根据所述任务执行信息确定所述任务执行状态。
可选的,提醒模块55,用于当所述任务执行状态包括任务执行进度时,周期性向所述测试任务对应的消息接收端发送包括所述任务执行进度的提醒消息;和/或,当所述任务执行状态符合预设条件时,向所述测试任务对应的消息接收端发送包括所述任务执行状态的提醒消息。
可选的,提醒模块55,用于当所述任务执行状态为任务执行结束时,通过预设方式将所述任务执行结束对应的提醒消息发送到消息接收端,其中,所述预设方式包括以下至少一种方式:电话、邮件、短信、消息。
本申请实施例还提供一种电子设备,如图5所示,电子设备可以包括:处理器1501、通信接口1502、存储器1503和通信总线1504,其中,处理器1501,通信接口1502,存储器1503通过通信总线1504完成相互间的通信。
存储器1503,用于存放计算机程序;
处理器1501,用于执行存储器1503上所存放的计算机程序时,实现以下方法实施例的步骤:
接收测试任务请求,所述测试任务请求中包括测试脚本参数;
查询所述测试脚本参数对应的测试脚本;
根据所述测试脚本执行测试任务。
可选的,所述根据所述测试脚本执行测试任务,包括:
根据所述测试脚本生成所述测试任务;
将所述测试任务加入任务队列;
将所述任务队列中的测试任务依次下发到分布式部署的任务执行单元,进行并行处理。
可选的,所述将所述任务队列中的测试任务依次下发到分布式部署的任务执行单元,进行并行处理,包括:
获取各所述任务执行单元的负载状态;
基于所述负载状态将所述测试任务分配到所述任务执行单元。
可选的,所述方法还包括:
监测所述测试任务的任务执行状态;
执行所述任务执行状态对应的提醒操作。
可选的,所述监测所述测试任务的任务执行状态,包括:
获取各所述任务执行单元的任务执行信息;
根据所述任务执行信息确定所述任务执行状态。
可选的,所述执行所述任务执行状态对应的提醒操作,包括:
当所述任务执行状态包括任务执行进度时,周期性向所述测试任务对应的消息接收端发送包括所述任务执行进度的提醒消息;
和/或,
当所述任务执行状态符合预设条件时,向所述测试任务对应的消息接收端发送包括所述任务执行状态的提醒消息。
可选的,所述执行所述任务执行状态对应的提醒操作,包括:
当所述任务执行状态为任务执行结束时,通过预设方式将所述任务执行结束对应的提醒消息发送到消息接收端,其中,所述预设方式包括以下至少一种方式:电话、邮件、短信、消息。
上述电子设备提到的通信总线可以是外设部件互连标准(PeripheralComponentInterconnect,P C I)总线或扩展工业标准结构(Extended IndustryStandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DigitalSignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本申请还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以下上述方法实施例的步骤。
需要说明的是,对于上述装置、电子设备及计算机可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
进一步需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。