CN110633208A - 增量代码覆盖率测试方法及系统 - Google Patents

增量代码覆盖率测试方法及系统 Download PDF

Info

Publication number
CN110633208A
CN110633208A CN201910778581.4A CN201910778581A CN110633208A CN 110633208 A CN110633208 A CN 110633208A CN 201910778581 A CN201910778581 A CN 201910778581A CN 110633208 A CN110633208 A CN 110633208A
Authority
CN
China
Prior art keywords
code
server
version
coverage
data
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
Application number
CN201910778581.4A
Other languages
English (en)
Inventor
王哲
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Dasou Vehicle Software Technology Co Ltd
Original Assignee
Zhejiang Dasou Vehicle Software Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhejiang Dasou Vehicle Software Technology Co Ltd filed Critical Zhejiang Dasou Vehicle Software Technology Co Ltd
Priority to CN201910778581.4A priority Critical patent/CN110633208A/zh
Publication of CN110633208A publication Critical patent/CN110633208A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Abstract

本申请涉及一种增量代码覆盖率测试方法及系统。所述方法包括:分析服务器集群接收代码管理服务器发送的代码变更通知,并通过负载均衡算法从所述分析服务器集群中选取处理服务器;所述处理服务器根据所述代码变更通知,生成增量代码覆盖率测试任务,将增量代码覆盖率测试任务发送到消息队列中;执行机集群根据当前所述执行机集群中的执行机的资源占用率选取处理执行机;所述处理执行机从所述消息队列中获取增量代码覆盖率测试任务,并执行所述增量代码覆盖率测试任务得到增量代码覆盖率数据,并将所述增量代码覆盖率数据返回给所述处理服务器;所述处理服务器存储所接收的所述增量代码覆盖率数据。采用本方法能够提高代码覆盖率测试效率。

Description

增量代码覆盖率测试方法及系统
技术领域
本申请涉及测试技术领域,特别是涉及一种增量代码覆盖率测试方法及系统。
背景技术
随着计算机技术的发展,大多数业务及行为均在线上进行,这样就需要研发人员编写大量的代码,但是在代码使用前需要对代码覆盖率进行测试,目前针对代码覆盖率的检测,最常用的是基于类库coverage的技术方案,具体的是利用Python的sys模块中提供settrace函数,跟踪代码的执行情况,将覆盖率数据存储到Collector中的Stack中。每当开始采集时,Collector不断执行入栈操作,停止采集时,通过出栈操作即可获取已采集的覆盖率信息。
然而,目前代码覆盖率测试是基于类库coverage的技术方案,即所有的任务均是由一台服务器进行处理,这样当服务器出现问题,则整个测试就会失败,再进行测试时,则需要全部重新开始,从而使得代码覆盖率测试效率降低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高代码覆盖率测试效率的增量代码覆盖率测试方法及系统。
一种增量代码覆盖率测试方法,所述方法包括:
分析服务器集群接收代码管理服务器发送的代码变更通知,并通过负载均衡算法从所述分析服务器集群中选取处理服务器;
所述处理服务器根据所述代码变更通知,生成增量代码覆盖率测试任务,将增量代码覆盖率测试任务发送到消息队列中;
执行机集群根据当前所述执行机集群中的执行机的资源占用率选取处理执行机;
所述处理执行机从所述消息队列中获取增量代码覆盖率测试任务,并执行所述增量代码覆盖率测试任务得到全量单元测试覆盖率报告和版本差异化数据,根据所述版本差异化数据查询所述全量单元测试覆盖率报告得到与所述版本差异化数据对应的增量代码覆盖率数据,并将所述增量代码覆盖率数据返回给所述处理服务器;
所述处理服务器存储所接收的所述增量代码覆盖率数据。
在其中一个实施例中,所述执行所述增量代码覆盖率测试任务得到全量单元测试覆盖率报告和版本差异化数据,根据所述版本差异化数据查询所述全量单元测试覆盖率报告得到与所述版本差异化数据对应的增量代码覆盖率数据,包括:
从所述代码管理服务器下载源代码,并获取所述源代码的版本信息;
基于所述版本信息从所述代码管理服务器下载与上一个版本比对得到的版本差异化数据;
对所述源代码进行全量单元测试得到全量单元测试覆盖率报告;
根据所述版本差异化数据和所述全量单元测试覆盖率报告得到所述版本差异化数据对应的覆盖信息,根据所述覆盖信息生成增量代码覆盖率数据。
在其中一个实施例中,所述根据所述版本差异化数据和所述全量单元测试覆盖率报告得到所述版本差异化数据对应的覆盖信息,包括:
遍历版本差异化数据的每一行,并确定版本差异化数据的每一行在所述全量单元测试覆盖率报告中的覆盖信息;
基于每一行代码的覆盖信息得到所述版本差异化数据的覆盖信息。
在其中一个实施例中,所述通过负载均衡算法从所述分析服务器集群中选取处理服务器,包括:
遍历所述分析服务器集群中各个处于工作状态的服务器的当前处理压力;
均衡所述当前处理压力以选取所述当前处理压力最小的服务器作为处理服务器。
在其中一个实施例中,所述均衡所述当前处理压力以选取所述当前处理压力最小的服务器作为处理服务器之前,还包括:
判断各个处于工作状态的服务器的当前处理压力是否均大于第一预设值;
若是,则启动所述分析服务器集群中新的服务器作为处理服务器。
在其中一个实施例中,所述遍历所述分析服务器集群中各个处于工作状态的服务器的当前处理压力,包括:
遍历所述分析服务器集群中各个服务器的状态;
将状态为不可用的服务器进行剔除,并获取状态为工作状态的服务器的当前处理压力。
在其中一个实施例中,所述执行机集群根据当前所述执行机集群中的执行机的资源占用率选取处理执行机,包括:
执行机集群获取当前所述执行机集群中的执行机的资源占用率;
当所述资源占用率均高于第二预设值时,则增加云服务器或虚拟机作为处理执行机。
在其中一个实施例中,所述执行机集群获取当前所述执行机集群中的执行机的资源占用率之后,还包括:
当存在资源占用率小于等于第二预设值的执行机时,则从资源占用率小于等于第二预设值的执行机中选取资源占用率最低的执行机作为处理执行机。
一种增量代码覆盖率测试系统,所述系统包括代码管理服务器、分析服务器集群以及执行机集群:
所述分析服务器集群,用于接收代码管理服务器发送的代码变更通知,并通过负载均衡算法从所述分析服务器集群中选取处理服务器;
所述处理服务器,用于根据所述代码变更通知,生成增量代码覆盖率测试任务,将增量代码覆盖率测试任务发送到消息队列中;
所述执行机集群,用于根据当前所述执行机集群中的执行机的资源占用率选取处理执行机;
所述处理执行机,用于从所述消息队列中获取增量代码覆盖率测试任务,并执行所述增量代码覆盖率测试任务得到全量单元测试覆盖率报告和版本差异化数据,根据所述版本差异化数据查询所述全量单元测试覆盖率报告得到与所述版本差异化数据对应的增量代码覆盖率数据,并将所述增量代码覆盖率数据返回给所述处理服务器;
所述处理服务器还用于存储所接收的所述增量代码覆盖率数据。
在其中一个实施例中,所述处理执行机还用于从所述代码管理服务器下载源代码,并获取所述源代码的版本信息;基于所述版本信息从所述代码管理服务器下载与上一个版本比对得到的版本差异化数据;对所述源代码进行全量单元测试得到全量单元测试覆盖率报告;根据所述版本差异化数据和所述全量单元测试覆盖率报告得到所述版本差异化数据对应的覆盖信息,根据所述覆盖信息生成增量代码覆盖率数据。
上述增量代码覆盖率测试方法及系统,分析服务器用于在接收到代码管理服务器发送的代码变更通知后,选取到处理服务器,并通过处理服务器生成增量代码覆盖率测试任务,将生成的增量代码覆盖率测试任务放在消息队列中,这样完成任务的生成,然后通过执行机集群从消息队列中消费任务,并处理任务得到增量代码覆盖率,任务的生成和任务的处理通过消息队列进行解耦合,且通过不同的分析服务器生成任务,通过不同的执行机来执行任务,保证了任务的处理效率。
附图说明
图1为一个实施例中增量代码覆盖率测试系统的框图;
图2为一个实施例中增量代码覆盖率测试方法的流程示意图;
图3为一个实施例中的增量代码覆盖率获取步骤的流程图;
图4为一个实施例中增量代码覆盖率测试方法的时序图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的增量代码覆盖率测试方法,可以应用于如图1所示的系统中。其中,研发终端102可以向代码管理服务器104提交变更的代码,即研发终端102发起请求,该请求可以包括代码提交请求或者是代码合并请求,也即变更的代码的请求,从而代码管理服务器104可以向分析服务器集群106发送代码变更通知,即Gitlab的WebHook进行事件通知,分析服务器集群106在接收到代码变更通知后,开始处理代码质量检查,包括增量覆盖率检测和静态检测,即通过负载均衡算法选取处理服务器,并通过该处理服务器生成增量代码覆盖率测试任务,将该任务放在消息队列108中,从而执行机集群110可以根据当前执行机集群中的执行机的资源占用率选取处理执行机,该处理执行机从消息队列108中提取增量代码覆盖率测试任务,并执行增量代码覆盖率测试任务得到全量单元测试覆盖率报告和版本差异化数据,根据版本差异化数据查询全量单元测试覆盖率报告得到与版本差异化数据对应的增量代码覆盖率数据,其中在处理执行机在执行增量代码覆盖率测试任务得到全量单元测试覆盖率报告和版本差异化数据的时候,可以首先从代码管理服务器104下载源代码到本地,然后并通过git工具获取本地的版本信息,然后处理服务器根据本地本本信息获取服务端的项目信息,该项目信息包含代码提交数据,与上一版本的差异数据,并存储至数据库。第三,处理服务器使用mavenjacoco插件获取全量单元测试覆盖报告,解析覆盖率数据报告,并存储数据库;根据覆盖率报告数据和版本差异数据合并,解析出代码增量覆盖率数据;查找对应的覆盖信息,从而可以根据覆盖信息得到增量代码覆盖率数据,并将增量代码覆盖率数据返回给处理服务器,以便于处理服务器保存该增量代码覆盖率数据,并通知研发终端102,从而研发终端102可以获取到该增量代码覆盖率数据,任务的生成和任务的处理通过消息队列进行解耦合,且通过不同的分析服务器生成任务,通过不同的执行机来执行任务,保证了任务的处理效率。其中,研发终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,代码管理服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图2所示,提供了一种增量代码覆盖率测试方法,包括以下步骤:
S202:分析服务器集群接收代码管理服务器发送的代码变更通知,并通过负载均衡算法从分析服务器集群中选取处理服务器。
具体地,代码变更通知是代码管理服务器接收到研发终端发送的代码提交请求或者是代码合并请求后所生成的、用于表示代码发生了变化的通知,在代码发生变化后,则需要对代码进行增量代码覆盖率测试以对增量代码的质量进行评价。
在实际应用中,研发终端首先向代码管理服务器,例如Gitlab发送代码提交请求或者是代码合并请求,代码管理服务器在接收到该请求后,对所提交的代码或者是合并的代码进行保存,并利用代码管理服务器的WebHook进行事件通知,即向分析服务器集群发送代码变更通知。
分析服务器集群在接收到代码变更通知后,则通过负载均衡算法从分析服务器集群中选取处理服务器,其中可选地,负载均衡算法可以通过Ngix实现,即进行随机遍历,均分生成增量代码覆盖率测试任务的压力,实现增量代码覆盖率测试任务的高可用,也就是说保证了在一定数量的处理服务器宕机的情况下依旧可以生成增量代码覆盖率测试任务。
S204:处理服务器根据代码变更通知,生成增量代码覆盖率测试任务,将增量代码覆盖率测试任务发送到消息队列中。
具体地,分析服务器集群在通过负载均衡算法选取了处理服务器后,通过该处理服务器生成增量代码覆盖率测试任务,例如,处理服务器根据代码变更通知获取变更的代码的版本信息,提交代码的研发终端等,并根据所获取的信息生成增量代码覆盖率测试任务,将该增量代码覆盖率测试任务按照时间顺序添加到消息队列中,从而保证消息队列中的增量代码覆盖率测试任务是按照时间顺序排列的,进而执行机集群中的处理执行机可以按照时间顺序从消息队列中提取对应的测试任务。且进一步地,为了保证紧急的增量代码覆盖率测试任务的优先执行,增量代码覆盖率测试任务上还可以设置有优先级标签,进而执行机在从消息队列提取任务的时候,还可以首先根据优先级标签进行提取,在优先级标签均一致时,再根据时间顺序进行提取。
S206:执行机集群根据当前执行机集群中的执行机的资源占用率选取处理执行机。
具体地,执行机集群是用于从消息队列中提取增量代码覆盖率测试任务,并执行的,执行机集群可以根据当前执行机集群中的执行机的资源占用率选取处理执行机,即总是选取资源占用率最低的执行机作为处理执行机,从而实现执行机集群中各个执行机的均衡。且由于增量代码覆盖率测试任务是中央处理器密集型应用,当增量代码覆盖率测试任务过多时,中央处理器的资源占用率较高,算力不足,因此为了保证处理的效率,可以将执行机集群设置为支持横向扩展的集群,即在执行机集群中各个执行机的资源占用率均过高时,可以自动添加新的云服务器或者虚拟机,而不需要修改任何代码逻辑或者是升级服务器配置。可选地,执行机集群可以通过订阅消息的方式从消息队列中获取到增量代码覆盖率测试任务。
S208:处理执行机从消息队列中获取增量代码覆盖率测试任务,并执行增量代码覆盖率测试任务得到全量单元测试覆盖率报告和版本差异化数据,根据版本差异化数据查询全量单元测试覆盖率报告得到与版本差异化数据对应的增量代码覆盖率数据,并将增量代码覆盖率数据返回给处理服务器。
S210:处理服务器存储所接收的增量代码覆盖率数据。
具体地,增量代码覆盖率包括指令覆盖率和圈复杂度,其中指令覆盖率包括完全没有覆盖到、有部分指令被覆盖到以及全量覆盖到。圈复杂度(如果为判断语句)包括全没有覆盖到、有部分指令被覆盖到以及全量覆盖到。
处理执行机在获取到增量代码覆盖率测试任务,则执行增量代码覆盖率测试任务得到增量代码覆盖率,处理执行机可以首先向代码管理服务器请求源代码,然后对源代码进行编译处理,进而进行测试得到增量代码覆盖率数据,例如处理执行机首先确定增量代码,再确定增量代码中哪一行执行了,用执行了的代码的行数比上所有的增量代码的行数得到增量代码覆盖率,并将所得到的增量代码覆盖率返回给对应的处理服务器。
处理服务器将增量代码覆盖率与对应的增量代码覆盖率测试任务关联存储到数据库中,并通知研发终端,以便于研发终端从数据库进行查询已得到增量代码覆盖率。
上述增量代码覆盖率测试方法,分析服务器用于在接收到代码管理服务器发送的代码变更通知后,选取到处理服务器,并通过处理服务器生成增量代码覆盖率测试任务,将生成的增量代码覆盖率测试任务放在消息队列中,这样完成任务的生成,然后通过执行机集群从消息队列中消费任务,并处理任务得到增量代码覆盖率,任务的生成和任务的处理通过消息队列进行解耦合,且通过不同的分析服务器生成任务,通过不同的执行机来执行任务,保证了任务的处理效率。
在其中一个实施例中,执行增量代码覆盖率测试任务得到全量单元测试覆盖率报告和版本差异化数据,根据版本差异化数据查询全量单元测试覆盖率报告得到与版本差异化数据对应的增量代码覆盖率数据,包括:从代码管理服务器下载源代码,并获取源代码的版本信息;基于版本信息从代码管理服务器下载与上一个版本比对得到的版本差异化数据;对源代码进行全量单元测试得到全量单元测试覆盖率报告;根据版本差异化数据和全量单元测试覆盖率报告得到版本差异化数据对应的覆盖信息,根据覆盖信息生成增量代码覆盖率数据。
具体地,在实际应用中,处理服务器获取到增量代码覆盖率数据可以包括以下内容:首先处理服务器从代码管理服务器下载源代码,并通过git工具获取本地的版本信息,然后处理服务器根据本地本本信息获取服务端的项目信息,该项目信息包含代码提交数据,与上一版本的差异数据,并存储至数据库。第三,处理服务器使用mavenjacoco插件获取全量单元测试覆盖报告,解析覆盖率数据报告,并存储数据库;根据覆盖率报告数据和版本差异数据合并,解析出代码增量覆盖率数据;查找对应的覆盖信息。
在其中一个实施例中,根据版本差异化数据和全量单元测试覆盖率报告得到版本差异化数据对应的覆盖信息,包括:遍历增量代码的每一行,并确定版本差异化数据的每一行在全量单元测试覆盖率报告中的覆盖信息;基于每一行代码的覆盖信息得到版本差异化数据的覆盖信息。
具体地,参见图3所示,图3为一个实施例中的增量代码覆盖率数据获取步骤的流程图,即处理执行机在执行增量代码覆盖率测试任务得到增量代码覆盖率时可以包括以下步骤:
S302:处理执行机从代码管理服务器下载源代码,并获取源代码的版本信息。
具体地,研发终端在发送代码提交请求或者是代码合并请求至代码管理服务器时,代码管理服务器可以基于该代码提交请求或者是代码合并请求生成版本信息,该版本信息具有唯一性,这样无论是分析服务器集群还是执行机集群在处理的时候,均可以根据该版本信息确定所处理的代码。
处理执行机在执行增量代码覆盖率测试任务时,首先确定版本信息,然后根据版本信息从代码管理服务器下载源代码至本地,这样可以对源代码进行编译后进行测试。
S304:基于版本信息从代码管理服务器下载与上一个版本比对得到的版本差异化数据。
具体地,处理执行机可以通过Gitlab工具获取到本地的版本信息,并根据本地版本信息去代码管理服务器获取到项目信息,项目信息包含了每次的代码提交数据以及与上一个版本的版本差异化数据,即增量代码。处理执行机可以将所获取到的版本差异化数据以及源代码存储到数据库中进行持久化,以便于后续测试使用。
S306:对源代码进行全量单元测试得到全量单元测试覆盖率报告。
S308:遍历版本差异化数据的每一行,并确定版本差异化数据的每一行在全量单元测试覆盖率报告中的覆盖信息。
具体地,处理执行机通过开源项目maven jacoco插件对源代码进行执行以获取全量单元测试覆盖率报告,然后遍历版本差异化数据的每一行,通过版本差异化数据的每一行去覆盖全量单元测试覆盖率报告中的每一行,以从全量单元测试覆盖率报告得到增量代码的覆盖信息。增量代码的覆盖信息包括指令覆盖率和圈复杂度,其中指令覆盖率包括完全没有覆盖到、有部分指令被覆盖到以及全量覆盖到。圈复杂度(如果为判断语句)包括全没有覆盖到、有部分指令被覆盖到以及全量覆盖到。
S310:基于每一行代码的覆盖信息得到版本差异化数据的覆盖信息。
S312:根据覆盖信息生成增量代码覆盖率数据。
具体地,处理执行机在得到每一行代码的覆盖信息后,再统计所有的增量代码的覆盖信息,例如每一行代码是否覆盖执行到,统计所有覆盖执行到的代码的行数。最后处理执行机通过所有覆盖执行到的代码的行数比上版本差异化数据所有的行数得到增量代码覆盖率数据。
上述实施例中,通过全量单元测试覆盖率报告得到源代码的全量单元测试覆盖率报告,然后遍历版本差异数据中的每一行代码,根据代码所在的类、所在的行数去覆盖率报告数据中查找对应的覆盖信息(这行代码的覆盖率情况,目的是为了,查看在当前版本中此行有没有被单元测试覆盖到);根据对应的信息生成代码增量覆盖率数据。
在其中一个实施例中,通过负载均衡算法从分析服务器集群中选取处理服务器,包括:遍历分析服务器集群中各个处于工作状态的服务器的当前处理压力;均衡当前处理压力以选取当前处理压力最小的服务器作为处理服务器。
在其中一个实施例中,均衡当前处理压力以选取当前处理压力最小的服务器作为处理服务器之前,还包括:判断各个处于工作状态的服务器的当前处理压力是否均大于第一预设值;若是,则启动分析服务器集群中新的服务器作为处理服务器。
在其中一个实施例中,遍历分析服务器集群中各个处于工作状态的服务器的当前处理压力,包括:遍历分析服务器集群中各个服务器的状态;将状态为不可用的服务器进行剔除,并获取状态为工作状态的服务器的当前处理压力。
具体地,分析服务器集群在接收到代码变更通知时,则需要配置处理服务器来对本次代码变更通知进行处理以生成增量代码覆盖率测试任务,且为了保证处理效率,分析服务器集群首先遍历集群中的各个服务器的状态,将不可用分服务器进行剔除,例如将宕机的服务器进行剔除等,并将宕机的服务器的任务进行转移,例如均分给未宕机的服务器或者是启动新的服务器来进行处理等。然后分析服务器集群获取到状态为工作状态的服务的当前处理压力,如果当前处理压力大于第一预设值,则可以启动分析服务器集群中新的服务器作为处理服务器,若存在未大于第一预设值的服务器,则可以均衡当前处理压力以选取当前处理压力最小的服务器作为处理服务器,即将整个处理压力均分在整个分析服务器集群上。
需要说明的是,第一预设值是预先设定的,其是一个用于保证分析服务器集群中每一个服务器可以正常工作且充分利用了每一个服务器的计算性能的临界值。
上述实施例中,通过负载均衡算法调度服务器,可以均分整个的请求压力。并且在压力过大的时候可以直接通过添加服务器的方式来增加整个分析服务集群的处理能力,此外还通过Keepalived动态剔除当前不可用的服务器,保证了处理的效率。
在其中一个实施例中,执行机集群根据当前执行机集群中的执行机的资源占用率选取处理执行机,包括:执行机集群获取当前执行机集群中的执行机的资源占用率;当资源占用率均高于第二预设值时,则增加云服务器或虚拟机作为处理执行机。
在其中一个实施例中,执行机集群获取当前执行机集群中的执行机的资源占用率之后,还包括:当存在资源占用率小于等于第二预设值的执行机时,则从资源占用率小于等于第二预设值的执行机中选取资源占用率最低的执行机作为处理执行机。
具体地,执行机集群以消费的方式从消息队列中获取增量代码覆盖率测试任务,并执行。执行机集群订阅消息,当消息队列中存在增量代码覆盖率测试任务时,则开始消费消息队列中增量代码覆盖率测试任务,且执行机集群在消费增量代码覆盖率测试任务时,首先获取当前执行机集群中的执行机的资源占用率,并判断资源占用率是否高于第二预设值,当均高于第二预设值时,则可以增加云服务器或虚拟机作为处理执行机,进行增量代码覆盖率测试任务的执行。如果存在资源占用率未高于第二预设值的执行机时,则从资源占用率小于等于第二预设值的执行机中选取资源占用率最低的执行机作为处理执行机。因为增量代码覆盖率测试任务为cpu密集型应用,当增量代码覆盖率测试任务过多的时候体现在cpu的资源占用率过高,算力不足,这个时候由于架构设计的时候就考虑到支持横向扩展,即新添加几台云服务器或者虚拟机就可以了,不需要修改任何代码逻辑,不需要升级停机升级服务器配置。
其中第二预设值是预先设定的,其是一个用于保证执行机集群中每一个执行机可以正常工作且充分利用了每一个执行机的计算性能的临界值。
上述实施例中,在执行机集群中的执行机的资源占用率过高时,仅新添加几台云服务器或者虚拟机就可以了,不需要修改任何代码逻辑,不需要升级停机升级服务器配置,保证了处理效率。
在其中一个实施例中,请参见图4所示,图4为一个实施例中的增量代码覆盖率测试方法的时序图,在该实施例中,分析服务器集群中包括2台服务器,执行机集群中包括7台执行机。
其中研发终端在编写完代码后,向代码管理服务器发送提交合并请求,从而代码服务器将研发终端所提交的新增代码与源代码进行合并,且向分析服务器集群发送代码变更通知,从而分析服务器集群通过负载均衡算法选取处理服务器,具体地可以包括遍历分析服务器集群中各个服务器的状态,将状态为不可用的服务器进行剔除,并获取状态为工作状态的服务器的当前处理压力,如果当前处理压力均大于第一预设值,则启动新的服务器作为处理服务器,否则选取当前处理压力中最小的服务器作为处理服务器,在该实施例中则可以轮流有两台处理服务器来进行工作,处理服务器打包得到增量代码覆盖率测试任务,并将该增量代码覆盖率测试任务发送到消息队列中。
执行机集群通过订阅消息的方式判断消息队列中是否存在增量代码覆盖率测试任务,如果存在,则根据集群中各个执行机的资源占用率选取处理执行机,并通过处理执行机从消息队列中获取增量代码覆盖率测试任务得到增量代码覆盖率数据,例如首先从分析服务器请求源代码,并获取源代码的包版本信息,基于该版本信息从代码管理服务器下载与上一个版本比对得到的版本差异化数据,即增量代码,然后对源代码进行编译处理并进行测试,得到全量单元测试覆盖率报告,然后遍历增量代码的每一行,通过增量代码的每一行去覆盖全量单元测试覆盖率报告中的每一行,以从全量单元测试覆盖率报告得到增量代码的覆盖信息,处理执行机在得到每一行代码的覆盖信息后,再统计所有的增量代码的覆盖信息,例如每一行代码是否覆盖执行到,统计所有覆盖执行到的代码的行数。最后处理执行机通过所有覆盖执行到的代码的行数比上增量代码所有的行数得到增量代码覆盖率数据。处理执行机将增量代码覆盖率数据发送给处理服务器,处理服务器解析增量代码覆盖率数据并存储到数据库中,且在存储成功后向研发终端返回测试完成的消息,以便于研发终端可以根据版本信息去数据库查询对应版本的增量代码的增量代码覆盖率数据。
上述增量代码覆盖率测试方法及系统,分析服务器用于在接收到代码管理服务器发送的代码变更通知后,选取到处理服务器,并通过处理服务器生成增量代码覆盖率测试任务,将生成的增量代码覆盖率测试任务放在消息队列中,这样完成任务的生成,然后通过执行机集群从消息队列中消费任务,并处理任务得到增量代码覆盖率,任务的生成和任务的处理通过消息队列进行解耦合,且通过不同的分析服务器生成任务,通过不同的执行机来执行任务,保证了任务的处理效率。
应该理解的是,虽然图2-4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-4中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,继续参阅如图1所示,提供了一种增量代码覆盖率测试系统,包括:代码管理服务器、分析服务器集群以及执行机集群。
分析服务器集群,用于接收代码管理服务器发送的代码变更通知,并通过负载均衡算法从分析服务器集群中选取处理服务器。
处理服务器,用于根据代码变更通知,生成增量代码覆盖率测试任务,将增量代码覆盖率测试任务发送到消息队列中。
执行机集群,用于根据当前执行机集群中的执行机的资源占用率选取处理执行机。
处理执行机,用于从消息队列中获取增量代码覆盖率测试任务,并执行增量代码覆盖率测试任务得到全量单元测试覆盖率报告和版本差异化数据,根据版本差异化数据查询全量单元测试覆盖率报告得到与版本差异化数据对应的增量代码覆盖率数据,并将增量代码覆盖率数据返回给处理服务器。
处理服务器还用于存储所接收的增量代码覆盖率数据。
在其中一个实施例中,处理执行机还用于从代码管理服务器下载源代码,并获取源代码的版本信息;基于版本信息从代码管理服务器下载与上一个版本比对得到的版本差异化数据;对源代码进行全量单元测试得到全量单元测试覆盖率报告;根据版本差异化数据和全量单元测试覆盖率报告得到版本差异化数据对应的覆盖信息,根据覆盖信息生成增量代码覆盖率数据。
在其中一个实施例中,处理执行机还用于遍历版本差异化数据的每一行,并确定版本差异化数据的每一行在全量单元测试覆盖率报告中的覆盖信息;基于每一行代码的覆盖信息得到版本差异化数据的覆盖信息。
在其中一个实施例中,分析服务器集群还用于遍历分析服务器集群中各个处于工作状态的服务器的当前处理压力;均衡当前处理压力以选取当前处理压力最小的服务器作为处理服务器。
在其中一个实施例中,分析服务器集群还用于判断各个处于工作状态的服务器的当前处理压力是否均大于第一预设值;若是,则启动分析服务器集群中新的服务器作为处理服务器。
在其中一个实施例中,分析服务器集群还用于遍历分析服务器集群中各个服务器的状态;将状态为不可用的服务器进行剔除,并获取状态为工作状态的服务器的当前处理压力。
在其中一个实施例中,执行机集群还用于执行机集群获取当前执行机集群中的执行机的资源占用率;当资源占用率均高于第二预设值时,则增加云服务器或虚拟机作为处理执行机。
在其中一个实施例中,执行机集群还用于当存在资源占用率小于等于第二预设值的执行机时,则从资源占用率小于等于第二预设值的执行机中选取资源占用率最低的执行机作为处理执行机。
关于增量代码覆盖率测试系统的具体限定可以参见上文中对于增量代码覆盖率测试方法的限定,在此不再赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (10)

1.一种增量代码覆盖率测试方法,所述方法包括:
分析服务器集群接收代码管理服务器发送的代码变更通知,并通过负载均衡算法从所述分析服务器集群中选取处理服务器;
所述处理服务器根据所述代码变更通知,生成增量代码覆盖率测试任务,将增量代码覆盖率测试任务发送到消息队列中;
执行机集群根据当前所述执行机集群中的执行机的资源占用率选取处理执行机;
所述处理执行机从所述消息队列中获取增量代码覆盖率测试任务,并执行所述增量代码覆盖率测试任务得到全量单元测试覆盖率报告和版本差异化数据,根据所述版本差异化数据查询所述全量单元测试覆盖率报告得到与所述版本差异化数据对应的增量代码覆盖率数据,并将所述增量代码覆盖率数据返回给所述处理服务器;
所述处理服务器存储所接收的所述增量代码覆盖率数据。
2.根据权利要求1所述的方法,其特征在于,所述执行所述增量代码覆盖率测试任务得到全量单元测试覆盖率报告和版本差异化数据,根据所述版本差异化数据查询所述全量单元测试覆盖率报告得到与所述版本差异化数据对应的增量代码覆盖率数据,包括:
从所述代码管理服务器下载源代码,并获取所述源代码的版本信息;
基于所述版本信息从所述代码管理服务器下载与上一个版本比对得到的版本差异化数据;
对所述源代码进行全量单元测试得到全量单元测试覆盖率报告;
根据所述版本差异化数据和所述全量单元测试覆盖率报告得到所述版本差异化数据对应的覆盖信息,根据所述覆盖信息生成增量代码覆盖率数据。
3.根据权利要求2所述的方法,其特征在于,所述根据所述版本差异化数据和所述全量单元测试覆盖率报告得到所述版本差异化数据对应的覆盖信息,包括:
遍历版本差异化数据的每一行,并确定版本差异化数据的每一行在所述全量单元测试覆盖率报告中的覆盖信息;
基于每一行代码的覆盖信息得到所述版本差异化数据的覆盖信息。
4.根据权利要求1至3任意一项所述的方法,其特征在于,所述通过负载均衡算法从所述分析服务器集群中选取处理服务器,包括:
遍历所述分析服务器集群中各个处于工作状态的服务器的当前处理压力;
均衡所述当前处理压力以选取所述当前处理压力最小的服务器作为处理服务器。
5.根据权利要求4所述的方法,其特征在于,所述均衡所述当前处理压力以选取所述当前处理压力最小的服务器作为处理服务器之前,还包括:
判断各个处于工作状态的服务器的当前处理压力是否均大于第一预设值;
若是,则启动所述分析服务器集群中新的服务器作为处理服务器。
6.根据权利要求4所述的方法,其特征在于,所述遍历所述分析服务器集群中各个处于工作状态的服务器的当前处理压力,包括:
遍历所述分析服务器集群中各个服务器的状态;
将状态为不可用的服务器进行剔除,并获取状态为工作状态的服务器的当前处理压力。
7.根据权利要求1至3任意一项所述的方法,其特征在于,所述执行机集群根据当前所述执行机集群中的执行机的资源占用率选取处理执行机,包括:
执行机集群获取当前所述执行机集群中的执行机的资源占用率;
当所述资源占用率均高于第二预设值时,则增加云服务器或虚拟机作为处理执行机。
8.根据权利要求7所述的方法,其特征在于,所述执行机集群获取当前所述执行机集群中的执行机的资源占用率之后,还包括:
当存在资源占用率小于等于第二预设值的执行机时,则从资源占用率小于等于第二预设值的执行机中选取资源占用率最低的执行机作为处理执行机。
9.一种增量代码覆盖率测试系统,其特征在于,所述系统包括代码管理服务器、分析服务器集群以及执行机集群:
所述分析服务器集群,用于接收代码管理服务器发送的代码变更通知,并通过负载均衡算法从所述分析服务器集群中选取处理服务器;
所述处理服务器,用于根据所述代码变更通知,生成增量代码覆盖率测试任务,将增量代码覆盖率测试任务发送到消息队列中;
所述执行机集群,用于根据当前所述执行机集群中的执行机的资源占用率选取处理执行机;
所述处理执行机,用于从所述消息队列中获取增量代码覆盖率测试任务,并执行所述增量代码覆盖率测试任务得到全量单元测试覆盖率报告和版本差异化数据,根据所述版本差异化数据查询所述全量单元测试覆盖率报告得到与所述版本差异化数据对应的增量代码覆盖率数据,并将所述增量代码覆盖率数据返回给所述处理服务器;
所述处理服务器还用于存储所接收的所述增量代码覆盖率数据。
10.根据权利要求9所述的系统,其特征在于,所述处理执行机还用于从所述代码管理服务器下载源代码,并获取所述源代码的版本信息;基于所述版本信息从所述代码管理服务器下载与上一个版本比对得到的版本差异化数据;对所述源代码进行全量单元测试得到全量单元测试覆盖率报告;根据所述版本差异化数据和所述全量单元测试覆盖率报告得到所述版本差异化数据对应的覆盖信息,根据所述覆盖信息生成增量代码覆盖率数据。
CN201910778581.4A 2019-08-22 2019-08-22 增量代码覆盖率测试方法及系统 Pending CN110633208A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910778581.4A CN110633208A (zh) 2019-08-22 2019-08-22 增量代码覆盖率测试方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910778581.4A CN110633208A (zh) 2019-08-22 2019-08-22 增量代码覆盖率测试方法及系统

