一种实现精准监控代码覆盖率的方法与流程

文档序号:18552167发布日期:2019-08-30 22:09阅读:1095来源:国知局
一种实现精准监控代码覆盖率的方法与流程
本发明涉及计算机
技术领域
,尤其涉及一种实现精准监控代码覆盖率的方法。
背景技术
:随着计算机网络的发展,软件产品的更新迭代速度加快,为了保证产品的质量,则需要对其进行测试。通常来说,对不同的软件产品需要对其代码进行全方位测试,以获取精准的代码覆盖率,但此时也存在着耗费巨大成本的缺点。目前对于覆盖率的使用基本上是基于开源框架jacoco进行配置的覆盖率工具,报告是基于全量代码的一种测量方式,这种方式会有很多弊端。从测试人员的角度来看,全量报告不能告诉测试人员本次改动的代码被覆盖了多少,还有多少没有被覆盖。从项目管理者的角度来看,不能根据全量报告的覆盖率预估项目的上线风险,这份报告对测试人员跟项目管理人员参考意义较小。技术实现要素:本发明的目的在于提供一种实现精准监控代码覆盖率的方法,从而解决现有技术中存在的前述问题。为了实现上述目的,本发明采用的技术方案如下:一种实现精准监控代码覆盖率的方法,主要包括以下步骤:s1,解析代码中的差异信息文本,形成结构化数据,并将其推送到源码的指定路径;s2,向代码中自动注入开源项目管理工具配置,对代码进行编译;s3,对编译后的代码封装远程命令和本地命令;s4,命令行调用通用组件,提供命令行集成方式;s5,最后对代码覆盖工具进行二次开发。优选地,步骤s1包括以下步骤:s11,通过通用的数据交换格式生成方法,解析两个分支的差异信息;s12,通过对差异信息的格式,做文件切割、匹配每个文件增量的行号;s13,组装通用的数据交换格式并返回对返回格式进行配置。优选地,步骤s2包括以下步骤:s21,通过上下文管理器方法,在编译后的代码注入jacoco配置之前备份文件;s22,通过上下文管理器的方法在正常或异常退出后,还原备份的文件;s23,在类实例被调用的时候,将目标服务器的ip和监听端口处理进模板,并注入maven配置。优选地,步骤s3包括以下步骤:s31,通过local执行命令行操作编译后的代码;s32,使用远程命令和安全文件传送协议上传下载代码。优选地,步骤s4包括以下步骤:s41,定义模板样式;s42,将命令行参数转化为结构化存储;s43,定义命令行参数;s44,制作入口文件,执行开源项目管理工具配置的注入操作。优选地,步骤s41还包括解析返回值对应长短参数名的映射关系。优选地,步骤s42包括解析命令行参数、处理命令行参数以及获取命令行参数。优选地,步骤s5包括以下步骤:s51,在覆盖率数据处理入口判断覆盖率数据对应的代码是否发生了改变;s52,使用ast技术对源代码进行分析,判断jacoco传来的方法是否跟ast解析出来的方法是否相等;s53,差异行信息解析核心代码解析差异信息中的数据,以文件维度下的差异行来存储差异数据;s54,差异行信息转化为方法差异信息,遍历所有的方法,使用差异行来进行命中,如果一个方法被差异行命中,将被命中的方法置成被改变。优选地,步骤s52中具体包括:1)判断存放了方法的行范围是否改变;2)获取到包含是否变化信息的列表;3)获取jacoco传来的方法的参数列表和ast解析源码后获取的方法参数列表;4)通过布尔值判断jacoco传来的方法是否跟ast解析出来的方法是否相等。本发明的有益效果是:本发明提供的监控测试方法基于增量代码的测试,可以极大的减少测试工作中的人力成本投入;整个测试过程可视化,可以帮助测试人员对自己的测试用例进行校准,帮助测试人员对代码进行更全面的测试覆盖;此外,本发明与自动化测试结合可以提高自动化测试的可信度,并且可以帮助自动化测试更好的覆盖业务场景。附图说明图1是实施例1中的工作流程示意图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。缩写词解释:jacoco开源java代码覆盖率工具maven开源的项目管理工具ast抽象语法树jenkins开源的持续集成平台json通用的数据交换格式sftp安全文件传送协议实施例本实施例提供一种实现精准监控代码覆盖率的方法,包括以下步骤:s1,解析差异信息文本,形成结构化数据,推送到源码的指定路径;s2,自动注入开源项目管理工具配置;s3,对编译后的代码封装远程命令和本地命令;s4,命令行调用通用组件,提供命令行集成方式;s5,对代码覆盖工具进行二次开发。以下提供一个具体的例子进行解释说明。具体的,步骤s1包括以下:s11,通过调用genjsonfile,生成一个命令比较文本文件结果的json,存储到文件中,文本路径file_path支持绝对路径和相对路径,相对路径对repo_root做了一个适配,repo_root就是持续集成工具中,检出代码的根路径。s12,通过tojson方法,解析两个分支的diff结果,通过对gitdiff的格式,做文件切割、匹配每个文件增量的行号,组装json并返回,这里如果return_diff_lines为true,则不仅返回增量的行号,还会返回该行号对应的代码。步骤s2具体包括:s21,准备一个模板,每次处理后,动态注入maven配置;s22,通过上下文管理器的__enter__方法,在注入maven配置之前先对文件做备份;s23,如果通过上下文管理器的__exit__方法在正常或异常退出后,还原备份的文件pom.xml;s24,在类实例被调用__call__的时候,将目标服务器的ip和监听端口处理进模板,并注入maven配置。步骤s3具体包括:1)本地命令行操作,参数与subprocess.run保持一致,通过local执行命令;除此之外也支持使用方通过withlcd在某个路径下执行批量命令;2)基于paramiko实现ssh远程命令和sftp的上传和下载功能;值得注意到,在控制访问参数kwargs中除了transport.connect(**kwargs)的参数外增加了自定义参数pkey_file,来指定私钥文件。步骤s4包括:s41,定义模板样式,包括:解析返回值对应长短参数名的映射关系(表1左)和解析短参数、长参数和参数映射返回值的关系(表1右);表1定义模板样式代码示例s42,将命令行参数转化为结构化存储,解析命令行参数、处理参数以及获取参数,如果同一个参数长短参传多次,取最后一个值;s43,定义命令行参数,举例如表2所示:表2定义命令行参数示例短参数长参数参数定义-h--help帮助文档-w--workspacejenkins的workspace-s--sub_project子项目名称-a--address应用部署ip-p--portjacoco监听端口-b--branch_name分支名称s44,制作入口文件,执行开源项目管理工具配置的注入操作。步骤s5具体包括:s51,在覆盖率数据处理入口判断覆盖率数据对应的代码是否发生了改变;s52,使用ast技术对源代码进行分析,判断jacoco传来的方法是否跟ast解析出来的方法是否相等;1)判断存放了方法的行范围是否改变;2)获取到包含是否变化信息的列表;3)获取jacoco传来的方法的参数列表和ast解析源码后获取的方法参数列表;4)通过布尔值判断jacoco传来的方法是否跟ast解析出来的方法是否相等。s53,差异行信息解析核心代码解析差异信息中的数据,以文件维度下的差异行来存储差异数据;s54,差异行信息转化为方法差异信息,遍历所有的方法,使用差异行来进行命中,如果一个方法被差异行命中,将被命中的方法置成被改变。本实施例基于python、java语言,基于gitdiff的文本分析,基于jacoco开源java代码覆盖率工具进行二次开发,实现对被测服务的精准覆盖率监控,创新点如下:1、使用python实现maven配置的动态注入。2、使用python解析gitdiff文本,生成文件增量代码的结构化数据3、基于jacoco的maven插件,对其做二次开发,对diff的结构化数据进行处理,应用ast(抽象语法树)技术,确定diff代码的影响范围,并生成精准的增量覆盖率报告4、与jenkins集成,实现部署和监控一体化。5、使用java(spring等等)开发报告管理平台。采用本发明的方法引入代码增量,与引入代码增量控制之前进行对比,可发现:引入代码增量控制后显示有两个变化,第一个变化是有一些包被自动隐藏了,其实是因为这部分包中的代码没有被改动过,所以在报告中被剔除,第二个变化是有覆盖率的包的覆盖率数据变大了,也是因为在这个包内剔除了未改变部分,项目管理人员可以根据这一全局的覆盖率情况评估当前的测试进度以及上线风险。类维度也是相同的情况,报告剔除了没有改动的类而被改动的类类也有了更高的覆盖率,方法维度同样也只保存了差异方法的覆盖率,而测试人员可以结合代码维度的增量报告来判断这次测试的目标逻辑,需要覆盖的条件场景以及当前的覆盖情况。相对于大多数的解决方案,本方案更加精准的反应覆盖率结果,提升测试与开发交流的效率。通过采用本发明公开的上述技术方案,得到了如下有益的效果:1、基于增量代码的测试,可以极大的减少测试工作中的人力成本投入2、测试过程可视化,可以帮助测试人员对自己的测试用例进行校准,帮助测试人员对代码进行更全面的测试覆盖3、与自动化测试结合可以提高自动化测试的可信度,并且可以帮助自动化测试更好的覆盖业务场景。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。本领域人员应该理解的是,上述实施例提供的方法步骤的时序可根据实际情况进行适应性调整,也可根据实际情况并发进行。上述实施例涉及的方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机设备可读取的存储介质中,用于执行上述各实施例方法所述的全部或部分步骤。所述计算机设备,例如:个人计算机、服务器、网络设备、智能移动终端、智能家居设备、穿戴式智能设备、车载智能设备等;所述的存储介质,例如:ram、rom、磁碟、磁带、光盘、闪存、u盘、移动硬盘、存储卡、记忆棒、网络服务器存储、网络云存储等。最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。以上所述仅是本发明的优选实施方式,应当指出,对于本
技术领域
的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1