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

基于动态注入的代码覆盖率测试方法、装置、系统及介质与流程

2022-12-31 14:40:59 来源:中国专利 TAG:


1.本发明涉及测试技术领域,尤其涉及基于动态注入的代码覆盖率测试方法、装置、系统及介质。


背景技术:

2.代码覆盖是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率,是软件开发测试过程一个很重要的指标。
3.测试过程中,由于一些异常的场景很难通过常规的功能测试触发异常代码的执行,因此为提升代码测试覆盖率,通常会采用一些非功能测试手段,比如通过混沌测试等模拟一些网络、系统的异常,进而触发导致程序异常代码的执行。
4.这种提升代码覆盖率的测试方式对程序代码的触发有较大的随机性,且模拟异常后会对整个程序产生影响,很可能影响其它非测试模块的运行,增加了代码覆盖率测试过程的不稳定性。


技术实现要素:

5.鉴于上述现有技术的不足,本发明的目的在于提供可应用于金融科技或其它相关领域的基于动态注入的代码覆盖率测试方法、装置、系统及介质,旨在通过精准动态注入异常的方式提高代码覆盖率的同时也确保测试过程的稳定性。
6.本发明的技术方案如下:
7.一种基于动态注入的代码覆盖率测试方法,包括:
8.获取待测项目源码,对所述待测项目源码进行项目构建与测试,得到覆盖率信息;
9.根据所述覆盖率信息确认未覆盖的异常代码;
10.启动沙箱模块,通过所述沙箱模块将所述异常代码传递至预设方法处后触发功能测试;
11.当监听到所述预设方法被执行时,获取所述异常代码的执行状态并更新所述覆盖率信息。
12.在一个实施例中,所述获取待测项目源码,对所述待测项目源码进行项目构建与测试,得到覆盖率信息,包括:
13.根据项目地址在源代码仓库中获取待测项目源码;
14.对所述待测项目源码进行项目构建,得到项目打包文件;
15.将所述项目打包文件部署至测试服务器上进行测试,并接收所述测试服务器反馈的覆盖率信息。
16.在一个实施例中,所述启动沙箱模块,通过所述沙箱模块将所述异常代码传递至预设方法处后触发功能测试之前,所述方法还包括:
17.获取虚拟机列表,根据项目标识在所述虚拟机列表中确认待测项目所在的虚拟机进程标识;
18.根据所述虚拟机进程标识将沙箱模块挂载至目标虚拟机进程上。
19.在一个实施例中,所述启动沙箱模块,通过所述沙箱模块将所述异常代码传递至预设方法处后触发功能测试,包括:
20.启动沙箱模块;
21.由所述沙箱模块在接收到代码注入请求时解析得到传入参数;
22.根据所述传入参数在沙箱环境下将所述异常代码传递至预设方法处后触发功能测试。
23.在一个实施例中,所述由沙箱模块在接收到代码注入请求时解析得到传入参数之前,所述方法还包括:
24.启动预设web容器,通过所述预设web容器接收代码注入请求并发送至所述沙箱模块。
25.在一个实施例中,所述传入参数包括类名、方法名、异常类型和异常内容。
26.在一个实施例中,所述代码注入请求为http请求。
27.一种基于动态注入的代码覆盖率测试装置,包括:
28.获取模块,用于获取待测项目源码,对所述待测项目源码进行项目构建与测试,得到覆盖率信息;
29.确认模块,用于根据所述覆盖率信息确认未覆盖的异常代码;
30.隔离测试模块,用于启动沙箱模块,通过所述沙箱模块将所述异常代码传递至预设方法处后触发功能测试;
31.更新模块,用于当监听到所述预设方法被执行时,获取所述异常代码的执行状态并更新所述覆盖率信息。
32.一种基于动态注入的代码覆盖率测试系统,所述系统包括至少一个处理器;以及,
33.与所述至少一个处理器通信连接的存储器;其中,
34.所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述基于动态注入的代码覆盖率测试方法。
35.一种非易失性计算机可读存储介质,所述非易失性计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行时,可使得所述一个或多个处理器执行上述的基于动态注入的代码覆盖率测试方法。
36.有益效果:本发明公开了基于动态注入的代码覆盖率测试方法、装置、系统及介质,相比于现有技术,本发明实施例通过对项目测试中未覆盖到的异常代码针对性地进行代码注入与测试,使得在正常业务逻辑下无法执行的代码能够实现针对性的异常注入执行,且通过沙箱模块有效对测试环境进行隔离,在代码注入与测试是不会影响到其它程序模块的正常运行,提高测试中代码覆盖率的同时也确保了测试稳定性。
附图说明
37.下面将结合附图及实施例对本发明作进一步说明,附图中:
38.图1为本发明实施例提供的基于动态注入的代码覆盖率测试方法的一个流程图;
39.图2为本发明实施例提供的基于动态注入的代码覆盖率测试方法中步骤s100的一
个流程图;
40.图3为本发明实施例提供的基于动态注入的代码覆盖率测试方法的另一个流程图;
41.图4为本发明实施例提供的基于动态注入的代码覆盖率测试方法中步骤s300的一个流程图;
42.图5为本发明实施例提供的基于动态注入的代码覆盖率测试方法中步骤s300的另一个流程图;
43.图6为本发明实施例提供的基于动态注入的代码覆盖率测试装置的功能模块示意图;
44.图7为本发明实施例提供的基于动态注入的代码覆盖率测试系统的硬件结构示意图。
具体实施方式
45.为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。以下结合附图对本发明实施例进行介绍。
46.请参阅图1,图1为本发明提供的基于动态注入的代码覆盖率测试方法一个实施例的流程图。本实施例提供的基于动态注入的代码覆盖率测试方法适用于对测试过程中未覆盖到的异常代码进行针对性精准注入测试的情况,具体应用于包括终端设备、网络和服务器构成的系统,其中网络为用于在终端设备和服务器直接提供通信链路的介质,其可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等;终端设备上的操作系统可以包括手持设备操作系统(iphone operating system,ios系统)、安卓系统或其他操作系统,终端设备通过网络连接到服务器以实现交互,从而进行接收或发送数据等操作,具体可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、便携式计算机和台式服务器等等。如图1所示,该方法具体包括如下步骤:
47.s100、获取待测项目源码,对所述待测项目源码进行项目构建与测试,得到覆盖率信息。
48.本实施例中,在进行项目测试时,先获取开发人员提交的待测项目源码,以对待测项目源码进行项目构建后进行独立的运行测试,此时可得到正常业务逻辑下的覆盖率测试结果,即覆盖率信息,其中包括了源代码的执行状态,以及根据执行状态计算得到的整个项目的代码覆盖率,通常以可视化的覆盖率统计报告输出展示。
49.在一个实施例中,请参阅图2,其为本发明实施例提供的基于动态注入的代码覆盖率测试方法中步骤s100的流程图,如图2所示,步骤s100包括:
50.s101、根据项目地址在源代码仓库中获取待测项目源码;
51.s102、对所述待测项目源码进行项目构建,得到项目打包文件;
52.s103、将所述项目打包文件部署至测试服务器上进行测试,并接收所述测试服务器反馈的覆盖率信息。
53.本实施例中,采用开源的分布式版本控制系统git进行项目源码的管理,其采用了分布式版本库的方式,使源代码的发布和交流极其方便,便于不同开发人员之间的合作。当
有项目源码提交至源代码仓库时均生成对应的项目地址,因此在项目测试时,基于项目地址准确获取待测项目源码。
54.通过maven的构建命令对获取到的待测项目源码进行项目构建,将待测项目源码打包构建为可以独立运行的jar包或war包等项目打包文件,将该项目打包文件部署至测试服务器上进行功能测试,同时在待测项目上附加上覆盖率统计工具,以根据测试情况反馈现有的覆盖率信息。
55.s200、根据所述覆盖率信息确认未覆盖的异常代码。
56.本实施例中,根据测试得到的覆盖率信息对待测项目源码进行代码执行状态的确认,得到其中未覆盖的异常代码,即通过正常业务逻辑下未触发执行的代码块,针对未触发的异常代码再进行后续的针对性动态注入测试,以提高项目整体的代码覆盖率。
57.s300、启动沙箱模块,通过所述沙箱模块将所述异常代码传递至预设方法处后触发功能测试;
58.s400、当监听到所述预设方法被执行时,获取所述异常代码的执行状态并更新所述覆盖率信息。
59.本实施例中,通过设置沙箱模块来实现针对性的代码注入隔离测试,sandbox(沙箱)是指一种技术,在这种技术中,软件运行在操作系统受限制的环境中。在计算机安全领域,沙箱是一种用于安全的运行程序的机制。它常常用来执行那些非可信的程序。非可信程序中的恶意代码对系统的影响将会被限制在沙箱内而不会影响到系统的其它部分。沙箱技术按照一定的安全策略,通过严格限制非可信程序对系统资源的使用来实现隔离。
60.本实施例通过启动沙箱模块来将异常代码传递至指定类的指定方法下并触发功能测试,触发待测项目中预设方法的执行,使得在预设方法进入时执行传递的异常代码,达到测试时异常代码注入的目的,在预设方法被执行后将执行相应的事件并抛出异常,根据获取到的异常代码的执行状态及时更新覆盖率信息,通过异常代码注入的方式,使得之前测试时无法执行到的异常代码在测试环境中能被执行,实现代码覆盖率的提高且不会影响其它程序的正常运行。
61.在一个实施例中,请参阅图3,其为本发明实施例提供的基于动态注入的代码覆盖率测试方法的另一个流程图,如图3所示,步骤s300之前,方法还包括:
62.s400、获取虚拟机列表,根据项目标识在所述虚拟机列表中确认待测项目所在的虚拟机进程标识;
63.s500、根据所述虚拟机进程标识将沙箱模块挂载至目标虚拟机进程上。
64.本实施例中,沙箱模块可以被动态地挂载到某个正在运行的目标jvm(javavirtualmachine,java虚拟机)进程之上,沙箱模块工作完之后还可以被动态地从目标jvm进程卸载掉,被卸载之后,沙箱模块对目标进程产生的影响会随即消失,从而实现非侵入的安全隔离。
65.因此在实现动态注入隔离测试时,先获取java虚拟机列表,并且通过待测项目标识例如项目名称、项目id等在列表中得到该项目所在的虚拟机进程标识,具体为进程id,待测项目所在的进程即为目标虚拟机进程,因此通过attach机制将沙箱模块挂载到与进程id对应的目标虚拟机进程,实现对目标进程的挂载。
66.在一个实施例中,请参阅图4,其为本发明实施例提供的基于动态注入的代码覆盖
率测试方法中步骤s300的一个流程图,如图4所示,步骤s300包括:
67.s301、启动沙箱模块;
68.s302、由所述沙箱模块在接收到代码注入请求时解析得到传入参数;
69.s303、根据所述传入参数在沙箱环境下将所述异常代码传递至预设方法处后触发功能测试。
70.本实施例中,启动沙箱模块可依赖java agent即探针进行启动,以形成相应的沙箱环境,可与外部进程进行通信接收数据,当接收到外部发送的代码注入请求时,则对请求进行解析得到传入参数,具体的代码注入请求为http请求,传入参数包括类名、方法名、异常类型和异常内容,根据传入参数,可以任意制定在某个方法执行前后抛出什么类型异常以及异常内容,达到异常代码针对性注入的目的,在沙箱环境下将所述异常代码传递至预设方法处后触发功能测试,即只是针对指定的类中注入异常代码,只会影响到程序的指定类,并不会对测试环境产生影响,测试环境中的其他的程序以及其它模块依然可以正常运行,实现不影响其它程序运行的安全隔离测试。
71.在一个实施例中,请参阅图5,其为本发明实施例提供的基于动态注入的代码覆盖率测试方法中步骤s300的另一个流程图,如图5所示,步骤s302之前,方法包括:
72.s304、启动预设web容器,通过所述预设web容器接收代码注入请求并发送至所述沙箱模块。
73.本实施例中,在启动了沙箱模块后随即启动一个内部的预设web容器,例如jetty服务器,通过该服务器接收外部进程发送的代码注入请求并发送给沙箱模块,具体通过http请求来实现外部进程与沙箱之间的通信,以便实现动态灵活的异常代码注入。
74.本发明另一实施例提供一种基于动态注入的代码覆盖率测试装置,如图6所示,装置1包括:
75.获取模块11,用于获取待测项目源码,对所述待测项目源码进行项目构建与测试,得到覆盖率信息;
76.确认模块12,用于根据所述覆盖率信息确认未覆盖的异常代码;
77.隔离测试模块13,用于启动沙箱模块,通过所述沙箱模块将所述异常代码传递至预设方法处后触发功能测试;
78.更新模块14,用于当监听到所述预设方法被执行时,获取所述异常代码的执行状态并更新所述覆盖率信息。
79.本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段,比程序更适合于描述基于动态注入的代码覆盖率测试的执行过程,各模块的具体实施方式请参考上述对应的方法实施例,此处不再赘述。
80.在一个实施例中,所述获取模块11,包括:
81.获取单元,用于根据项目地址在源代码仓库中获取待测项目源码;
82.构建单元,用于对所述待测项目源码进行项目构建,得到项目打包文件;
83.部署测试单元,用于将所述项目打包文件部署至测试服务器上进行测试,并接收所述测试服务器反馈的覆盖率信息。
84.在一个实施例中,所述装置1,还包括:
85.虚拟标识模块,用于获取虚拟机列表,根据项目标识在所述虚拟机列表中确认待
测项目所在的虚拟机进程标识;
86.挂载模块,用于根据所述虚拟机进程标识将沙箱模块挂载至目标虚拟机进程上。
87.在一个实施例中,所述隔离测试模块13,包括:
88.启动单元,用于启动沙箱模块;
89.解析单元,用于由所述沙箱模块在接收到代码注入请求时解析得到传入参数;
90.传递测试单元,用于根据所述传入参数在沙箱环境下将所述异常代码传递至预设方法处后触发功能测试。
91.在一个实施例中,所述隔离测试模块13,还包括:
92.容器启动单元,用于启动预设web容器,通过所述预设web容器接收代码注入请求并发送至所述沙箱模块。
93.在一个实施例中,所述传入参数包括类名、方法名、异常类型和异常内容。
94.在一个实施例中,所述代码注入请求为http请求。
95.本发明另一实施例提供一种基于动态注入的代码覆盖率测试系统,如图7所示,系统10包括:
96.一个或多个处理器110以及存储器120,图7中以一个处理器110为例进行介绍,处理器110和存储器120可以通过总线或者其他方式连接,图7中以通过总线连接为例。
97.处理器110用于完成系统10的各种控制逻辑,其可以为通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)、单片机、arm(acorn risc machine)或其它可编程逻辑器件、分立门或晶体管逻辑、分立的硬件组件或者这些部件的任何组合。还有,处理器110还可以是任何传统处理器、微处理器或状态机。处理器110也可以被实现为计算设备的组合,例如,dsp和微处理器的组合、多个微处理器、一个或多个微处理器结合dsp和/或任何其它这种配置。
98.存储器120作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中的基于动态注入的代码覆盖率测试方法对应的程序指令。处理器110通过运行存储在存储器120中的非易失性软件程序、指令以及单元,从而执行系统10的各种功能应用以及数据处理,即实现上述方法实施例中的基于动态注入的代码覆盖率测试方法。
99.存储器120可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据系统10使用所创建的数据等。此外,存储器120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器120可选包括相对于处理器110远程设置的存储器,这些远程存储器可以通过网络连接至系统10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
100.一个或者多个单元存储在存储器120中,当被一个或者多个处理器110执行时,实现以下步骤:
101.获取待测项目源码,对所述待测项目源码进行项目构建与测试,得到覆盖率信息;
102.根据所述覆盖率信息确认未覆盖的异常代码;
103.启动沙箱模块,通过所述沙箱模块将所述异常代码传递至预设方法处后触发功能测试;
104.当监听到所述预设方法被执行时,获取所述异常代码的执行状态并更新所述覆盖率信息。
105.在一个实施例中,所述获取待测项目源码,对所述待测项目源码进行项目构建与测试,得到覆盖率信息,包括:
106.根据项目地址在源代码仓库中获取待测项目源码;
107.对所述待测项目源码进行项目构建,得到项目打包文件;
108.将所述项目打包文件部署至测试服务器上进行测试,并接收所述测试服务器反馈的覆盖率信息。
109.在一个实施例中,所述启动沙箱模块,通过所述沙箱模块将所述异常代码传递至预设方法处后触发功能测试之前,所述方法还包括:
110.获取虚拟机列表,根据项目标识在所述虚拟机列表中确认待测项目所在的虚拟机进程标识;
111.根据所述虚拟机进程标识将沙箱模块挂载至目标虚拟机进程上。
112.在一个实施例中,所述启动沙箱模块,通过所述沙箱模块将所述异常代码传递至预设方法处后触发功能测试,包括:
113.启动沙箱模块;
114.由所述沙箱模块在接收到代码注入请求时解析得到传入参数;
115.根据所述传入参数在沙箱环境下将所述异常代码传递至预设方法处后触发功能测试。
116.在一个实施例中,由所述沙箱模块在接收到代码注入请求时解析得到传入参数之前,所述方法还包括:
117.启动预设web容器,通过所述预设web容器接收代码注入请求并发送至所述沙箱模块。
118.在一个实施例中,所述传入参数包括类名、方法名、异常类型和异常内容。
119.在一个实施例中,所述代码注入请求为http请求。
120.本发明实施例提供了一种非易失性计算机可读存储介质,计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,例如,执行以上描述的图1中的方法步骤s100至步骤s400。
121.作为示例,非易失性存储介质能够包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦rom(eeprom)或闪速存储器。易失性存储器能够包括作为外部高速缓存存储器的随机存取存储器(ram)。通过说明而非限制,ram可以以诸如同步ram(sram)、动态ram、(dram)、同步dram(sdram)、双数据速率sdram(ddrsdram)、增强型sdram(esdram)、synchlink dram(sldram)以及直接rambus(兰巴斯)ram(drram)之类的许多形式得到。本文中所描述的操作环境的所公开的存储器组件或存储器旨在包括这些和/或任何其他适合类型的存储器中的一个或多个。
122.综上,本发明公开的基于动态注入的代码覆盖率测试方法、装置、系统及介质中,方法通过获取待测项目源码,对待测项目源码进行项目构建与测试,得到覆盖率信息;根据覆盖率信息确认未覆盖的异常代码;启动沙箱模块,通过沙箱模块将异常代码传递至预设方法处后触发功能测试;当监听到预设方法被执行时,获取异常代码的执行状态并更新覆
盖率信息。通过对项目测试中未覆盖到的异常代码针对性地进行代码注入与测试,使得在正常业务逻辑下无法执行的代码能够实现针对性的异常注入执行,且通过沙箱模块有效对测试环境进行隔离,在代码注入与测试是不会影响到其它程序模块的正常运行,提高测试中代码覆盖率的同时也确保了测试稳定性。
123.当然,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关硬件(如处理器,控制器等)来完成,所述的计算机程序可存储于一非易失性计算机可读取的存储介质中,该计算机程序在执行时可包括如上述各方法实施例的流程。其中所述的存储介质可为存储器、磁碟、软盘、闪存、光存储器等。
124.应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献