Publications (1)

Publication Number Publication Date
CN110633208A true CN110633208A (zh) 2019-12-31

Family

ID=68970705

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910778581.4A Pending CN110633208A (zh) 2019-08-22 2019-08-22 增量代码覆盖率测试方法及系统

Country Status (1)

Country Link
CN (1) CN110633208A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112559348A (zh) * 2020-12-15 2021-03-26 广州云从鼎望科技有限公司 基于jacoco的测试分析方法、系统、设备以及介质
CN112799742A (zh) * 2021-02-09 2021-05-14 上海海事大学 一种基于微服务的机器学习实训系统及方法
CN113032281A (zh) * 2021-04-29 2021-06-25 中国工商银行股份有限公司 一种代码覆盖率实时获取方法及装置
CN113535533A (zh) * 2020-04-15 2021-10-22 百度在线网络技术(北京)有限公司 用于测试代码的方法、装置、设备以及存储介质
CN117112398A (zh) * 2023-07-11 2023-11-24 贝壳找房(北京)科技有限公司 增量代码覆盖率检测方法、装置、电子设备及存储介质
WO2023229086A1 (ko) * 2022-05-27 2023-11-30 쿠팡 주식회사 코드 커버리지 정보 제공 방법 및 이를 위한 전자 장치
CN113032281B (zh) * 2021-04-29 2024-04-19 中国工商银行股份有限公司 一种代码覆盖率实时获取方法及装置

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103678133A (zh) * 2013-12-18 2014-03-26 中国科学院深圳先进技术研究院 一种用于应用软件云测试的任务调度系统
CN106201863A (zh) * 2016-06-22 2016-12-07 广州唯品会信息科技有限公司 一种获取代码覆盖率的方法和装置
CN106933736A (zh) * 2015-12-31 2017-07-07 中移(苏州)软件技术有限公司 一种项目持续集成的方法和系统
CN107480066A (zh) * 2017-08-18 2017-12-15 网易(杭州)网络有限公司 代码覆盖率统计方法、装置、存储介质、处理器和终端
CN107608897A (zh) * 2017-09-26 2018-01-19 郑州云海信息技术有限公司 一种分布式集群的测试方法及系统
WO2018014580A1 (zh) * 2016-07-20 2018-01-25 平安科技(深圳)有限公司 数据接口测试方法、装置、服务器和存储介质
CN108197036A (zh) * 2018-02-06 2018-06-22 百度在线网络技术(北京)有限公司 用于确定增量代码的覆盖率信息的方法和装置
CN109582466A (zh) * 2017-09-29 2019-04-05 北京金山软件有限公司 一种定时任务执行方法、分布式服务器集群及电子设备

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103678133A (zh) * 2013-12-18 2014-03-26 中国科学院深圳先进技术研究院 一种用于应用软件云测试的任务调度系统
CN106933736A (zh) * 2015-12-31 2017-07-07 中移(苏州)软件技术有限公司 一种项目持续集成的方法和系统
CN106201863A (zh) * 2016-06-22 2016-12-07 广州唯品会信息科技有限公司 一种获取代码覆盖率的方法和装置
WO2018014580A1 (zh) * 2016-07-20 2018-01-25 平安科技(深圳)有限公司 数据接口测试方法、装置、服务器和存储介质
CN107480066A (zh) * 2017-08-18 2017-12-15 网易(杭州)网络有限公司 代码覆盖率统计方法、装置、存储介质、处理器和终端
CN107608897A (zh) * 2017-09-26 2018-01-19 郑州云海信息技术有限公司 一种分布式集群的测试方法及系统
CN109582466A (zh) * 2017-09-29 2019-04-05 北京金山软件有限公司 一种定时任务执行方法、分布式服务器集群及电子设备
CN108197036A (zh) * 2018-02-06 2018-06-22 百度在线网络技术(北京)有限公司 用于确定增量代码的覆盖率信息的方法和装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
斯兰: "基于DAG的分布式任务调度平台-Maat", 《HTTPS://DEVELOPER.ALIYUN.COM/ARTICLE/609299》 *
管增辉, 中国铁道出版社 *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113535533A (zh) * 2020-04-15 2021-10-22 百度在线网络技术(北京)有限公司 用于测试代码的方法、装置、设备以及存储介质
CN113535533B (zh) * 2020-04-15 2024-04-05 百度在线网络技术(北京)有限公司 用于测试代码的方法、装置、设备以及存储介质
CN112559348A (zh) * 2020-12-15 2021-03-26 广州云从鼎望科技有限公司 基于jacoco的测试分析方法、系统、设备以及介质
CN112559348B (zh) * 2020-12-15 2021-09-14 广州云从鼎望科技有限公司 基于jacoco的测试分析方法、系统、设备以及介质
CN112799742A (zh) * 2021-02-09 2021-05-14 上海海事大学 一种基于微服务的机器学习实训系统及方法
CN112799742B (zh) * 2021-02-09 2024-02-13 上海海事大学 一种基于微服务的机器学习实训系统及方法
CN113032281A (zh) * 2021-04-29 2021-06-25 中国工商银行股份有限公司 一种代码覆盖率实时获取方法及装置
CN113032281B (zh) * 2021-04-29 2024-04-19 中国工商银行股份有限公司 一种代码覆盖率实时获取方法及装置
WO2023229086A1 (ko) * 2022-05-27 2023-11-30 쿠팡 주식회사 코드 커버리지 정보 제공 방법 및 이를 위한 전자 장치
CN117112398A (zh) * 2023-07-11 2023-11-24 贝壳找房(北京)科技有限公司 增量代码覆盖率检测方法、装置、电子设备及存储介质
CN117112398B (zh) * 2023-07-11 2024-04-16 贝壳找房(北京)科技有限公司 增量代码覆盖率检测方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN110633208A (zh) 增量代码覆盖率测试方法及系统
US8205115B2 (en) System and method for testing a computer
CN112256417B (zh) 一种数据请求处理方法、装置及计算机可读存储介质
CN111813805A (zh) 一种数据处理方法及装置
CN111708586B (zh) 应用启动配置项加载方法、装置、计算机设备和存储介质
CN111309372A (zh) 定时任务执行方法、装置、计算机设备和存储介质
CN110995825B (zh) 一种智能合约的发布方法、智能节点设备及存储介质
CN110765026A (zh) 自动化测试方法、装置、存储介质及设备
CN110781214A (zh) 数据库读写方法、装置、计算机设备和存储介质
CN107798030B (zh) 数据表的拆分方法和装置
CN109726134B (zh) 接口测试方法和系统
CN110855477A (zh) 链路日志监控方法、装置、计算机设备和存储介质
CN112380130A (zh) 基于调用依赖关系的应用测试方法和装置
CN112527357A (zh) 服务热加载更新方法、装置、计算机设备和存储介质
CN111221653A (zh) 一种服务处理方法、装置及计算机可读存储介质
CN111382012B (zh) MySQL云数据库的备份方法、装置、计算机设备和存储介质
CN115858473B (zh) 基于训练系统与对象存储系统的数据交互方法及装置
US20210224108A1 (en) Method for executing task by scheduling device, and computer device and storage medium
US20230164042A1 (en) Component-based risk evaluation techniques using processing flow signatures
US9442741B2 (en) Method, terminal, server, and system for data processing
CN109582572A (zh) 一种判断可管理程序在多次执行中进入稳定阶段的方法
CN110928779B (zh) 文件处理方法、应用程序运行故障定位方法和设备
CN109901998B (zh) 资源回收方法、装置、系统、计算机设备和存储介质
CN113918345A (zh) 一种配置硬件的容量计算方法、装置、计算机设备及介质
CN114691445A (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20191231