CN111930619B - 一种实时覆盖率统计方法、计算机设备及可读存储介质 - Google Patents
一种实时覆盖率统计方法、计算机设备及可读存储介质 Download PDFInfo
- Publication number
- CN111930619B CN111930619B CN202010782927.0A CN202010782927A CN111930619B CN 111930619 B CN111930619 B CN 111930619B CN 202010782927 A CN202010782927 A CN 202010782927A CN 111930619 B CN111930619 B CN 111930619B
- Authority
- CN
- China
- Prior art keywords
- code
- coverage
- information
- coverage rate
- old
- 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
- 238000007619 statistical method Methods 0.000 title claims abstract description 7
- 238000000034 method Methods 0.000 claims abstract description 63
- 230000008569 process Effects 0.000 claims abstract description 14
- 238000012858 packaging process Methods 0.000 claims abstract description 6
- 238000004806 packaging method and process Methods 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 10
- 238000013519 translation Methods 0.000 claims description 9
- 238000002513 implantation Methods 0.000 claims description 8
- 238000012805 post-processing Methods 0.000 claims description 6
- 230000001419 dependent effect Effects 0.000 claims description 5
- 239000007943 implant Substances 0.000 claims description 5
- 238000012986 modification Methods 0.000 claims description 4
- 230000004048 modification Effects 0.000 claims description 4
- 238000007639 printing Methods 0.000 claims description 4
- 238000009434 installation Methods 0.000 claims description 3
- 238000012360 testing method Methods 0.000 abstract description 18
- 238000012423 maintenance Methods 0.000 abstract description 3
- 230000009466 transformation Effects 0.000 abstract description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000012856 packing Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 235000020289 caffè mocha Nutrition 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种实时覆盖率统计方法、计算机设备及可读存储介质,涉及计算机软件技术领域,适用于JavaScript代码,包括如下步骤:在代码打包过程中植入标识位和上报任务的代码;在代码执行过程中上报任务根据标识位上报覆盖率信息;服务器接收并处理覆盖率信息后储存;客户端请求并展示覆盖率信息。本发明所提供的方法节省单元测试代码编写和后期维护的人力成本;只需一次改造即可实现在集成测试阶段JavaScript代码全量和增量覆盖率的分布式统计。
Description
【技术领域】
本发明涉及计算机软件技术领域,具体涉及一种实时覆盖率统计方法、计算机设备及可读存储介质。
【背景技术】
目前,前端覆盖率统计依赖于mocha等单元测试框架,同时需要开发人员自主编写单元测试用例,并且现有技术中仅能统计单元测试覆盖率,没有适用于集成测试的统计方案,无法完成集成测试阶段的覆盖率统计需求。并且,单元测试用例编写需要一定的成本,且需要后续维护;仅能适用于单元测试的覆盖率统计,不能集成到测试流程中去,同时不具备分布式统计的能力和增量行代码覆盖率统计的能力。
【发明内容】
为解决前述问题,本发明提供了一种实时覆盖率统计方法,节省单元测试代码编写和后期维护的人力成本;只需一次改造即可实现在集成测试阶段JavaScript代码全量和增量覆盖率的分布式统计。
为了达到上述目的,本发明采用如下技术方案:
一种实时覆盖率统计方法,所述实时覆盖率统计方法适用于JavaScript代码,包括如下步骤:
在代码打包的过程中植入标识位的代码和上报任务的代码;
在代码执行的过程中,上报任务根据被执行的代码的标识位上报覆盖率信息;
服务器接收并处理覆盖率信息后储存;
客户端请求并展示覆盖率信息。
可选的,代码打包包括-NODE端代码打包,-NODE端代码打包的过程中植入标识位的代码为:在安装依赖包的后置处理流程中加入打包脚本,将-NODE端代码转换成带有标识位的代码。
可选的,-NODE端代码含有//@ts-ignore*注释,打包脚本包括nyc命令,用以在TypeScript的代码植入标识位的代码;在执行nyc命令时,对语句行注释和语句块注释均进行换行;如果一个//@ts-ignore注释同时解析出头部注释和结尾注释,则删去结尾注释的打印;如果//@ts-ignore*注释在语句块的开头,则开启retainLine,对语句块执行nyc命令结束后关闭retainLine。
可选的,所述后置处理流程为npm install提供的钩子方法,其中,npm install为安装依赖包的命令。
可选的,代码打包包括客户端代码打包,客户端代码打包的过程中,使用babel-plugin-istanbul为客户端代码植入标识位的代码,在所有标识位的代码植入完成后,为每一个代码文件植入上报任务的代码。
可选的,babel-plugin-istanbul中的babel插件具有visitor模式,visitor模式的Program具有enter、exit以及抽象语法树的节点的方法处理器,在visitor模式下,访问者遍历抽象语法树的所有节点,每当进入一个节点时,先进入Program的enter,方法处理器根据进入的节点的类型分发至对应的方法,为抽象语法树植入新的值。
可选的,babel插件具有模板方法和追加方法,访问者进入Program的exit时,使用模板方法和追加方法完成上报任务的代码的植入。
可选的,代码执行包括-NODE环境,在-NODE环境中,所有被执行的代码的标识位被记录到_global变量中存储,形成覆盖率信息,在-NODE环境中启动应用时,注册定时任务,定时将_global变量中存储的覆盖率信息上报至服务器。
可选的,代码执行包括客户端环境,在客户端环境中,运行JavaScript文件时,将覆盖率信息和上报任务挂载到window对象上,定时将window对象上的覆盖率信息进行上报,或者当window对象销毁时进行一次上报。
可选的,所述覆盖率信息包括启动的应用名称、目前运行的分支名以及所处环境。
可选的,服务器端接收到上报的覆盖率信息,根据覆盖率信息中的分支名区分覆盖率数据,具体包括:
根据分支名寻找该分支名对应的代码文件是否有已上报的覆盖率信息,若有已上报的覆盖率信息,则将该分支名对应的代码文件已上报的覆盖率信息作为旧记录,若无已上报的覆盖率信息,则将上报的覆盖率信息作为新记录,然后将新记录按分支名进行遍历,取出该分支名对应的代码文件的新记录,同时取出该分支名对应的代码文件的旧记录;
如果该分支名对应的代码文件没有旧记录,则使用该分支名对应的代码文件的新记录作为覆盖率;
如果该分支名对应的代码文件有旧记录,则对比新记录和旧记录,如果新记录和旧记录的结构信息没有发生变化,则将旧记录追加到新记录作为覆盖率;如果新记录和旧记录的结构信息发生变化,则将新记录平移至旧记录作为覆盖率,如果平移失败,则由新记录替代旧记录作为覆盖率;
将得到的覆盖率以分支名为key存储。
可选的,将新记录平移至旧记录作为覆盖率包括:
找到该分支名对应的代码文件的diff信息,从diff信息中提取出每一个修改行的旧行号和旧行号对应的新行号,遍历旧行号,在旧记录中寻找旧行号是否存在,如果存在,无需平移,使用新记录的覆盖率,如果不存在,计算旧行号的偏移量,得到与旧行号对应的新行号,计算旧行号的偏移量为:以该旧行号为终点,检索该旧行号前是否有新增行或删除行,每新增一行偏移量+1,每删除一行偏移量-1;
对比该旧行号在新记录中是否存在,如果存在,则将该旧行号在对应的旧记录中的行覆盖率平移到该旧行号对应的新行号在新记录中的行覆盖率上,如果不存在,则丢弃该旧行号在对应的旧记录中的行覆盖率,使用新记录的覆盖率;
循环上述步骤直至完成所有行的覆盖率平移。
可选的,覆盖率信息包括增量覆盖率信息和全量覆盖率信息,客户端请求并展示覆盖率信息包括通过分支名查看该分支的改动以及该分支对应的代码文件的增量覆盖率信息和全量覆盖率信息。
可选的,对于增量覆盖率信息,如果该分支名对应的分支存在,则对比出该分支新增的代码改动,记为diff信息,然后取出该分支对应的代码文件的覆盖率信息,如果该分支名对应的分支不存在,则无需展示;得到该分支对应的代码文件的覆盖率信息后,对比diff信息中的新行号和该分支对应的代码文件的覆盖率信息中与新行号对应的行覆盖率,得到所有新增行覆盖情况的完整信息并展示。
可选的,对于全量覆盖率信息,直接读取该分支对应的代码文件的覆盖率信息。
本发明具有如下有益效果:
发明了所提供的技术方案,只需要植入标识位和上报任务即可,接入成本低,对代码侵入性小,在集成测试阶段,仅凭借人工测试即可收集到代码的覆盖率,不依赖编写单元测试,节省代码编写和维护的人员成本。同时,本发明所提供的技术方案支持多人分布式实时统计,提高了统计效率的同时减少了错漏,支持增量代码行覆盖率统计和展示。
此外,本发明还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述的方法。
同时,本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的方法。
本发明的这些特点和优点将会在下面的具体实施方式以及附图中进行详细的揭露。本发明最佳的实施方式或手段将结合附图来详尽表现,但并非是对本发明技术方案的限制。另外,在每个下文和附图中出现的这些特征、要素和组件是具有多个,并且为了表示方便而标记了不同的符号或数字,但均表示相同或相似构造或功能的部件。
【附图说明】
下面结合附图对本发明作进一步说明:
图1为本发明实施例一的流程图;
图2为本发明实施例一中新记录平移至旧记录的流程图。
【具体实施方式】
下面结合本发明实施例的附图对本发明实施例的技术方案进行解释和说明,但下述实施例仅为本发明的优选实施例,并非全部。基于实施方式中的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得其他实施例,都属于本发明的保护范围。
在本说明书中引用的“一个实施例”或“实例”或“例子”意指结合实施例本身描述的特定特征、结构或特性可被包括在本专利公开的至少一个实施例中。短语“在一个实施例中”在说明书中的各位置的出现不必都是指同一个实施例。
实施例一:
如图1所示,一种实时覆盖率统计方法,适用于JavaScript代码,在JavaScript代码打包时植入标识位和上报任务,在JavaScript代码执行时,植入的标识位会记录下覆盖率信息,同时植入的上报任务会定时将覆盖率信息上报到服务器端,由服务器端完成数据的整理和存储,最后通过客户端展示覆盖率数据,具体包括如下步骤:
在代码打包的过程中植入标识位的代码和上报任务的代码。代码打包包括-NODE端代码打包和客户端代码打包。
对于-NODE端代码打包,-NODE端代码含有//@ts-ignore*注释,-NODE端代码打包的过程中植入标识位的代码为:在安装依赖包的后置处理流程中加入打包脚本,将-NODE端代码转换成带有表示为的代码。后置处理流程为npm install提供的钩子方法,在定义该钩子方法后,安装依赖包之后会自动执行该钩子方法,其中,npm install为安装依赖包的命令,打包脚本包括nyc命令,用以在TypeScript的代码植入标识位的代码,例如:./node_modules/@youzan/nyc/bin/nyc.js instrument--compact=false app appins
@youzan/nyc在开源的nyc包上额外处理了TypeScript类型的代码,其本身支持TypeScript的代码植入标识位,然后在应用启动文件的入口处完成注册定时上报任务和在应用启动时上报应用相关的信息到服务端,覆盖率信息包括启动的应用名称、目前运行的分支名以及所处环境,以这些信息来区分存储覆盖率信息,以保障数据不会发生混淆。
//@ts-ignore为该注释可以使TypeScript在打包的过程中忽略语法检查。当原代码中有//@ts-ignore*注释时,nyc处理之后的代码会使得该注释失效,原因是nyc流程中改变了该注释的位置,//@ts-ignore会跟在上一行的结尾,而不是下一个语句块的开头,因此导致该注释失效。因此:
在执行nyc命令时,由现有技术中只有块注释会进行换行,行注释不会换行改进为对语句行注释和语句块注释均进行换行;
如果一个//@ts-ignore注释同时解析出头部注释和结尾注释,在把抽象语法树打印成代码的过程中,会先打印头部注释,然后打印结尾注释,但是由于语句块的顺序,上一个语句的结尾注释,即//@ts-ignore会先被打印,而下一个头部注释由于重复所以不被打印了,所以删去结尾注释的打印;
如果//@ts-ignore*注释在语句块的开头,则开启retainLine,对语句块执行nyc命令结束后关闭retainLine。retainLine配置项的作用为使得语句块尽可能保持原代码的行号和代码结构,这样就能保证标识位的植入不影响原代码的结构,就不会使//@ts-ignore注释失效。
对于客户端代码打包,在客户端代码打包的过程中,使用babel-plugin-istanbul为客户端代码植入标识位的代码,babel-plugin-istanbul:利用babel的插件能力,在转换阶段可以自定义转换的方法。babel-plugin-istanbul中的babel插件具有visitor模式(访问者模式),visitor模式的Program(主程序)具有enter(入口)、exit(出口),以及若干种不同抽象语法树的节点的方法处理器,例如ImportDeclaration(导入声明)、Identifier(变量声明)等等。在visitor模式下,访问者遍历抽象语法树的所有节点,每当进入一个节点时,先进入Program的enter,方法处理器根据进入的节点的类型分发至对应的方法,为抽象语法树植入新的值,从而达到统计覆盖率的目的。
在所有标识位的代码植入完成后,为每一个代码文件植入上报任务的代码。babel插件具有模板方法和追加方法,访问者进入Program的exit时,使用模板方法和追加方法完成上报任务的代码的植入。
至此,完成植入标识位的代码和上报任务的代码。
在代码执行的过程中,上报任务根据被执行的代码的标识位上报覆盖率信息。代码执行包括-NODE环境和客户端环境。
在-NODE环境中,所有被执行的代码的标识位被记录到_global变量中存储,形成覆盖率信息,在-NODE环境中启动应用时,注册定时任务,定时将_global变量中存储的覆盖率信息上报至服务器。
在客户端环境中,运行JavaScript文件时,将覆盖率信息和上报任务挂载到window对象上,随着代码执行,window对象中的覆盖率信息的标识位也会随之改变,因此,定时将window对象上的覆盖率信息进行上报,或者当window对象销毁时进行一次上报。
服务器接收并处理覆盖率信息后储存。服务器端接收到上报的覆盖率信息,根据覆盖率信息中的分支名区分覆盖率数据,具体包括:
根据分支名寻找该分支名对应的代码文件是否有已上报的覆盖率信息,若有已上报的覆盖率信息,则将该分支名对应的代码文件已上报的覆盖率信息作为旧记录,若无已上报的覆盖率信息,则将上报的覆盖率信息作为新记录,然后将新记录按分支名进行遍历,取出该分支名对应的代码文件的新记录,同时取出该分支名对应的代码文件的旧记录。这一步骤分为三种情况:
1、如果该分支名对应的代码文件没有旧记录,则使用该分支名对应的代码文件的新记录作为覆盖率;
2、如果该分支名对应的代码文件有旧记录,对比新记录和旧记录,如果新记录和旧记录的结构信息没有发生变化,证明两者可以合并,则将旧记录追加到新记录作为覆盖率;
3、如果新记录和旧记录的结构信息发生变化,证明两者无法合并,则需要采用平移的方式,将新记录平移至旧记录作为覆盖率,如果平移失败,则由新记录替代旧记录作为覆盖率,抛弃旧记录。如图2所示,在这一情况中,将新记录平移至旧记录作为覆盖率包括:
找到该分支名对应的代码文件的diff信息,即修改信息,从diff信息中提取出每一个修改行的旧行号和旧行号对应的新行号,遍历旧行号,在旧记录中寻找旧行号是否存在,如果存在,证明该些覆盖率块对应的代码已经发生变化,无需平移,如果不存在,计算旧行号的偏移量,得到与旧行号对应的新行号,计算旧行号的偏移量为:以该旧行号为终点,检索该旧行号前是否有新增行或删除行,每新增一行偏移量+1,每删除一行偏移量-1;
对比该旧行号在新记录中是否存在,如果存在,则将该旧行号在对应的旧记录中的行覆盖率平移到该旧行号对应的新行号在新记录中的行覆盖率上,如果不存在,则丢弃该旧行号在对应的旧记录中的行覆盖率;
循环上述步骤直至完成所有行的覆盖率平移。
将得到的覆盖率以分支名为key存储。
至此,服务器完成接收并处理覆盖率信息后储存。
客户端请求并展示覆盖率信息。覆盖率信息包括增量覆盖率信息和全量覆盖率信息,客户端请求并展示覆盖率信息包括通过分支名查看该分支的改动以及该分支对应的代码文件的增量覆盖率信息和全量覆盖率信息。对于增量覆盖率信息,如果该分支名对应的分支存在,则对比出该分支新增的代码改动,记为diff信息,然后取出该分支对应的代码文件的覆盖率信息,如果该分支名对应的分支不存在,则无需展示;得到该分支对应的代码文件的覆盖率信息后,对比diff信息中的新行号和该分支对应的代码文件的覆盖率信息中与新行号对应的行覆盖率,得到所有新增行覆盖情况的完整信息并展示。对于全量覆盖率信息,则无需比对diff信息,直接读取该分支对应的代码文件的覆盖率信息,将覆盖率信息按照行号渲染即可。
本实施例只需要植入标识位和上报任务即可,接入成本低,对代码侵入性小,在集成测试阶段,仅凭借人工测试即可收集到代码的覆盖率,不依赖编写单元测试,节省代码编写和维护的人员成本。同时,本实施例支持多人分布式实时统计,提高了统计效率的同时减少了错漏,支持增量代码行覆盖率统计和展示。
实施例二
本实施例提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现如上的任意实施例中的方法。本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成。据此,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可实现上述任意一项实施例的方法。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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 (15)
1.一种实时覆盖率统计方法,其特征在于,所述实时覆盖率统计方法适用于JavaScript代码,包括如下步骤:在代码打包的过程中植入标识位的代码和上报任务的代码;
在代码执行的过程中,上报任务根据被执行的代码的标识位上报覆盖率信息;
服务器接收并处理覆盖率信息后储存;
客户端请求并展示覆盖率信息;
所述覆盖率信息包括启动的应用名称、目前运行的分支名以及所处环境;
服务器端接收到上报的覆盖率信息,根据覆盖率信息中的分支名区分覆盖率数据,具体包括:根据分支名寻找该分支名对应的代码文件是否有已上报的覆盖率信息,若有已上报的覆盖率信息,则将该分支名对应的代码文件已上报的覆盖率信息作为旧记录,若无已上报的覆盖率信息,则将上报的覆盖率信息作为新记录,然后将新记录按分支名进行遍历,取出该分支名对应的代码文件的新记录,同时取出该分支名对应的代码文件的旧记录;
如果该分支名对应的代码文件没有旧记录,则使用该分支名对应的代码文件的新记录作为覆盖率;
如果该分支名对应的代码文件有旧记录,则对比新记录和旧记录,如果新记录和旧记录的结构信息没有发生变化,则将旧记录追加到新记录作为覆盖率;如果新记录和旧记录的结构信息发生变化,则将新记录平移至旧记录作为覆盖率,如果平移失败,则由新记录替代旧记录作为覆盖率;
将得到的覆盖率以分支名为key存储。
2.根据权利要求1所述的实时覆盖率统计方法,其特征在于,代码打包包括-NODE端代码打包,-NODE端代码打包的过程中植入标识位的代码为:在安装依赖包的后置处理流程中加入打包脚本,将-NODE端代码转换成带有标识位的代码。
3.根据权利要求2所述的实时覆盖率统计方法,其特征在于,-NODE端代码含有//@ts-ignore*注释,打包脚本包括nyc命令,用以在TypeScript的代码植入标识位的代码;在执行nyc命令时,对语句行注释和语句块注释均进行换行;如果一个//@ts-ignore注释同时解析出头部注释和结尾注释,则删去结尾注释的打印;如果//@ts-ignore*注释在语句块的开头,则开启retainLine,对语句块执行nyc命令结束后关闭retainLine。
4.根据权利要求2或3所述的实时覆盖率统计方法,其特征在于,所述后置处理流程为npminstall提供的钩子方法,其中,npminstall为安装依赖包的命令。
5.根据权利要求1所述的实时覆盖率统计方法,其特征在于,代码打包包括客户端代码打包,客户端代码打包的过程中,使用babel-plugin-istanbul为客户端代码植入标识位的代码,在所有标识位的代码植入完成后,为每一个代码文件植入上报任务的代码。
6.根据权利要求5所述的实时覆盖率统计方法,其特征在于,babel-plugin-istanbul中的babel插件具有visitor模式,visitor模式的Program具有enter、exit以及抽象语法树的节点的方法处理器,在visitor模式下,访问者遍历抽象语法树的所有节点,每当进入一个节点时,先进入Program的enter,方法处理器根据进入的节点的类型分发至对应的方法,为抽象语法树植入新的值。
7.根据权利要求6所述的实时覆盖率统计方法,其特征在于,babel插件具有模板方法和追加方法,访问者进入Program的exit时,使用模板方法和追加方法完成上报任务的代码的植入。
8.根据权利要求1所述的实时覆盖率统计方法,其特征在于,代码执行包括-NODE环境,在-NODE环境中,所有被执行的代码的标识位被记录到_global变量中存储,形成覆盖率信息,在-NODE环境中启动应用时,注册定时任务,定时将_global变量中存储的覆盖率信息上报至服务器。
9.根据权利要求1所述的实时覆盖率统计方法,其特征在于,代码执行包括客户端环境,在客户端环境中,运行JavaScript文件时,将覆盖率信息和上报任务挂载到window对象上,定时将window对象上的覆盖率信息进行上报,或者当window对象销毁时进行一次上报。
10.根据权利要求1所述的实时覆盖率统计方法,其特征在于,将新记录平移至旧记录作为覆盖率包括:找到该分支名对应的代码文件的diff信息,从diff信息中提取出每一个修改行的旧行号和旧行号对应的新行号,遍历旧行号,在旧记录中寻找旧行号是否存在,如果存在,无需平移,如果不存在,计算旧行号的偏移量,得到与旧行号对应的新行号,计算旧行号的偏移量为:以该旧行号为终点,检索该旧行号前是否有新增行或删除行,每新增一行偏移量+1,每删除一行偏移量-1;
对比该旧行号在新记录中是否存在,如果存在,则将该旧行号在对应的旧记录中的行覆盖率平移到该旧行号对应的新行号在新记录中的行覆盖率上,如果不存在,则丢弃该旧行号在对应的旧记录中的行覆盖率;
循环上述步骤直至完成所有行的覆盖率平移。
11.根据权利要求10所述的实时覆盖率统计方法,其特征在于,覆盖率信息包括增量覆盖率信息和全量覆盖率信息,客户端请求并展示覆盖率信息包括通过分支名查看该分支的改动以及该分支对应的代码文件的增量覆盖率信息和全量覆盖率信息。
12.根据权利要求11所述的实时覆盖率统计方法,其特征在于,对于增量覆盖率信息,如果该分支名对应的分支存在,则对比出该分支新增的代码改动,记为diff信息,然后取出该分支对应的代码文件的覆盖率信息,如果该分支名对应的分支不存在,则无需展示;得到该分支对应的代码文件的覆盖率信息后,对比diff信息中的新行号和该分支对应的代码文件的覆盖率信息中与新行号对应的行覆盖率,得到所有新增行覆盖情况的完整信息并展示。
13.根据权利要求12所述的实时覆盖率统计方法,其特征在于,对于全量覆盖率信息,直接读取该分支对应的代码文件的覆盖率信息。
14.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至13中任一项所述的方法。
15.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至13中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010782927.0A CN111930619B (zh) | 2020-08-06 | 2020-08-06 | 一种实时覆盖率统计方法、计算机设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010782927.0A CN111930619B (zh) | 2020-08-06 | 2020-08-06 | 一种实时覆盖率统计方法、计算机设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111930619A CN111930619A (zh) | 2020-11-13 |
CN111930619B true CN111930619B (zh) | 2024-04-16 |
Family
ID=73306836
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010782927.0A Active CN111930619B (zh) | 2020-08-06 | 2020-08-06 | 一种实时覆盖率统计方法、计算机设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111930619B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112445468A (zh) * | 2020-12-16 | 2021-03-05 | 深圳市房多多网络科技有限公司 | Typescript类型文件生成方法、装置、设备及计算机可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106874187A (zh) * | 2016-12-29 | 2017-06-20 | 腾讯科技(深圳)有限公司 | 代码覆盖率收集方法和装置 |
CN108197036A (zh) * | 2018-02-06 | 2018-06-22 | 百度在线网络技术(北京)有限公司 | 用于确定增量代码的覆盖率信息的方法和装置 |
CN108829593A (zh) * | 2018-06-05 | 2018-11-16 | 平安壹钱包电子商务有限公司 | 代码覆盖率计算分析方法、装置、设备及存储介质 |
US10402310B1 (en) * | 2018-03-30 | 2019-09-03 | Atlassian Pty Ltd | Systems and methods for reducing storage required for code coverage results |
CN110209568A (zh) * | 2018-04-24 | 2019-09-06 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法、装置及存储设备 |
CN111045927A (zh) * | 2019-11-07 | 2020-04-21 | 平安科技(深圳)有限公司 | 性能测试评估方法、装置、计算机设备及可读存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030093716A1 (en) * | 2001-11-13 | 2003-05-15 | International Business Machines Corporation | Method and apparatus for collecting persistent coverage data across software versions |
-
2020
- 2020-08-06 CN CN202010782927.0A patent/CN111930619B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106874187A (zh) * | 2016-12-29 | 2017-06-20 | 腾讯科技(深圳)有限公司 | 代码覆盖率收集方法和装置 |
CN108197036A (zh) * | 2018-02-06 | 2018-06-22 | 百度在线网络技术(北京)有限公司 | 用于确定增量代码的覆盖率信息的方法和装置 |
US10402310B1 (en) * | 2018-03-30 | 2019-09-03 | Atlassian Pty Ltd | Systems and methods for reducing storage required for code coverage results |
CN110209568A (zh) * | 2018-04-24 | 2019-09-06 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法、装置及存储设备 |
CN108829593A (zh) * | 2018-06-05 | 2018-11-16 | 平安壹钱包电子商务有限公司 | 代码覆盖率计算分析方法、装置、设备及存储介质 |
CN111045927A (zh) * | 2019-11-07 | 2020-04-21 | 平安科技(深圳)有限公司 | 性能测试评估方法、装置、计算机设备及可读存储介质 |
Non-Patent Citations (1)
Title |
---|
无线电调谐单元软件语句覆盖目标的实现;宫伟祥;崔诗娴;陈春晓;;计算机系统应用(第05期);185-190 * |
Also Published As
Publication number | Publication date |
---|---|
CN111930619A (zh) | 2020-11-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111078568B (zh) | 代码规范方法、装置、计算机设备和存储介质 | |
CN109684847B (zh) | 脚本漏洞的自动修复方法、装置、设备及存储介质 | |
CN110109897A (zh) | 数据库脚本生成方法、装置、计算机设备和存储介质 | |
US20080072007A1 (en) | Method and computer programming product for detecting memory leaks | |
US10564955B2 (en) | Method to manage multiple versions of parts of a software application and to retire older versions in a dynamically updatable software system | |
CN111930619B (zh) | 一种实时覆盖率统计方法、计算机设备及可读存储介质 | |
WO2020206840A1 (zh) | 代码翻译方法、装置、计算机设备和存储介质 | |
CN113282498B (zh) | 测试用例的生成方法、装置、设备及存储介质 | |
CN109324961B (zh) | 系统自动测试方法、装置、计算机设备及存储介质 | |
CN110837429A (zh) | 一种web端线上代码智能修复方法及装置 | |
CN110597710B (zh) | 测试覆盖率统计方法、装置、计算机设备及存储介质 | |
CN103235757B (zh) | 基于自动化造数对输入域测试对象进行测试的装置和方法 | |
CN112632330A (zh) | Atm设备的巡检方法、装置、计算机设备和存储介质 | |
CN111488276B (zh) | 基于代码跟踪的软件可靠性测试方法和装置 | |
CN111694726B (zh) | 一种基于类型标注的Python程序类型推导方法 | |
CN109508204B (zh) | 一种前端代码质量检测方法及装置 | |
CN116662161A (zh) | 一种函数调试方法、装置、设备及存储介质 | |
CN116610551A (zh) | 代码覆盖率计算方法、装置、设备和介质 | |
US20220365871A1 (en) | System and method for identification of web elements used in automation test case | |
CN112148581A (zh) | 代码规范检查方法、装置、系统及存储介质 | |
CN113064584B (zh) | 幂等的实现方法、装置、设备及介质 | |
CN112559345A (zh) | 基于LoadRunner的接口测试方法、计算机设备及存储介质 | |
CN111338956A (zh) | 一种自动化的压测方法、装置、设备和存储介质 | |
CN117251205B (zh) | 一种头文件的处理方法、装置、设备及介质 | |
CN108256110A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |