一种代码覆盖结果生成方法及装置与流程

文档序号:31688083发布日期:2022-09-30 21:38阅读:36来源:国知局
一种代码覆盖结果生成方法及装置与流程

1.本发明涉及软件测试技术领域,特别是涉及一种代码覆盖结果生成方法及装置。


背景技术:

2.随着网络技术的快速发展,越来越多的软件应用于用户的生活、工作和娱乐等各方面。而随着软件的业务的不断发展,使得软件也需要不断地迭代更新,因此,为了保证能够为用户提供稳定可靠的服务,则可以对软件进行测试。
3.相关技术中,测试人员可以基于测试用例对待测软件进行测试,得到待测软件的测试结果。另外,可以获取测试过程中待测软件的代码覆盖结果,代码覆盖结果可以包括待测软件的代码被覆盖的比例(即代码覆盖率),以基于代码覆盖结果完善待测软件的功能,提高待测软件的可靠性。


技术实现要素:

4.本发明实施例的目的在于提供一种代码覆盖结果生成方法及装置,以得到增量代码覆盖结果,降低增量代码覆盖结果的获取成本。具体技术方案如下:
5.第一方面,为了达到上述目的,本发明实施例公开了一种代码覆盖结果生成方法,所述方法包括:
6.在基于预设测试用例对待测软件进行测试的过程中,当检测到满足预设条件时,获取当前已执行的测试用例对应的全量代码覆盖结果;
7.获取当前已执行的测试用例对应的增量代码;
8.基于所述全量代码覆盖结果和所述增量代码,得到当前的增量代码覆盖结果。
9.可选的,所述在基于预设测试用例对待测软件进行测试的过程中,当检测到满足预设条件时,获取当前已执行的测试用例对应的全量代码覆盖结果,包括:
10.在基于预设测试用例对待测软件进行测试的过程中,当检测到用于获取增量覆盖率的组件被触发时,获取当前已执行的测试用例对应的全量代码覆盖结果;
11.或者,
12.在基于预设测试用例对待测软件进行测试的过程中,当达到指定时刻时,获取当前已执行的测试用例对应的全量代码覆盖结果。
13.可选的,在基于所述全量代码覆盖结果和所述增量代码,得到当前的增量代码覆盖结果之后,所述方法还包括:
14.显示当前的增量代码覆盖结果。
15.可选的,所述显示当前的增量代码覆盖结果,包括:
16.基于将当前的增量代码覆盖结果添加至预设的django模板中,生成用于显示当前的增量代码覆盖结果的页面,并显示所述页面的链接;
17.当检测到所述页面的链接被触发时,显示所述页面。
18.可选的,所述获取当前已执行的测试用例对应的增量代码,包括:
19.获取所述待测软件的当前版本号和基线版本号;
20.从预设路径下分别获取所述当前版本号对应的当前代码,以及所述基线版本号对应的基线代码;
21.通过比较所述当前代码和所述基线代码,得到当前已执行的测试用例对应的增量代码。
22.可选的,所述全量代码覆盖结果包括用于表示每一行代码是否被覆盖的标识;
23.所述基于所述全量代码覆盖结果和所述增量代码,得到当前的增量代码覆盖结果,包括:
24.基于所述标识,从所述增量代码中确定被覆盖的代码,作为目标代码;
25.基于所述目标代码,生成当前的增量代码覆盖结果。
26.可选的,所述基于所述目标代码,生成当前的增量代码覆盖结果,包括:
27.计算所述目标代码在所述增量代码中所占的比例,作为增量代码覆盖率;
28.生成当前的增量代码覆盖结果;其中,当前的增量代码覆盖结果包括所述增量代码覆盖率,以及所述增量代码的标识。
29.第二方面,为了达到上述目的,本发明实施例公开了一种代码覆盖结果生成装置,其特征在于,所述装置包括:
30.全量代码覆盖结果获取模块,用于在基于预设测试用例对待测软件进行测试的过程中,当检测到满足预设条件时,获取当前已执行的测试用例对应的全量代码覆盖结果;
31.增量代码获取模块,用于获取当前已执行的测试用例对应的增量代码;
32.增量代码覆盖结果获取模块,用于基于所述全量代码覆盖结果和所述增量代码,得到当前的增量代码覆盖结果。
33.可选的,所述全量代码覆盖结果获取模块,具体用于在基于预设测试用例对待测软件进行测试的过程中,当检测到用于获取增量覆盖率的组件被触发时,获取当前已执行的测试用例对应的全量代码覆盖结果;
34.或者,
35.在基于预设测试用例对待测软件进行测试的过程中,当达到指定时刻时,获取当前已执行的测试用例对应的全量代码覆盖结果。
36.可选的,所述装置还包括:
37.显示模块,用于在基于所述全量代码覆盖结果和所述增量代码,得到当前的增量代码覆盖结果之后,显示当前的增量代码覆盖结果。
38.可选的,所述显示模块,具体用于基于将当前的增量代码覆盖结果添加至预设的django模板中,生成用于显示当前的增量代码覆盖结果的页面,并显示所述页面的链接;
39.当检测到所述页面的链接被触发时,显示所述页面。
40.可选的,所述增量代码获取模块,具体用于获取所述待测软件的当前版本号和基线版本号;
41.从预设路径下分别获取所述当前版本号对应的当前代码,以及所述基线版本号对应的基线代码;
42.通过比较所述当前代码和所述基线代码,得到当前已执行的测试用例对应的增量代码。
43.可选的,所述全量代码覆盖结果包括用于表示每一行代码是否被覆盖的标识;
44.所述增量代码覆盖结果获取模块,包括:
45.目标代码确定子模块,用于基于所述标识,从所述增量代码中确定被覆盖的代码,作为目标代码;
46.增量代码覆盖结果生成子模块,用于基于所述目标代码,生成当前的增量代码覆盖结果。
47.可选的,所述增量代码覆盖结果生成子模块,具体用于计算所述目标代码在所述增量代码中所占的比例,作为增量代码覆盖率;
48.生成当前的增量代码覆盖结果;其中,当前的增量代码覆盖结果包括所述增量代码覆盖率,以及所述增量代码的标识。
49.在本发明实施的另一方面,为了达到上述目的,本发明实施例还公开了一种电子设备,所述电子设备包括处理器、通信接口、存储器和通信总线,其中,所述处理器,所述通信接口,所述存储器通过所述通信总线完成相互间的通信;
50.所述存储器,用于存放计算机程序;
51.所述处理器,用于执行所述存储器上所存放的程序时,实现如上述任一所述的代码覆盖结果生成方法。
52.在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现如上述任一所述的代码覆盖结果生成方法。
53.本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的代码覆盖结果生成方法。
54.本发明实施例有益效果:
55.本发明实施例提供的代码覆盖结果生成方法,可以在基于预设测试用例对待测软件进行测试的过程中,当检测到满足预设条件时,获取当前已执行的测试用例对应的全量代码覆盖结果;获取当前已执行的测试用例对应的增量代码;基于全量代码覆盖结果和增量代码,得到当前的增量代码覆盖结果。如此,能够直接得到增量代码覆盖结果,降低增量代码覆盖结果的获取成本。
56.当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
57.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
58.图1为本发明实施例提供的一种代码覆盖结果生成方法的流程图;
59.图2为本发明实施例提供的另一种代码覆盖结果生成方法的流程图;
60.图3为本发明实施例提供的另一种代码覆盖结果生成方法的流程图;
61.图4为本发明实施例提供的另一种代码覆盖结果生成方法的流程图;
62.图5为本发明实施例提供的另一种代码覆盖结果生成方法的流程图;
63.图6为本发明实施例提供的另一种代码覆盖结果生成方法的流程图;
64.图7为本发明实施例提供的一种代码覆盖结果生成装置的结构图;
65.图8为本发明实施例提供的一种电子设备的结构图。
具体实施方式
66.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本技术所获得的所有其他实施例,都属于本发明保护的范围。
67.相关技术中,测试人员在基于测试工具对待测软件进行测试时,只能通过手动打开该测试工具(例如,jenkins(一个开源软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能))生成的测试结果文件夹,查看生成的代码覆盖结果。另外,测试结果文件夹中也只记录有全量代码覆盖结果。测试人员若要得到增量代码覆盖结果,则需要人工基于测试结果文件夹中记录的全量代码覆盖结果进行统计,增大人工成本。
68.为了解决上述问题,本发明实施例提供了一种代码覆盖结果生成方法,该方法可以应用于电子设备,具体的,该电子设备用于在对待测软件进行测试时,生成相应的代码覆盖结果。参见图1,图1为本发明实施例提供的一种代码覆盖结果生成方法的流程图,该方法可以包括以下步骤:
69.s101:在基于预设测试用例对待测软件进行测试的过程中,当检测到满足预设条件时,获取当前已执行的测试用例对应的全量代码覆盖结果。
70.s102:获取当前已执行的测试用例对应的增量代码。
71.s103:基于全量代码覆盖结果和增量代码,得到当前的增量代码覆盖结果。
72.本发明实施例提供的代码覆盖结果生成方法,能够直接得到增量代码覆盖结果,相对于相关技术中人工统计得到增量代码覆盖结果,能够降低增量代码覆盖结果的获取成本。
73.针对步骤s101,预设测试用例可以由测试人员基于需求设置,用于对待测软件的功能进行测试。例如,基于预设测试用例可以对待测软件的用户登录功能、资金支付功能等进行测试。
74.针对步骤s102,一个测试用例可以对应实现一项功能的代码,或者,也可以对应实现多项功能的代码。进而,当满足预设条件时,可以确定当前已执行的测试用例,并从对应的代码中确定出增量代码。
75.在一个实施例中,可以基于预设代码覆盖率统计工具,获取当前已执行的测试用例对应的全量代码覆盖结果。例如,预设代码覆盖率统计工具可以为jacoco(为基于jvm运行的代码提供代码覆盖率统计,期望提供轻量级的、可伸缩的、文档较全的库文件来集成各类构建和开发工具)。相应的,可以在待测软件中安装jacoco插件,进而,在对待测软件进行测试的过程中,可以启动jacoco服务,获取全量代码覆盖结果。
76.在一个实施例中,上述步骤s101可以包括以下步骤中任一项:
77.步骤一:在基于预设测试用例对待测软件进行测试的过程中,当检测到用于获取增量覆盖率的组件被触发时,获取当前已执行的测试用例对应的全量代码覆盖结果。
78.步骤二:在基于预设测试用例对待测软件进行测试的过程中,当达到指定时刻时,获取当前已执行的测试用例对应的全量代码覆盖结果。
79.在本发明实施例中,可以根据测试人员的需要,采取不同的方式获取当前已执行的测试用例对应的全量代码覆盖结果。
80.一种实现方式中,可以基于django(一个用于开发web应用程序的开发框架)框架,结合jenkins平台的jenkins job获取增量代码覆盖结果。
81.示例性地,测试人员可以根据需求设置用于获取增量代码覆盖结果的jenkins job的创建时间(即指定时刻),进而,当达到指定时刻时,可以启动jenkins job,以获取增量代码覆盖结果。
82.另外,在一个实施例中,基于django框架可以设置用于获取增量覆盖率的组件(可以称为目标组件),相应的,当测试人员需要获取当前的增量代码覆盖结果事,可以输入针对该目标组件的触发指令。进而,在检测到该目标组件被触发时,则可以确定满足预设条件,获取当前已执行的测试用例对应的全量代码覆盖结果和增量代码,得到当前的增量代码覆盖结果,以实现增量代码覆盖结果的实时获取。
83.在一个实施例中,参见图2,在图1的基础上,在步骤s103之后,该方法还可以包括以下步骤:
84.s104:显示当前的增量代码覆盖结果。
85.在本发明实施中,在得到当前的增量代码覆盖结果后,还可以直接显示当前的增量代码覆盖结果。
86.在一个实施例中,参见图3,在图2的基础上,上述步骤s104可以包括以下步骤:
87.s1041:基于将当前的增量代码覆盖结果添加至预设的django模板中,生成用于显示当前的增量代码覆盖结果的页面,并显示页面的链接。
88.s1042:当检测到页面的链接被触发时,显示页面。
89.在本发明实施例中,可以基于django框架对待测软件进行测试,相应的,在得到当前的增量代码覆盖结果后,可以将当前的增量代码覆盖结果添加至预设的django模板中,能够生成用于显示当前的增量代码覆盖结果的页面。
90.进而,则可以显示该页面的链接,相应的,当测试人员点击该连接时,则可以跳转至显示该页面,即,显示该页面包含的当前的增量代码覆盖结果。
91.基于上述处理,能够方便用户查看当前的增量代码覆盖结果。
92.在一个实施例中,参见图4,在图1的基础上,上述步骤s102可以包括以下步骤:
93.s1021:获取待测软件的当前版本号和基线版本号。
94.s1022:从预设路径下分别获取当前版本号对应的当前代码,以及基线版本号对应的基线代码。
95.s1023:通过比较当前代码和基线代码,得到当前已执行的测试用例对应的增量代码。
96.其中,当前版本号可以为待测软件当前的版本号,基线版本号可以为待测软件的历史版本号。版本号可以用commit id(提交标识)表示。当前版本号对应的代码,与基线版
本好对应的代码之间的差异,也就是增量代码。预设路径用于存储待测软件对应的代码。
97.示例性地,可以在git仓库的根目录,基于git diff(差异比较)指令,确定当前代码和基线代码之间的差异,也就是,当前版本号相对于基线版本号的增量代码,进而,可以从该差异中确定当前已执行的测试用例对应的增量代码。
98.在一个实施例中,全量代码覆盖结果包括用于表示每一行代码是否被覆盖的标识,相应的,参见图5,上述步骤s103可以包括以下步骤:
99.s1031:基于标识,从增量代码中确定被覆盖的代码,作为目标代码。
100.s1032:基于目标代码,生成当前的增量代码覆盖结果。
101.在本发明实施例中,基于测试工具(例如,jenkins)得到的测试结果文件夹中,记录有表示每一行代码是否被覆盖的标识。
102.进而,在确定出当前已执行的测试用例对应的增量代码后,可以从各增量代码中,确定出对应的标识表示被覆盖的代码,得到目标代码。
103.然后,则可以基于目标代码生成当前的增量代码覆盖结果。
104.一种实现方式中,可以直接将目标代码作为当前的增量代码覆盖结果。
105.在一个实施例中,参见图6,上述步骤s1032可以包括以下步骤:
106.s10321:计算目标代码在增量代码中所占的比例,作为增量代码覆盖率。
107.s10322:生成当前的增量代码覆盖结果。其中,当前的增量代码覆盖结果包括增量代码覆盖率,以及增量代码的标识。
108.在本发明实施例中,在确定出目标代码后,可以计算目标代码在增量代码中所占的比例,得到增量代码覆盖率。
109.进而,可以生成包含该增量代码覆盖率,以及上述增量代码的标识的增量代码覆盖结果。
110.相应的,还可以显示生成的增量代码覆盖结果,使得测试人员可以直接查看到增量代码覆盖率,以及增量代码中被覆盖的代码和未被覆盖的代码。
111.基于相同的发明构思,本发明实施例还提供了一种代码覆盖结果生成装置,参见图7,图7为本发明实施例提供的一种代码覆盖结果生成装置的结构图,该装置可以包括:
112.全量代码覆盖结果获取模块701,用于在基于预设测试用例对待测软件进行测试的过程中,当检测到满足预设条件时,获取当前已执行的测试用例对应的全量代码覆盖结果;
113.增量代码获取模块702,用于获取当前已执行的测试用例对应的增量代码;
114.增量代码覆盖结果获取模块703,用于基于所述全量代码覆盖结果和所述增量代码,得到当前的增量代码覆盖结果。
115.可选的,所述全量代码覆盖结果获取模块701,具体用于在基于预设测试用例对待测软件进行测试的过程中,当检测到用于获取增量覆盖率的组件被触发时,获取当前已执行的测试用例对应的全量代码覆盖结果;
116.或者,
117.在基于预设测试用例对待测软件进行测试的过程中,当达到指定时刻时,获取当前已执行的测试用例对应的全量代码覆盖结果。
118.可选的,所述装置还包括:
119.显示模块,用于在基于所述全量代码覆盖结果和所述增量代码,得到当前的增量代码覆盖结果之后,显示当前的增量代码覆盖结果。
120.可选的,所述显示模块,具体用于基于将当前的增量代码覆盖结果添加至预设的django模板中,生成用于显示当前的增量代码覆盖结果的页面,并显示所述页面的链接;
121.当检测到所述页面的链接被触发时,显示所述页面。
122.可选的,所述增量代码获取模块702,具体用于获取所述待测软件的当前版本号和基线版本号;
123.从预设路径下分别获取所述当前版本号对应的当前代码,以及所述基线版本号对应的基线代码;
124.通过比较所述当前代码和所述基线代码,得到当前已执行的测试用例对应的增量代码。
125.可选的,所述全量代码覆盖结果包括用于表示每一行代码是否被覆盖的标识;
126.所述增量代码覆盖结果获取模块703,包括:
127.目标代码确定子模块,用于基于所述标识,从所述增量代码中确定被覆盖的代码,作为目标代码;
128.增量代码覆盖结果生成子模块,用于基于所述目标代码,生成当前的增量代码覆盖结果。
129.可选的,所述增量代码覆盖结果生成子模块,具体用于计算所述目标代码在所述增量代码中所占的比例,作为增量代码覆盖率;
130.生成当前的增量代码覆盖结果;其中,当前的增量代码覆盖结果包括所述增量代码覆盖率,以及所述增量代码的标识。
131.本发明实施例还提供了一种电子设备,如图8所示,包括处理器801、通信接口802、存储器803和通信总线804,其中,处理器801,通信接口802,存储器803通过通信总线804完成相互间的通信,
132.存储器803,用于存放计算机程序;
133.处理器801,用于执行存储器803上所存放的程序时,实现如下步骤:
134.在基于预设测试用例对待测软件进行测试的过程中,当检测到满足预设条件时,获取当前已执行的测试用例对应的全量代码覆盖结果;
135.获取当前已执行的测试用例对应的增量代码;
136.基于所述全量代码覆盖结果和所述增量代码,得到当前的增量代码覆盖结果。
137.上述电子设备提到的通信总线可以是外设部件互连标准(peripheral component interconnect,pci)总线或扩展工业标准结构(extended industry standard architecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
138.通信接口用于上述电子设备与其他设备之间的通信。
139.存储器可以包括随机存取存储器(random access memory,ram),也可以包括非易失性存储器(non-volatile memory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
140.上述的处理器可以是通用处理器,包括中央处理器(central processing unit,
cpu)、网络处理器(network processor,np)等;还可以是数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
141.在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一服务器测试方法的步骤。
142.在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一服务器测试方法。
143.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solid state disk(ssd))等。
144.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
145.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备、计算机可读存储介质以及计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
146.以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1