一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种代码覆盖率检测方法、装置、设备及介质与流程

2022-04-30 10:10:11 来源:中国专利 TAG:


1.本发明涉及代码覆盖率测试技术领域,特别涉及一种代码覆盖率检测方法、装置、设备及介质。


背景技术:

2.当前的产品测试无论采用手工还是自动化测试,都无法保证测试范围的完全覆盖。也无法定量精准评估测试用例设计和执行的充分程度,很容易遗漏覆盖一些业务场景。如果出现各个业务核心功能遗漏,或测试过程中涉及到业务有新代码提交而没有及时验证具体影响范围,从而导致线上问题,造成严重损失。
3.当一个公司涉及的业务线较多时,单纯的代码覆盖率小插件只能统计各自情况。无法和持续集成平台打通,无法做到自动化闭环。同时,繁琐的环境配置和维护工作也需要花费大量人力资源。


技术实现要素:

4.为了解决上述技术问题,本发明提供一种代码覆盖率检测方法,所述方法应用于代码覆盖率平台,所述代码覆盖率平台包括预先设定的交互页面,所述交互页面中展示有各个测试应用程序的全部服务,所述测试应用程序是通过接口自动化代码和持续集成的方式创建的,每个所述测试应用程序包括多个服务,所述方法包括:
5.基于用户在所述交互页面触发的测试指令,所述测试指令包括指定的一个服务或多个存在于不同应用程序的服务、与所述服务对应的覆盖率类型;
6.基于所述测试指令获取各个服务对应的源代码;
7.基于所述服务对应的覆盖率类型,分析对应的所述源代码中日志文件输出点的理论数量和位置信息;
8.获取各个所述服务运行时实际输出的日志文件,基于每一个日志文件中所记载的对应日志文件输出点的位置信息确定实际输出日志文件的日志文件输出点的数量;
9.基于各个所述源代码中日志文件输出点的理论数量和实际输出日志文件的日志文件输出点的数量得到各个所述服务的当前代码覆盖率。
10.进一步地,所述基于所述测试指令获取各个服务对应的源代码,包括:
11.基于所述测试指令在预先设定的服务器中拉取所述各个服务对应的源代码,不同服务对应的源代码的ip地址不同。
12.进一步地,所述测试指令还包括各个服务对应的运行环境,所述运行环境包括:测试环境、预发环境和线上环境;
13.所述方法还包括:根据各个服务的运行环境,对各个服务的当前代码覆盖率添加对应的环境标签,所述环境标签包括:测试标签、预发标签和线上标签。
14.进一步地,所述方法还包括:获取各个服务的历史覆盖率;
15.将所述各个服务的当前代码覆盖率和所述各个服务的历史覆盖率进行比对,得到
各个服务的覆盖率比对结果;
16.展示所述覆盖率比对结果。
17.进一步地,所述方法还包括:根据所述各个服务的当前代码覆盖率和所述各个服务的历史覆盖率生成测试报告,所述测试报告可以是以下一种:文本、趋势图、表格。
18.进一步地,所述方法还包括:
19.将所述测试报告发送至所述各个服务对应维护人员。
20.另一方面,本发明提供一种代码覆盖率检测装置,所述装置应用于代码覆盖率平台,所述代码覆盖率平台包括预先设定的交互页面,所述交互页面中展示有各个测试应用程序的全部服务,所述测试应用程序是通过接口自动化代码和持续集成的方式创建的,每个所述测试应用程序包括多个服务,所述装置包括:
21.测试指令生成模块,用于基于用户在所述交互页面触发的测试指令,所述测试指令包括指定的一个服务或多个存在于不同应用程序的服务、与所述服务对应的覆盖率类型;
22.代码获取模块,用于基于所述测试指令获取各个服务对应的源代码;
23.第一覆盖率统计模块,用于基于所述服务对应的覆盖率类型,分析对应的所述源代码中日志文件输出点的理论数量和位置信息;
24.第二覆盖率统计模块,用于获取各个所述服务运行时实际输出的日志文件,基于每一个日志文件中所记载的对应日志文件输出点的位置信息确定实际输出日志文件的日志文件输出点的数量;
25.计算模块,用于基于各个所述源代码中日志文件输出点的理论数量和实际输出日志文件的日志文件输出点的数量得到各个所述服务的当前代码覆盖率。
26.进一步地,所述装置还包括:
27.历史数据获取模块,用于获取各个服务的历史覆盖率;
28.比对模块,用于将所述各个服务的当前代码覆盖率和所述各个服务的历史覆盖率进行比对,得到各个服务的覆盖率比对结果;
29.展示模块,用于展示所述覆盖率比对结果。
30.再一方面,本发明提供一种电子设备,包括:
31.处理器;
32.用于存储所述处理器可执行指令的存储器;
33.其中,所述处理器被配置为执行所述指令,以实现如上述所述代码覆盖率检测方法。
34.再一方面,本发明提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由日程创建装置/电子设备的处理器执行时,使得所述日程创建装置/电子设备能够执行如上述所述代码覆盖率检测方法。
35.本发明提供的一种代码覆盖率检测方法、装置、设备及介质,具有如下有益效果:本发明中的代码覆盖率平台结合接口自动化代码工程和持续集成平台与各个应用程序的开发流程打通,去除冗余的工作,提升测试工作效率,做到真正的自动化,在进行代码覆盖率测试时,可以选定一个或多个不同应用程序中的服务进行测试,提高测试的精准性以及指向性,能避免各个应用程序核心的服务未被检测或遗漏问题。此外,本方案的扩展能力
强,后续有新增的业务需要,可以简单配置直接接入并进行测试,节约人力。同时,代码覆盖率平台代替了通过进入测试机手工配置和手工触发执行代码覆盖统计的,实现一键自动化执行,更加简单高效完成操作。
附图说明
36.为了更清楚地说明本发明的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
37.图1是根据本技术实施例示出的一种代码覆盖率检测方法的实施环境架构图;
38.图2是本技术实施例提供的一种代码覆盖率检测方法的流程示意图;
39.图3是本技术实施例提供的另一种代码覆盖率检测方法的流程示意图;
40.图4是本发明实施例提供的一种代码覆盖率检测装置的结构示意图;
41.图5是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
42.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
43.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、装置、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
44.如图1所示,图1是本技术实施例提供的一种代码覆盖率检测方法的流程示意图,本说明书实施例提供一种代码覆盖率检测方法,本方法的执行主体可以是代码覆盖率平台,其中,所述代码覆盖率平台包括预先设定的交互页面,所述交互页面中展示有各个测试应用程序的全部服务,所述测试应用程序是通过接口自动化代码和持续集成的方式创建的,每个所述测试应用程序包括多个服务,所述方法包括:
45.s102、基于用户在所述交互页面触发的测试指令,所述测试指令包括指定的一个服务或多个存在于不同应用程序的服务、与所述服务对应的覆盖率类型。
46.具体的,测试指令可以是用户通过点击代码覆盖率平台的交互页面中的一个或多个服务后生成的,其中,交互页面中可以展示有各个应用程序的各个服务,相同应用程序的服务可以是在同一应用程序下。在一个可选的实施例中,同一应用程序的不同服务可以具有相同的应用程序标签,不同的应用程序标签用于区分不同的应用程序的服务。本说明书实施例中,一个应用程序可以包括有多个服务,不同的应用程序的不同服务可以构成企业
的特定业务线,即代码覆盖率平台中的各个应用程序之间可以存在相互调用数据的场景。在用户选定需要测试的服务后,可以生成对应的测试指令。
47.其中,测试指令还可以包括覆盖率类型,不同的服务可以对应不同的覆盖率类型,其中覆盖率类型可以包括语句覆盖、判定覆盖、条件覆盖以及路径覆盖等。
48.可以理解的是,覆盖率类型也是用户基于服务选定的。也可以是选定的全部服务对应同一个覆盖率类型。
49.s104、基于所述测试指令获取各个服务对应的源代码。
50.具体的,源代码可以是用汇编语言和高级语言写出来的代码。其中,目标代码是指源代码经过编译程序产生的能被cpu直接识别二进制代码。可执行代码就是将目标代码连接后形成的可执行文件,也是二进制的。
51.具体的,各个服务对应的源代码可以是通过jenkins存储在git(客户端)中。
52.在一个可选的实施例中,在上述实施例基础上,本说明书一个实施例中,所述基于所述测试指令获取各个服务对应的源代码,包括:
53.基于所述测试指令在预先设定的服务器中拉取所述各个服务对应的源代码,不同服务对应的源代码的ip地址不同。
54.具体的,用户在编译各个服务对应的源代码时,可以使用jenkins将更新的源代码存储在对应的服务器中,在使用时不同的客户端均可以访问并下载对应的源代码。其中,服务器中存储的不同服务的源代码可以采用不同的ip地址的方式存储。在测试时,可以根据测试指令在上述服务器中拉去对应的源代码。
55.s106、基于所述服务对应的覆盖率类型,分析对应的所述源代码中日志文件输出点的理论数量和位置信息。
56.具体的,一般来说,为了能够在程序后期维护、检查过程中更容易发现和解决实际问题,源代码中都会设置日志文件输出点,记录对应的代码行的运行情况。一个日志文件输出点通常会对应若干代码行,如果这些代码行能够正常运行,就会有对应的日志文件输出。这些日志文件输出点通常会有预定的格式标示出来,通过扫描分析程序的源代码,便可以获取到设置的日志文件输出点、该日志文件输出点在源代码中的位置信息,以及对应的日志内容(例如日志写入的记录,日志级别等等),从而便可以得出日志文件输出点的理论数量,即假设程序的所有源代码都正常执行时,输出日志文件的日志文件输出点的总量。常见的扫描过程为:对日志程序的特征进行整个源代码的扫描,确定整个源代码中所有日志的信息,也可以通过ctag等方式来替代全文扫描。
57.在一个可选的实施例中,还可以使用jacoco引擎对各个服务对应的源代码进行分析。
58.s108、获取各个所述服务运行时实际输出的日志文件,基于每一个日志文件中所记载的对应日志文件输出点的位置信息确定实际输出日志文件的日志文件输出点的数量。
59.具体的,因为程序运行过程中,如果应该输出日志文件位置的代码行被运行过,则必定会有对应的日志文件输出,通过统计程序运行时输出日志文件,并分析其中所记载的对应日志文件输出点的位置信息,便可以统计出实际输出日志文件的日志文件输出点的数量,即可统计出被运行过的代码。其中,程序运行时输出的日志文件一般会按照预订路径存储,可以直接从存储的地方读取这些日志文件,也可以修改程序运行时的输出日志文件的
存储路径或者在程序中添加接口,使其直接将日志文件输出给代码覆盖率确定系统。可以理解,为了避免影响程序的正常运行,可以设定程序输出日志文件到代码覆盖率确定系统的频率,例如,每半小时或者一小时输出一次,或者在程序运行完成后一次性输出。
60.s110、基于各个所述源代码中日志文件输出点的理论数量和实际输出日志文件的日志文件输出点的数量得到各个所述服务的当前代码覆盖率。
61.具体的,源代码中日志文件输出点的理论数量和实际输出日志文件的日志文件输出点的数量的比值即为代码覆盖率。
62.在一个可选的实施例中,各个服务的各行源代码可以采用标注的方式展示,即运行的源代码与未执行的源代码区分开,以便于用户能够知晓代码覆盖率的同时确定未执行的源代码。
63.本发明中的代码覆盖率平台结合接口自动化代码工程和持续集成平台与各个应用程序的开发流程打通,去除冗余的工作,提升测试工作效率,做到真正的自动化,在进行代码覆盖率测试时,可以选定一个或多个不同应用程序中的服务进行测试,提高测试的精准性以及指向性,能避免各个应用程序核心的服务未被检测或遗漏问题。此外,本方案的扩展能力强,后续有新增的业务需要,可以简单配置直接接入并进行测试,节约人力。同时,代码覆盖率平台代替了通过进入测试机手工配置和手工触发执行代码覆盖统计的,实现一键自动化执行,更加简单高效完成操作。
64.在上述实施例基础上,本说明书一个实施例中,所述测试指令还包括各个服务对应的运行环境,所述运行环境包括:测试环境、预发环境和线上环境;
65.所述方法还包括:根据各个服务的运行环境,对各个服务的当前代码覆盖率添加对应的环境标签,所述环境标签包括:测试标签、预发标签和线上标签。
66.具体的,测试环境可以理解为对应的应用程序未上线,仅仅是处于研发测试阶段。预发环境可以理解为该应用程序以及研发完成,可以上线但未上线的阶段。线上环境可以理解为该应用程序已经上线。
67.具体的,在各个服务的覆盖率测试完成后,可以将对应的运行环境以标签的形式添加至对应的当前代码覆盖率上,以便于用于可以明确不同应用程序的运行环境。
68.在上述实施例基础上,本说明书一个实施例中,所述方法还包括:s202、获取各个服务的历史覆盖率;
69.s204、将所述各个服务的当前代码覆盖率和所述各个服务的历史覆盖率进行比对,得到各个服务的覆盖率比对结果;
70.s206、展示所述覆盖率比对结果。
71.具体的,各个服务的历史覆盖率可以是上一次对对应的服务进行代码覆盖率测试的结果。在实际应用中,可以将各个服务的当前代码覆盖率和所述各个服务的历史覆盖率进行比对,得到各个服务的覆盖率比对结果,如服务a的历史覆盖率为40%,服务a的当前代码覆盖率为45%,可以得到比对结果为40%:45%,可以看出当前代码覆盖率大于历史覆盖率,同时可以对服务中的各行源代码进行标记,进而确定出该服务中的未执行的源代码,从而为维护人员提供数据支撑,从而保证应用程序中无用的源代码降低,提高产品质量。
72.在一个可选的实施例中,所述方法还包括:s208、根据所述各个服务的当前代码覆盖率和所述各个服务的历史覆盖率生成测试报告,所述测试报告可以是以下一种:文本、趋
势图、表格。
73.具体的,在测试完成选定的服务后,可以根据所述各个服务的当前代码覆盖率和所述各个服务的历史覆盖率生成测试报告,测试报告可以是以下一种:文本、趋势图、表格。
74.具体的,测试报告可以是基于jacoco形成的覆盖率报告,支持从应用、文件、包、类和代码行级别的代码覆盖情况,通过不同的颜色呈现已覆盖和未覆盖情况。
75.可选的,测试报告还可以提供可视化图表来呈现单业务线的历史覆盖率趋势。测试报告还可以提供可视化图表来呈现多个业务线代码覆盖率情况的横向对比。
76.在一个可选的实施例中,所述方法还包括:
77.将所述测试报告发送至所述各个服务对应维护人员。
78.具体的,不同的服务可以对应不同的维护人员,该维护人员可以对该服务进行编译和维护,维护人员也可以包括该应用程序的管理人员。在测试完成后,可以按照邮箱等方式将测试报告发送给对应的维护人员,以便于维护人员及时明确对应服务的代码覆盖率状态,在覆盖率低时,可以对该服务对应的源代码将进行维护,确认对应服务以及对应应用程序的质量。
79.另一方面,图4是本发明实施例提供的一种代码覆盖率检测装置的结构示意图,如图4所示,本发明提供种一种代码覆盖率检测装置,装置应用于代码覆盖率平台,所述代码覆盖率平台包括预先设定的交互页面,所述交互页面中展示有各个测试应用程序的全部服务,所述测试应用程序是通过接口自动化代码和持续集成的方式创建的,每个所述测试应用程序包括多个服务,所述装置包括:
80.测试指令生成模块710,用于基于用户在所述交互页面触发的测试指令,所述测试指令包括指定的一个服务或多个存在于不同应用程序的服务、与所述服务对应的覆盖率类型;
81.代码获取模块720,用于基于所述测试指令获取各个服务对应的源代码;
82.第一覆盖率统计模块730,用于基于所述服务对应的覆盖率类型,分析对应的所述源代码中日志文件输出点的理论数量和位置信息;
83.第二覆盖率统计模块740,用于获取各个所述服务运行时实际输出的日志文件,基于每一个日志文件中所记载的对应日志文件输出点的位置信息确定实际输出日志文件的日志文件输出点的数量;
84.计算模块750,用于基于各个所述源代码中日志文件输出点的理论数量和实际输出日志文件的日志文件输出点的数量得到各个所述服务的当前代码覆盖率。
85.在上述实施例基础上,本说明书一个实施例中,所述装置还包括:
86.历史数据获取模块,用于获取各个服务的历史覆盖率;
87.比对模块,用于将所述各个服务的当前代码覆盖率和所述各个服务的历史覆盖率进行比对,得到各个服务的覆盖率比对结果;
88.展示模块,用于展示所述覆盖率比对结果。
89.由于本说明书实施例提供的代码覆盖率检测装置与上述所述的代码覆盖率检测方法具有相同的技术方案和技术效果,不在赘述。
90.需要说明的是,上述实施例提供的装置,在实现其功能时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,
即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的装置与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
91.另一方面,图5是本发明实施例提供的一种电子设备的结构示意图,如图5所示,本发明提供一种代码覆盖率检测设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令或者至少一段程序,所述至少一条指令或者至少一段程序由所述处理器加载并执行以实现如上述所述的代码覆盖率检测方法。
92.上述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
93.本发明实施例还提供了一种存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、该至少一段程序、该代码集或指令集可由电子设备的处理器执行以完成上述所述的代码覆盖率检测方法。
94.可选地,在本发明实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
95.需要说明的是:上述本发明实施例先后顺序仅仅为了描述,不代表实施例的优劣。且上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
96.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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)等。
97.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备和存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
98.本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件
来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
99.需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。本发明实施例所提供测试方法,其实现原理及产生的技术效果和前述系统实施例相同,为简要描述,方法实施例部分未提及之处,可参考前述系统实施例中相应内容。
100.在本技术所提供的几个实施例中,应该理解到,所揭露的系统和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
101.最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以上述权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献