CN103095518B - 覆盖率测试处理方法、装置、覆盖率测试服务器及系统 - Google Patents
覆盖率测试处理方法、装置、覆盖率测试服务器及系统 Download PDFInfo
- Publication number
- CN103095518B CN103095518B CN201110351665.3A CN201110351665A CN103095518B CN 103095518 B CN103095518 B CN 103095518B CN 201110351665 A CN201110351665 A CN 201110351665A CN 103095518 B CN103095518 B CN 103095518B
- Authority
- CN
- China
- Prior art keywords
- coverage rate
- rate test
- server
- result
- test server
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请公开了覆盖率测试处理方法、装置、覆盖率测试服务器及系统。该覆盖率测试处理方法包括以下步骤:接收一个或多个覆盖率测试服务器上报的该覆盖率测试服务器执行的覆盖率测试的结果,其中,覆盖率测试服务器用于测试待测代码中的部分代码的覆盖率;对接收到的覆盖率测试的结果进行归并,生成测试报告。本申请在一定程度上提高了项目整体在平台上的稳定性,降低了该项目平台出现故障的概率。
Description
技术领域
本申请涉及测试领域,具体而言,涉及一种覆盖率测试处理方法、装置、覆盖率测试服务器及系统。
背景技术
在开发人员进行开发的过程中,需要对已经开发完成的代码进行测试,其中包括覆盖率测试。覆盖率测试用于测试多少代码被测试过,多少代码没有被测试过。这样就有利于开发人员了解到还有多少代码处于未测试状态。
在现有技术中,对于不同的编程语言完成的代码有不同的覆盖率测试工具,例如,Cobertura(在西班牙文中,Cobertura用于表示覆盖的意思)是一款基于jcoverage的java工具,该工具可以计算有多少比率的代码被测试走过,从而可以向开发者提供哪部分java程序缺乏测试;对于java而言,不仅仅只有这一种测试工具,例如,Emma也是一款java的覆盖率测试工具。对于其他编程语言而言也有其相应的测试工具,例如,对于PHP语言而言,其可以通过PHP Unit来进行覆盖率测试等等。由于覆盖率测试工具的工作原理有类似之处,因此,以下虽然以Coberura为例进行说明,但是并不限于此,对于其他类型的编程语言的覆盖率测试或者对于java语言的其他覆盖率测试工具同样存在下文所描述的问题。
Cobertura将额外的语句记录在执行测试包,通过这种方式来度量字节码,可以获取到哪些行被测试到、哪些行没有被测试到。在测试全部完毕之后,可以生成一个测试报告,指出代码中的哪些包、哪些类、哪些方法和哪些行没有被测试到,以便于针对这些特定的区域编写更多的测试代码,以发现更多隐藏的问题。
随着软件开发项目的日益增大,一个项目往往有几十甚至几百个开发者来共同完成,但是,不同的开发者仅对自己所开发的代码进行覆盖率测试,即该覆盖率测试是每部分单独进行的。这对于项目而言,无法得到其整体的覆盖率。这样,由于不确定有多少代码未被测试过,因此也无法预计存在多少隐藏的问题,在这种情况下,如果该项目上线,就有可能导致出现各种软件和/或硬件故障,使得该项目的平台不够稳定,甚至有可能使该项目平台出现严重的故障。
发明内容
本申请的主要目的在于提供一种覆盖率测试处理方法、装置、覆盖率测试服务器及系统,以至少解决上述问题。
根据本申请的一个方面,提供了一种覆盖率测试处理方法,包括以下步骤:接收一个或多个覆盖率测试服务器上报的该覆盖率测试服务器执行的覆盖率测试的结果,其中,所述覆盖率测试服务器用于测试待测代码中的部分代码的覆盖率;对接收到的覆盖率测试的结果进行归并,生成测试报告。
优选地,在接收到所述一个或多个覆盖率测试服务器上报的该覆盖率测试服务器执行的覆盖率测试的结果之前,所述方法还包括:向所述一个或多个覆盖率测试服务器发送消息,其中,所述消息用于指示接收到该消息的覆盖率测试服务器上报该覆盖率测试服务器执行的覆盖率测试的结果;和/或,所述一个或多个覆盖率测试服务器定期上报该覆盖率测试服务器执行的覆盖率测试的结果。
优选地,所述覆盖率测试服务器上报该覆盖率测试服务器执行的覆盖率测试的结果包括:所述覆盖率测试服务器根据所述消息中携带的时间信息或所述覆盖率测试服务器本地配置的时间信息上报在所述时间信息对应时间段内执行覆盖率测试得到的结果;和/或,所述覆盖率测试服务器根据所述消息中携带的代码信息或所述覆盖率测试服务器本地配置的代码信息上报对所述代码信息对应的代码执行覆盖率测试得到的结果。
优选地,所述覆盖率测试服务器上报该覆盖率测试服务器执行的覆盖率测试的结果包括:所述覆盖率测试服务器确定在执行覆盖率测试的过程中需要上报覆盖率测试结果;所述覆盖率测试服务器上报已经执行完毕的该覆盖率测试的结果。
优选地,所述方法还包括:所述覆盖率测试服务器在执行所述覆盖率测试的过程中周期性的发送心跳消息,其中,所述心跳消息用于对所述覆盖率测试服务器进行保活。
优选地,所述方法还包括:向所述一个或多个覆盖率测试服务器发送清空消息,其中,所述清空消息用于指示所述清空消息的接收方在接收到该清空消息之后,对本地保存的覆盖率测试的结果进行清空。
优选地,所述方法还包括:向所述一个或多个覆盖率测试服务器发送测试命令,其中,所述测试命令中携带有需要执行覆盖率测试的时间信息和/或代码信息。
优选地,所述覆盖率测试服务器执行的覆盖率测试包括:覆盖率测试服务器通过对指定的字节码插桩和/或对字节码所引用的代码对应的字节码进行插桩执行覆盖率测试。
优选地,所述对接收到的覆盖率测试的结果进行归并是通过对对应覆盖率信息的字节码对象进行归并完成。
根据本申请的另一个方面,提供了一种覆盖率测试处理装置,包括:接收模块,用于接收一个或多个覆盖率测试服务器上报的该覆盖率测试服务器执行的覆盖率测试的结果,其中,所述覆盖率测试服务器用于测试待测代码中的部分代码的覆盖率;生成模块,用于对接收到的覆盖率测试的结果进行归并,生成测试报告。
优选地,所述装置还包括:第一发送模块,用于向所述一个或多个覆盖率测试服务器发送消息,其中,所述消息用于指示接收到该消息的覆盖率测试服务器上报该覆盖率测试服务器执行的覆盖率测试的结果,所述消息中携带有时间信息和/或代码信息,所述时间信息用于指示所述覆盖率测试服务器上报在该时间信息对应时间段内执行覆盖率测试得到的结果,所述代码信息用于指示所述覆盖率测试服务器上报对该代码信息对应的代码所执行的覆盖率测试得到的结果。
优选地,所述装置还包括:第二发送模块,用于向所述一个或多个覆盖率测试服务器发送清空消息,其中,所述清空消息用于指示所述清空消息的接收方在接收到该清空消息之后,对本地保存的覆盖率测试的结果进行清空。
优选地,所述装置还包括:第三发送模块,用于向所述一个或多个覆盖率测试服务器发送测试命令,其中,所述测试命令中携带有需要执行覆盖率测试的时间信息和/或代码信息。
根据本申请的另一方面,还提供了一种覆盖率测试服务器,包括:执行模块,用于执行待测代码中的部分代码的覆盖率测试;上报模块,用于根据接收到的用于指示上报覆盖率测试结果的消息和/或本地的配置信息上报覆盖率测试的结果。
优选地,所述上报模块包括:第一上报模块,用于根据所述消息中携带的时间信息或所述覆盖率测试服务器本地配置的时间信息上报在所述时间信息对应时间段内执行覆盖率测试得到的结果;和/或,第二上报模块,用于根据所述消息中携带的代码信息或所述覆盖率测试服务器本地配置的代码信息上报对所述代码信息对应的代码执行覆盖率测试得到的结果。
优选地,所述上报模块,用于在所述执行模块执行覆盖率测试的过程中需要上报覆盖率测试结果时,上报已经执行完毕的该覆盖率测试的结果。
优选地,所述上报模块用于在执行所述覆盖率测试的过程中周期性的发送心跳消息,其中,所述心跳消息用于对所述覆盖率测试服务器进行保活。
优选地,所述执行模块用于通过对指定的字节码插桩和/或对字节码所引用的代码对应的字节码进行插桩执行覆盖率测试。
根据本申请的再一个方面,还提供了一种覆盖率测试系统,包括上述覆盖率测试处理装置,以及,一个或多个上述的覆盖率测试服务器。
通过本申请,采用接收一个或多个覆盖率测试服务器上报的该覆盖率测试服务器执行的覆盖率测试的结果;对接收到的覆盖率测试的结果进行归并,生成测试报告。解决了现有技术中无法得到项目整体的覆盖率而有可能导致该项目稳定性不够甚至使该项目的平台出现严重故障的问题,在一定程度上提高了项目整体在平台上的稳定性,降低了该项目平台出现故障的概率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的覆盖率测试的架构示意图;
图2是根据本申请实施例的覆盖率测试处理方法的流程图;
图3是根据本申请实施例的覆盖率测试处理装置的结构框图;
图4是根据本申请实施例的覆盖率测试处理装置优选的结构框图;
图5是根据本申请实施例的覆盖率测试处理装置另一优选的结构框图;
图6是根据本申请实施例中的覆盖率测试处理装置的再一优选的结构框图;
图7是根据本申请实施例的覆盖率测试服务器的结构框图;
图8是根据本申请实施例的覆盖率测试服务器的优选结构框图;
图9是根据本申请优选实施例的覆盖率测试系统的示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
图1是根据本申请实施例的覆盖率测试的架构示意图,出于描述的目的,图1所绘的体系结构仅为本申请实施例适用环境的一个示例,并非对本申请的使用范围或功能的任何局限。本申请的原理可以使用其它通用或专用计算或通信环境或配置来操作。适用于本申请的众所周知的计算系统、环境和配置的示例包括但不限于,个人计算机、服务器,多处理器系统、基于微处理的系统、小型机、大型计算机、以及包括任一上述系统或设备的分布式计算环境。下面以图1中的架构为例进行说明,如图1所示,在该架构包括一个或多个覆盖率测试服务器10和覆盖率测试处理装置12,该覆盖率测试处理装置12与一个或多个覆盖率测试服务器10连接,需要说明的是,覆盖率测试处理装置12可以与覆盖率测试服务器10通信即可,因此,此处的连接包括但是不限于:覆盖率测试处理装置12与覆盖率测试服务器10的直接连接、或者通过其他中间网元连接,有线连接、或者无线连接等等。
对于覆盖率测试服务器10可以根据不同的编程语言来选择使用现有的覆盖率测试方法或者工具,因此,在以下实施例中,对于这些单个覆盖率测试服务器10进行覆盖率测试的具体实施方式不再赘述。对于覆盖率测试处理装置12,其可以位于一个或多个单独的物理服务器中,也可以作为功能模块位于现有的提供其他服务功能的服务器中,具体的应用可以根据网络环境的不同和/或对覆盖率测试处理装置12的要求的不同来进行选择。
图2是根据本申请实施例的覆盖率测试处理方法的流程图,下面结合图1中所示出的架构对图2进行说明,如图2所示,该流程包括以下步骤:
步骤S202,接收一个或多个覆盖率测试服务器10上报的该覆盖率测试服务器10执行的覆盖率测试的结果,其中,每个覆盖率测试服务器用于测试待测代码中的部分代码的覆盖率;
步骤S204,对接收到的覆盖率测试的结果进行归并,生成测试报告。
通过上述步骤,可以对各个覆盖率测试服务器10上的测试结果进行归并,生成测试报告。从而可以得到一个比较完整的覆盖率测试报告。有助于了解某个项目的整体或者某个项目中的一个功能模块整体的覆盖率测试结果,为提高测试的覆盖率提供了保证,在一定程度上减少了隐藏问题的发生,提高了项目平台的运营的稳定性。
通过上述步骤可以看出,在本实施例中提出了分布式覆盖率测试。在现有的技术中,覆盖率测试均只提供单机上运行的版本。这样对于软件开发人员而言,其受到了现有技术中的覆盖率测试技术的限制,只能在单机上进行测试。虽然分布式的概念在其他领域中可能也存在,但是对于覆盖率测试而言,并没有任何一种现有的技术暗示或者明示对于覆盖率测试可以进行分布式的覆盖率测试。
在现有技术中,如果需要对一个项目的整体进行覆盖率测试,那么其也只是将该项目的所有代码集中在一台覆盖率测试服务器上,即各个部分的代码的覆盖率测试和项目整体的覆盖率测试是分开进行的。通过图2中所示的步骤,实现了归并的过程,即可以在单个覆盖率测试服务器执行部分代码的覆盖率测试之后,就可以通过归并的动作来掌控整个项目或者多个项目的整体覆盖率测试结果。相比与将一个项目的所有代码集中在一台覆盖率测试服务器上的做法,提升了测试的效率。
在实施时,对于需要归并测试结果的覆盖率测试服务器可以根据实际的需要进行设置。
例如,对于一个项目A而言,全部的覆盖率测试服务器包括A1-A10这十台覆盖率测试服务器,其中的A1至A3执行功能模块B1的覆盖率测试,A4至A6执行功能模块B2的覆盖率测试,其他的执行功能模块A3的覆盖率测试。如果需要B1和B2的总的覆盖率测试结果,那么可以归并A1至A6的测试结果,如果需要整个项目的覆盖率信息,则可以归并A1至A10的测试结果。
又例如,一个项目可以拆分成两个部分,分别在两台覆盖率测试服务器上运行覆盖率测试,在收集覆盖率统计信息时,可以把这两台机器上的数据均进行收集。为了描述方便,将覆盖率测试处理装置称为服务器端,而将覆盖率测试服务器称为客户端。在本优选示例中,服务器端可以发送命令通知客户端需要收集当前的数据,客户端收到该命令后可以先锁定客户端的收集容器(该锁定的目的是为了避免脏数据的产生),并把收集容器的数据直接转换成一份拥有此项目包和类的详细结构和对应覆盖率信息的字节码对象,传输到服务器端,当服务器端获取到这两台测试机器的字节码对象后,对字节码对象的信息进行归并(例如,可以以其中一个字节码对象为基础,把第二个字节码对象的信息读取出来,然后判断第一个字节码对象是否存在第二字节码对象的信息,如果不存在就加入,如果存在可以根据信息的种类来判断是否需要叠加。当然,归并的方式并不局限于这一种,可以根据覆盖率测试结果的格式来选择不同的归并方式)。在某些编程语言中(例如,java),因为字节码对象的层次比较清晰,覆盖率信息可以按照语言中包的组织结构来进行收集(例如,如果该编程语言包的组织结构是树形结构,那么只要遍历包中的类来逐个收集覆盖率即可),即对于覆盖率测试结果的归并可以根据不同编程语言的项目中的结构来进行。
上述两个例子是以同一个项目为例进行的说明,但是,并不限于此,本申请中涉及到的实施例及优选的实施方式,也同样适用于对不同项目的覆盖率进行归并,在实现上与对同一个项目的归并实现方式一致,对于不同的项目可以设置不同的标识以便能够区分项目。当然,也可以不用对项目进行标识,因为对于某些编程语言而言,代码的命名足以区分各个代码所属的项目。对于不同项目之间的覆盖率的归并意义比较深远,因为把不同项目的覆盖率进行统一的统计,就可以从更大的范围来对比覆盖率的结果,例如,按照产品线来统计,按照部门来统计,这样可以从多个维度来体现覆盖率的信息,更优地,还可以生成一致风格的覆盖率报告。无论上述的哪一点均是现有的技术所不可能完成的。
对于覆盖率测试服务器10何时上报,在本实施例中提供了两种优选的方式:
方式一,可以向一个或多个覆盖率测试服务器10发送消息,该消息用于指示接收到该消息的覆盖率测试服务器10上报该覆盖率测试服务器10执行的覆盖率测试的结果。这种方式,可以更好的利用覆盖率测试处理装置12,使该装置可以完全掌握什么时候需要覆盖率测试服务器进行上报。在该优选的方式中,并不需要覆盖率测试服务器10随时上报测试结果,而是在覆盖率测试处理装置12需要时再通知覆盖率测试服务器10来进行上报,相比于覆盖率测试服务器定时上报的处理方式,一方面节约了覆盖率测试服务器10和覆盖率测试处理装置12之间的带宽资源,另一方面,也降低了覆盖率测试处理装置12处理测试结果的负荷。但是,这种方式有可能收集到的信息不足够,例如,覆盖率测试服务器在10:00和12:00分别进行了覆盖率测试,覆盖率测试处理装置12要求上报测试结果,但是,由于覆盖率测试服务器已经在12:00又进行了一次测试,其有可能会根据自身的策略将10:00得到的测试结果删除。此时,如果覆盖率测试处理装置12需要10:00的测试结果,将无法获取到。当然,解决该问题,有一个比较简单的处理方式,即可以在覆盖率测试服务器10上保存所有的测试结果,由于覆盖率测试服务器10还要执行保存代码、运行代码、运行覆盖率测试工具等功能,因此,如果还需要在该服务器上保存所有的测试结果,那么对于覆盖率测试服务器10的要求就比较高了。
在这种方式下,作为一个比较优的实施方式,覆盖率测试服务器10可以向覆盖率测试处理装置12提供可以获取到覆盖率测试结果的地址信息,这样,覆盖率测试处理装置12可以从覆盖率测试服务器10上主动获取到该覆盖率测试结果,这种模式可以称为拉模式。
方式二,覆盖率测试服务器10可以定期上报该覆盖率测试服务器执行的覆盖率测试的结果。例如,可以在每一次覆盖率测试执行完毕之后均上报,这样的处理方式,相对于方式一,可以使覆盖率测试服务器10掌握更大的灵活度,开发人员可以根据不同的覆盖率测试服务器所测试的代码的不同来设置不同的定期上报策略。例如,可以每隔3秒,被测代码会自动采用类似心跳消息一样处理方式将覆盖率信息推送到收集覆盖率信息的平台上(例如,覆盖率测试处理装置12),这种模式可以称为推模式。
对于上述两种方式,在实际实施时,可以单独使用也可以结合起来使用。为了更加方便的在覆盖率测试服务器上获取测试结果,可以在覆盖率测试服务器上提供开放的接口。当然,也可以在覆盖率测试处理装置上提供开放的接口,这两个接口均可以被其他的平台进行调用,这样对于与其他平台或者应用的整合将提供较大的便利。
无论对于上述哪种上报方式,均可以根据时间信息和/或代码信息来进行上报,例如,覆盖率测试服务器10可以根据接收到的来自覆盖率测试处理装置12的消息中携带的时间信息或覆盖率测试服务器10本地配置的时间信息上报在该时间信息对应的时间段内执行覆盖率测试得到的结果;又例如,覆盖率测试服务器10还可以根据该消息中携带的代码信息或覆盖率测试服务器10本地配置的代码信息上报对代码信息对应的代码执行覆盖率测试得到的结果。通过消息发送时间信息和代码信息的方式可以使覆盖率测试处理装置12更容易对覆盖率测试服务器10进行集中控制。而通过覆盖率测试服务器自行上报的方式,可以使覆盖率测试服务器的上报更加符合该覆盖率测试服务器所执行的测试的上报要求。这些优选的实施方式均可以根据实际的需要进行不同的组合。
对于覆盖率测试服务器上所执行的测试工具而言,在现有技术中,一般是在执行完所有的待测试的代码才会返回测试结果,例如,在现有的Cobertura实现中,插桩完毕后的代码在测试完毕后才能生成相应的覆盖率信息,也就意味着不能在测试中实时的获取覆盖率信息,并进行有效的覆盖率报告生成;如果只能得到最终测试状态的覆盖率结果会使得代码覆盖率有一定的欺骗性。在实际实施时,对于有可能需要在测试过程中实时的得到测试结果的情况,在本实施例提供了一种较优的实施方式,在该优选实施方式中,覆盖率测试服务器10如果在执行覆盖率测试的过程中确定需要上报覆盖率测试结果(例如,根据覆盖率测试处理装置12的通知,或者根据本地的配置确定需要上报覆盖率测试结果);可以上报已经执行完毕的该覆盖率测试的结果。例如,如果覆盖率测试服务器10正在执行测试,在此时接收到来自覆盖率测试处理装置12的消息或者根据其本地的配置需要上报测试结果,覆盖率测试服务器10可以暂停当前所进行的测试,将已经执行完毕的测试结果进行上报。当然,在上报完毕之后可以继续当前的测试。通过这种方式,可以更加实时的得到测试结果。
作为一个优选实施例,覆盖率测试服务器10在执行覆盖率测试的过程中周期性的发送心跳消息,其中,该心跳消息起到保活的目的,通过保活可以使覆盖率测试处理装置12了解到哪个覆盖率测试服务器是正常工作的。覆盖率测试处理装置12通过该心跳消息实现了对覆盖率测试服务器的实时监控,如果覆盖率测试处理装置12在预定时长内未接收到某个覆盖率测试服务器的心跳消息,则可以认为是该服务器出了故障,从而可进行告警等处理。
更优地,该心跳消息还可以上报以下信息的至少之一:正在测试的代码、IP地址和/或端口、正在测试的项目信息等。通过心跳消息上报IP地址和/或端口,可以使覆盖率测试处理装置得知哪些覆盖率测试服务器保持连接,从而可以避免保留一些已经断开的覆盖服务器的连接地址。
为了使覆盖率测试处理装置12更好的对覆盖率测试服务器10进行控制,在本实施例中还提供了另外两种优选的实施方式,这两种实施方式可以单独使用,也可以结合使用。
方式一,覆盖率测试处理装置12可以向一个或多个覆盖率测试服务器10发送清空消息,其中,该清空消息用于指示清空消息的接收方在接收到该清空消息之后,对本地保存的覆盖率测试的结果进行清空。通过该优选方式,一方面,可以减少覆盖率测试服务器10上所保存的信息容量,另一方面,还可以在重新测试该部分代码时避免测试信息的叠加。
方式二,覆盖率测试处理装置12还可以向一个或多个覆盖率测试服务器10发送测试命令,其中,该测试命令中携带有需要执行覆盖率测试的时间信息和/或代码信息。更优地,该测试命令可以与用于指示覆盖率测试服务器上报覆盖率测试结果的消息结合使用,从而可以使覆盖率测试处理装置12对覆盖率测试服务器10的控制更加灵活。
在本实施例中对于覆盖率测试服务器10,可以采用插桩的方式来进行,插桩是一种现有的处理方式,在本实施例中不再赘述。但是,现有的插桩处理中,并不能实现嵌套处理。在本实施例中,覆盖率测试服务器可以通过对字节码所引用的代码对应的字节码进行插桩执行覆盖率测试。这样实现了覆盖率测试的嵌套执行。通过对所应用的代码对应的字节码进行插桩和对字节码直接插桩的方式相结合,可以使覆盖率测试覆盖面更广。
通过上述实施例及优选实施方式,可以对分散在各个覆盖率测试服务器上正在测试的代码进行实时覆盖率监控,此外,还可以实现自动化的清空、收集等功能。需要说明的,这些优点是某些优选实施方式才具有的,对于实施上述任一优选实施方式并不一定需要同时达到这些优点。
下面对上述的覆盖率测试处理装置12中涉及到的模块进行说明,如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图3是根据本申请实施例的覆盖率测试处理装置的结构框图,如图3所示,该结构包括:接收模块32和生成模块34,下面对该结构进行详细的说明。
接收模块32,用于接收一个或多个覆盖率测试服务器上报的该覆盖率测试服务器执行的覆盖率测试的结果,其中,覆盖率测试服务器用于测试待测代码中的部分代码的覆盖率;生成模块34,该模块连接至接收模块32,用于对接收到的覆盖率测试的结果进行归并,生成测试报告。
图4是根据本申请实施例的覆盖率测试处理装置优选的结构框图,如图4所示,该装置还包括:第一发送模块42,该模块用于向一个或多个覆盖率测试服务器发送消息,其中,该消息用于指示接收到该消息的覆盖率测试服务器上报该覆盖率测试服务器执行的覆盖率测试的结果。作为一个较优的实施方式,在该消息中可以携带有时间信息和/或代码信息,该时间信息用于指示覆盖率测试服务器上报在该时间信息对应时间段内执行覆盖率测试得到的结果,该代码信息用于指示覆盖率测试服务器上报对该代码信息对应的代码所执行的覆盖率测试得到的结果。
图5是根据本申请实施例的覆盖率测试处理装置另一优选的结构框图,如图5所示,该装置还包括:第二发送模块52,用于向一个或多个覆盖率测试服务器发送清空消息,其中,该清空消息用于指示该清空消息的接收方在接收到该清空消息之后,对本地保存的覆盖率测试的结果进行清空。
图6是根据本申请实施例中的覆盖率测试处理装置的再一优选的结构框图,如图6所示,该装置还包括:第三发送模块62,用于向一个或多个覆盖率测试服务器发送测试命令,其中,该测试命令中携带有需要执行覆盖率测试的时间信息和/或代码信息。
需要说明的是,上述图4、图5和图6中所示出的优选的结构可以单独实施,也可以一起实施。
下面对上述的覆盖率测试服务器10中涉及到的模块进行说明,同样,如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图7是根据本申请实施例的覆盖率测试服务器的结构框图,如图7所示,该结构包括:执行模块72和上报模块74,下面对该结构进行说明。
执行模块72,用于执行待测代码中的部分代码的覆盖率测试,该模块可以使用现有的覆盖率测试方法或者工具来执行,在本实施例中不再赘述;上报模块74,该模块连接至执行模块72,该模块用于根据接收到的用于指示上报覆盖率测试结果的消息和/或本地的配置信息上报覆盖率测试的结果。
本实施例中的覆盖率测试服务器10不再是一个单独执行覆盖率测试的服务器,而是具有了上报的功能,这是通过该上报,为了解该覆盖率测试服务器所执行的测试结果提供了可能,无论将测试结果上报给哪个网元(或称为装置、设备),均可以使该网元获取到该服务器所执行的测试情况,从而为该网元提供下一步的操作提供了可能。该覆盖率测试服务器可以和覆盖率测试处理装置作为一个整体的系统来进行实施,当然,也可以和其他的网元作为一个整体的系统来进行实施。
优选地,执行模块72用于通过对指定的字节码插桩和/或对字节码所引用的代码对应的字节码进行插桩执行覆盖率测试。
图8是根据本申请实施例的覆盖率测试服务器的优选结构框图,如图8所示,该上报模块74可以包括:第一上报模块742,用于根据消息中携带的时间信息或覆盖率测试服务器本地配置的时间信息上报在该时间信息对应时间段内执行覆盖率测试得到的结果;和/或,第二上报模块744,该模块用于根据消息中携带的代码信息或覆盖率测试服务器本地配置的代码信息上报对该代码信息对应代码执行覆盖率测试得到的结果。
优选地,上报模块74,可以用于在执行模块执行覆盖率测试的过程中需要上报覆盖率测试结果时,上报已经执行完毕的该覆盖率测试的结果。优选地,上报模块74还可以用于在执行覆盖率测试的过程中周期性的发送心跳消息,其中,该心跳消息用于对覆盖率测试服务器进行保活。
对于本实施例中的覆盖率测试系统,可以是上述的任一覆盖率测试处理装置12,以及,一个或多个上述的任一覆盖率测试服务器10。
下面以Cobertura为例对一个优选实施例进行说明,以下虽然是以Cobertura为例进行说明的,但并不限于此,其他的java的覆盖率测试工具或者其他语言下的覆盖率测试工具也同样适用。
图9是根据本申请优选实施例的覆盖率测试系统的示意图,如图9所示,Cobertura实例位于覆盖率测试服务器10侧,Cobertura服务器实例位于覆盖率测试处理装置12侧,下面对这两个实例中的进程进行说明。
在Cobertura实例中包括:客户端线程(Client Process,简称为CP)、注册代理线程(Register Proxy Process,简称为RPP),其中,RPP用于向Cobertura服务器实例发送心跳消息(或称为心跳注册消息)。
Cobertura服务器实例包括两个部分:共享池和后台进程,共享池用来存放实时注册的被测的代码所在服务器地址等信息,关于共享池的实现方式可以按照现有的实现方式来进行实现,在此不再赘述。后台进程可以包括:注册线程(Register Process,简称为RP)、客户端代理线程(Client Proxy Process,简称为CPP)、注册监控线程(Register Monitor,简称为RMON)、历史监控进程(History Monitor,简称为HMON)以及服务进程(Server Process,简称为SP),其中,CPP与CP进行通信,RPP和RP相配合实现心跳消息的发送和接收,RMON用来监控共享池中的数据是否超期,HMON用于监控历史数据,CP作为Cobertura服务器实例的主要进程用于完成测试报告的归并、以及对Cobertura实例的管理等。
下面结合图9中的线程进行说明。被插桩的代码在测试时,RPP会每隔一定时间向Cobertura服务器实例进行信息注册,Cobertura服务器实例的RP会将被测代码的信息更新到共享池中,RMON会根据PRR发送的心跳消息的情况检查共享池(共享池是数据库中的一个特殊的区域,该共享池的使用与现有的使用方式相同,在此不再赘述)中的信息,并清除过期信息。对于已经完成的测试报告,可以以文档的形式保存在文件服务器上,HMON用来维护数据库和文件系统的信息,可以配置相应的规则来删除陈旧的资料。由上述可以看出,RMON主要是用来维护共享池中的信息,而HMON主要是用来维护文件系统中的信息。
外部系统可以通过API接口或者页面进行覆盖率信息的获取,CPP会通知符合条件的Cobertura实例中的CP,收集当前覆盖率信息,并对来自各个Cobertura实例的覆盖率信息进行归并,归并完成后生成覆盖率报告可以存入服务器,并返回访问地址。
在本优选实施例中,还可以支持实时清空分散在各个Cobertura实例上的覆盖率信息,例如,可以通过SP对共享池中的已经注册的信息进行查询,然后,通过CPP通知各个Cobertura实例进行实时清空操作。通过该操作可以在重新测试代码的过程中避免测试信息叠加。
另外,由于Cobertura对递归的支持比较弱,在本优选实施例中进行了扩展,即在插桩阶段可以使得覆盖率工具支持递归插桩,也就是可以对指定的字节码插桩并且可以对这些字节码所引用的jar包进行插桩,并统计jar包的结果。由于可以对字节码所引用的jar包进行插桩,因此实现了递归的处理。对于其他的工具而言,也可以根据需要对字节码所引用的包进行插桩,从而实现递归处理。
上述优选实施例提高了测试人员检查覆盖率和对比覆盖率的效率,可以实时得到分布在各个Cobertura实例正在测试代码的具体情况,和归并后的整体情况,这种优势在大型应用中显得尤为突出,可以帮助测试工程师对测试质量进行全局的监控,并为自动化测试过程信息的获取提供了可能。
在另外一个实施例中,还提供了一种软件,该软件用于执行上述实施例及优选实施方式中描述的技术方案。
在另外一个实施例中,还提供了一种存储介质,该存储介质中存储有上述软件,该存储介质包括但不限于:光盘、软盘、硬盘、可擦写存储器等。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (17)
1.一种覆盖率测试处理方法,其特征在于包括以下步骤:
接收一个或多个覆盖率测试服务器上报的该覆盖率测试服务器执行的覆盖率测试的结果,其中,所述覆盖率测试服务器用于测试待测代码中的部分代码的覆盖率;
对接收到的覆盖率测试的结果进行归并,生成测试报告;
其中,所述覆盖率测试服务器在执行所述覆盖率测试的过程中周期性的发送心跳消息,其中,所述心跳消息用于对所述覆盖率测试服务器进行保活。
2.根据权利要求1所述的方法,其特征在于,在接收到所述一个或多个覆盖率测试服务器上报的该覆盖率测试服务器执行的覆盖率测试的结果之前,所述方法还包括:
向所述一个或多个覆盖率测试服务器发送消息,其中,所述消息用于指示接收到该消息的覆盖率测试服务器上报该覆盖率测试服务器执行的覆盖率测试的结果;和/或,
所述一个或多个覆盖率测试服务器定期上报该覆盖率测试服务器执行的覆盖率测试的结果。
3.根据权利要求2所述的方法,其特征在于,所述覆盖率测试服务器上报该覆盖率测试服务器执行的覆盖率测试的结果包括:
所述覆盖率测试服务器根据所述消息中携带的时间信息或所述覆盖率测试服务器本地配置的时间信息上报在所述时间信息对应时间段内执行覆盖率测试得到的结果;和/或,
所述覆盖率测试服务器根据所述消息中携带的代码信息或所述覆盖率测试服务器本地配置的代码信息上报对所述代码信息对应的代码执行覆盖率测试得到的结果。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述覆盖率测试服务器上报该覆盖率测试服务器执行的覆盖率测试的结果包括:
所述覆盖率测试服务器确定在执行覆盖率测试的过程中需要上报覆盖率测试结果;
所述覆盖率测试服务器上报已经执行完毕的该覆盖率测试的结果。
5.根据权利要求1至3中任一项所述的方法,其特征在于,所述方法还包括:
向所述一个或多个覆盖率测试服务器发送清空消息,其中,所述清空消息用于指示所述清空消息的接收方在接收到该清空消息之后,对本地保存的所述覆盖率测试的结果进行清空。
6.根据权利要求1至3中任一项所述的方法,其特征在于,所述方法还包括:
向所述一个或多个覆盖率测试服务器发送测试命令,其中,所述测试命令中携带有需要执行覆盖率测试的时间信息和/或代码信息。
7.根据权利要求1至3中任一项所述的方法,其特征在于,所述覆盖率测试服务器执行的覆盖率测试包括:
覆盖率测试服务器通过对指定的字节码插桩和/或对字节码所引用的代码对应的字节码进行插桩执行覆盖率测试。
8.根据权利要求1所述的方法,其特征在于,所述对接收到的覆盖率测试的结果进行归并是通过对对应覆盖率信息的字节码对象进行归并完成。
9.一种覆盖率测试处理装置,其特征在于包括:
接收模块,用于接收一个或多个覆盖率测试服务器上报的该覆盖率测试服务器执行的覆盖率测试的结果,其中,所述覆盖率测试服务器用于测试待测代码中的部分代码的覆盖率;其中,所述覆盖率测试服务器在执行所述覆盖率测试的过程中周期性的发送心跳消息,其中,所述心跳消息用于对所述覆盖率测试服务器进行保活;
生成模块,用于对接收到的覆盖率测试的结果进行归并,生成测试报告。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
第一发送模块,用于向所述一个或多个覆盖率测试服务器发送消息,其中,所述消息用于指示接收到该消息的覆盖率测试服务器上报该覆盖率测试服务器执行的覆盖率测试的结果,所述消息中携带有时间信息和/或代码信息,所述时间信息用于指示所述覆盖率测试服务器上报在该时间信息对应时间段内执行覆盖率测试得到的结果,所述代码信息用于指示所述覆盖率测试服务器上报对该代码信息对应的代码所执行的覆盖率测试得到的结果。
11.根据权利要求9或10所述的装置,其特征在于,所述装置还包括:
第二发送模块,用于向所述一个或多个覆盖率测试服务器发送清空消息,其中,所述清空消息用于指示所述清空消息的接收方在接收到该清空消息之后,对本地保存的覆盖率测试的结果进行清空。
12.根据权利要求9或10所述的装置,其特征在于,所述装置还包括:
第三发送模块,用于向所述一个或多个覆盖率测试服务器发送测试命令,其中,所述测试命令中携带有需要执行覆盖率测试的时间信息和/或代码信息。
13.一种覆盖率测试服务器,其特征在于,包括:
执行模块,用于执行待测代码中的部分代码的覆盖率测试;
上报模块,用于根据接收到的用于指示上报覆盖率测试结果的消息和/或本地的配置信息上报覆盖率测试的结果;其中,所述上报模块用于在执行所述覆盖率测试的过程中周期性的发送心跳消息,其中,所述心跳消息用于对所述覆盖率测试服务器进行保活。
14.根据权利要求13所述的覆盖率测试服务器,其特征在于,所述上报模块包括:
第一上报模块,用于根据所述消息中携带的时间信息或所述覆盖率测试服务器本地配置的时间信息上报在所述时间信息对应时间段内执行所述覆盖率测试得到的结果;和/或,
第二上报模块,用于根据所述消息中携带的代码信息或所述覆盖率测试服务器本地配置的代码信息上报对所述代码信息对应的代码执行所述覆盖率测试得到的结果。
15.根据权利要求13或14所述的覆盖率测试服务器,其特征在于,
所述上报模块,用于在所述执行模块执行所述覆盖率测试的过程中需要上报覆盖率测试结果时,上报已经执行完毕的该覆盖率测试的结果。
16.根据权利要求13所述的覆盖率测试服务器,其特征在于,所述执行模块用于通过对指定的字节码插桩和/或对字节码所引用的代码对应的字节码进行插桩执行覆盖率测试。
17.一种覆盖率测试系统,其特征在于,包括权利要求9至12中任一项所述的覆盖率测试处理装置,以及,一个或多个权利要求13至16中任一项所述的覆盖率测试服务器。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110351665.3A CN103095518B (zh) | 2011-11-08 | 2011-11-08 | 覆盖率测试处理方法、装置、覆盖率测试服务器及系统 |
HK13107476.3A HK1180481A1 (zh) | 2011-11-08 | 2013-06-26 | 覆蓋率測試處理方法、裝置、覆蓋率測試服務器及系統 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110351665.3A CN103095518B (zh) | 2011-11-08 | 2011-11-08 | 覆盖率测试处理方法、装置、覆盖率测试服务器及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103095518A CN103095518A (zh) | 2013-05-08 |
CN103095518B true CN103095518B (zh) | 2016-08-10 |
Family
ID=48207676
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110351665.3A Active CN103095518B (zh) | 2011-11-08 | 2011-11-08 | 覆盖率测试处理方法、装置、覆盖率测试服务器及系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103095518B (zh) |
HK (1) | HK1180481A1 (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104657256B (zh) * | 2013-11-19 | 2018-07-31 | 阿里巴巴集团控股有限公司 | 一种收集用例与代码之间映射关系的方法和装置 |
CN105701001A (zh) * | 2014-11-25 | 2016-06-22 | 阿里巴巴集团控股有限公司 | 一种测试覆盖率的处理方法和设备 |
CN104391795B (zh) * | 2014-12-03 | 2017-05-10 | 北京京东尚科信息技术有限公司 | 一种分布式系统中自动化测试覆盖率的测试方法及系统 |
CN105988926B (zh) * | 2015-02-13 | 2019-06-07 | 腾讯科技(深圳)有限公司 | 多版本测试数据的处理方法和装置 |
CN106294109B (zh) * | 2015-05-27 | 2021-03-19 | 腾讯科技(深圳)有限公司 | 获取缺陷代码的方法及装置 |
CN106294114A (zh) * | 2015-06-08 | 2017-01-04 | 阿里巴巴集团控股有限公司 | 一种代码覆盖率获取方法、服务器及待测应用装置 |
CN106681904B (zh) * | 2015-11-11 | 2020-01-31 | 阿里巴巴集团控股有限公司 | 测试件覆盖率及覆盖应用接口的分析方法、装置 |
CN106708721B (zh) * | 2015-11-13 | 2020-08-14 | 阿里巴巴集团控股有限公司 | 代码覆盖测试的实现方法和装置 |
CN105573915B (zh) * | 2015-12-16 | 2019-07-05 | 北京奇虎科技有限公司 | 一种基于代码覆盖率的测试方法和装置 |
CN105446884A (zh) * | 2015-12-16 | 2016-03-30 | 北京奇虎科技有限公司 | 代码覆盖率的测试方法及装置 |
CN105589805B (zh) * | 2015-12-16 | 2019-12-24 | 北京奇虎科技有限公司 | 一种代码覆盖率报告的生成方法和装置 |
CN106294129A (zh) * | 2016-07-27 | 2017-01-04 | 北京小米移动软件有限公司 | 代码覆盖率测试方法及装置 |
CN106294183B (zh) * | 2016-08-25 | 2019-03-08 | 网易(杭州)网络有限公司 | 覆盖率检测方法、装置和设备 |
CN106339317B (zh) * | 2016-08-25 | 2019-06-25 | 网易(杭州)网络有限公司 | 覆盖率检测方法、装置和设备 |
CN106874187B (zh) * | 2016-12-29 | 2020-09-11 | 腾讯科技(深圳)有限公司 | 代码覆盖率收集方法和装置 |
CN110580214B (zh) * | 2018-06-07 | 2023-05-05 | 百度在线网络技术(北京)有限公司 | 应用程序测试的评估方法、装置、存储介质和终端设备 |
CN110795329A (zh) * | 2018-08-02 | 2020-02-14 | 阿里巴巴集团控股有限公司 | 覆盖率测试方法及系统、处理器、存储介质 |
CN110597710B (zh) * | 2019-08-13 | 2024-04-05 | 平安证券股份有限公司 | 测试覆盖率统计方法、装置、计算机设备及存储介质 |
CN111897737B (zh) * | 2020-08-21 | 2024-03-26 | 中国工商银行股份有限公司 | 微服务系统程序测试的遗漏检测方法及装置 |
CN112346994B (zh) * | 2020-12-01 | 2024-06-04 | 广州品唯软件有限公司 | 一种测试信息关联方法、装置、计算机设备及存储介质 |
CN112202647B (zh) * | 2020-12-09 | 2021-03-16 | 腾讯科技(深圳)有限公司 | 区块链网络中的测试方法、装置及测试设备 |
CN112685298A (zh) * | 2020-12-25 | 2021-04-20 | 北京百度网讯科技有限公司 | 应用程序的代码覆盖测试方法、装置以及电子设备 |
CN113485908B (zh) * | 2021-05-25 | 2024-06-18 | 中国人民财产保险股份有限公司 | 一种覆盖率的获取方法、装置及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101202589A (zh) * | 2006-12-12 | 2008-06-18 | 中兴通讯股份有限公司 | 一种传输设备的故障检测装置及方法 |
CN101276273A (zh) * | 2007-03-30 | 2008-10-01 | 株式会社日立制作所 | 自动监控系统和方法 |
CN101770423A (zh) * | 2009-12-25 | 2010-07-07 | 中兴通讯股份有限公司 | 一种测试数据生成方法及测试系统 |
-
2011
- 2011-11-08 CN CN201110351665.3A patent/CN103095518B/zh active Active
-
2013
- 2013-06-26 HK HK13107476.3A patent/HK1180481A1/zh unknown
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101202589A (zh) * | 2006-12-12 | 2008-06-18 | 中兴通讯股份有限公司 | 一种传输设备的故障检测装置及方法 |
CN101276273A (zh) * | 2007-03-30 | 2008-10-01 | 株式会社日立制作所 | 自动监控系统和方法 |
CN101770423A (zh) * | 2009-12-25 | 2010-07-07 | 中兴通讯股份有限公司 | 一种测试数据生成方法及测试系统 |
Also Published As
Publication number | Publication date |
---|---|
HK1180481A1 (zh) | 2013-10-18 |
CN103095518A (zh) | 2013-05-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103095518B (zh) | 覆盖率测试处理方法、装置、覆盖率测试服务器及系统 | |
CN104731580B (zh) | 基于Karaf与ActiveMQ的自动化运维系统及其实现方法 | |
CN103838665B (zh) | 一种rfid自动化测试装置及方法 | |
CN106874187B (zh) | 代码覆盖率收集方法和装置 | |
Maâlej et al. | Distributed and Resource-Aware Load Testing of WS-BPEL Compositions. | |
US8539507B2 (en) | Service oriented architecture | |
CN103678124B (zh) | 基于持续集成环境的视频监控平台自动测试方法及装置 | |
CN108920314A (zh) | 一种故障硬件定位方法、装置、系统及可读存储介质 | |
Lahami et al. | Using knapsack problem model to design a resource aware test architecture for adaptable and distributed systems | |
CN113111000B (zh) | 持续集成自动化测试系统和方法、电子设备、存储介质 | |
CN107832210A (zh) | 日志埋点接入测试方法、装置及服务器 | |
US7617462B2 (en) | Graphical user interface (GUI) for displaying software component availability as determined by a messaging infrastructure | |
CN108376075A (zh) | 一种软件编译项目的管理方法、存储介质及终端设备 | |
US7734763B2 (en) | Application for testing the availability of software components | |
Munson et al. | Measuring software evolution | |
CN101305389A (zh) | 独立消息存储和消息传输代理 | |
CN109274533A (zh) | 一种基于规则引擎的Web服务故障的定位装置和方法 | |
CN108763079A (zh) | 项目流自动化测试和部署的方法及其系统 | |
CN109271309A (zh) | 自动化测试软件的方法及装置、服务器、设备和存储介质 | |
CN107332730A (zh) | 一种协议可扩展的服务可用性探测系统及方法 | |
da Rocha et al. | Proactive management of computer networks using artificial intelligence agents and techniques | |
Lahami et al. | Runtime testing framework for improving quality in dynamic service-based systems | |
Sutcliffe et al. | Comparing requirements analysis methods for developing reusable component libraries | |
Rocha et al. | A method for model based test harness generation for component testing | |
US8949403B1 (en) | Infrastructure for maintaining cognizance of available and unavailable software components |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1180481 Country of ref document: HK |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: GR Ref document number: 1180481 Country of ref document: HK |