CN116010260A - 代码覆盖率采集方法、装置以及设备 - Google Patents

代码覆盖率采集方法、装置以及设备 Download PDF

Info

Publication number
CN116010260A
CN116010260A CN202211658891.0A CN202211658891A CN116010260A CN 116010260 A CN116010260 A CN 116010260A CN 202211658891 A CN202211658891 A CN 202211658891A CN 116010260 A CN116010260 A CN 116010260A
Authority
CN
China
Prior art keywords
coverage
coverage rate
container
file
script
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.)
Pending
Application number
CN202211658891.0A
Other languages
English (en)
Inventor
林韦妍
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN202211658891.0A priority Critical patent/CN116010260A/zh
Publication of CN116010260A publication Critical patent/CN116010260A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本公开提供了一种代码覆盖率采集方法、装置以及设备,涉及人工智能领域,具体涉及云计算、云原生技术,可应用在智能云场景下。该方法的一具体实施方式包括:接收用户输入的动态参数;基于动态参数进行覆盖率插桩;基于动态参数进行覆盖率统计,生成覆盖率报告。该实施方式实现了无感知式的代码覆盖率自动采集。

Description

代码覆盖率采集方法、装置以及设备
技术领域
本公开涉及人工智能领域,具体涉及云计算、云原生技术,可应用在智能云场景下。
背景技术
代码覆盖是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。代码覆盖率反映测试用例对被测软件覆盖程度的重要指标,是用来度量测试完整性的一个参考值,通过代码覆盖率数据可以评估测试是否充分。
现有的技术是使用jacoco等覆盖率工具收集测试覆盖率。目前,常用的代码覆盖率采集的插桩方式主要包括以下两种:其一,通过修改docker镜像的方式,添加jacoco的javaagent,实现插桩;其二,通过修改docker的docker-compose.yaml文件,添加jacoco的javaagent,实现插桩。其中,jacoco的英文全称为Java Code Coverage Library,是一种java代码覆盖率工具。docker是一个开源的应用容器引擎。javaagent是java命令的一个参数。docker-compose.yaml是一个YAML格式的模板文件。
发明内容
本公开实施例提出了一种代码覆盖率采集方法、装置、设备、存储介质以及程序产品。
第一方面,本公开实施例提出了一种代码覆盖率采集方法,包括:接收用户输入的动态参数;基于动态参数进行覆盖率插桩;基于动态参数进行覆盖率统计,生成覆盖率报告。
第二方面,本公开实施例提出了一种代码覆盖率采集装置,包括:接收模块,被配置成接收用户输入的动态参数;插桩模块,被配置成基于动态参数进行覆盖率插桩;统计模块,被配置成基于动态参数进行覆盖率统计,生成覆盖率报告。
第三方面,本公开实施例提出了一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行如第一方面中任一实现方式描述的方法。
第四方面,本公开实施例提出了一种存储有计算机指令的非瞬时计算机可读存储介质,计算机指令用于使计算机执行如第一方面中任一实现方式描述的方法。
第五方面,本公开实施例提出了一种计算机程序产品,包括计算机程序,计算机程序在被处理器执行时实现如第一方面中任一实现方式描述的方法。
本公开实施例提供的代码覆盖率采集方法,在k8s分布式环境下基于jacoco实现了对java容器化应用无感知式全自动化代码覆盖率采集。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本公开的其它特征、目的和优点将会变得更明显。附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是根据本公开的代码覆盖率采集方法的一个实施例的流程图;
图2是根据本公开的代码覆盖率采集方法的又一个实施例的流程图;
图3是可以实现本公开实施例的代码覆盖率采集方法的场景图;
图4是根据本公开的代码覆盖率采集装置的一个实施例的结构示意图;
图5是用来实现本公开实施例的代码覆盖率采集方法的电子设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
图1示出了根据本公开的代码覆盖率采集方法的一个实施例的流程图。该代码覆盖率采集方法包括以下步骤:
步骤101,接收用户输入的动态参数。
在本实施例中,覆盖率工具可以接收用户输入的动态参数。
通常,覆盖率工具运行于中控机上,通过python第三方包paramiko模块实现远程操作。用户可以输入动态参数,中控机上运行的覆盖率工具可以从持续交付平台(如Ipipe平台)中获取到用户输入的动态参数。其中,动态参数是json串格式,包括:集群登录信息、代码库信息(如Icode代码库信息)、分支信息、提交标识信息(commitId信息)、服务类型(如jar、tomcat)、服务进程标志、压缩包在容器内路径(如jar/war包在容器内路径)、容器内启动脚本路径(如jar/war容器内启动脚本路径)、源码包相对工程根目录路径、不进行覆盖率统计的文件、扫描包范围、代理通信端口(agent通信端口)和项目版本信息等。
其中,python是一种计算机编程语言。paramiko是一个用于做远程控制的模块。Ipipe平台可以提供持续交付能力,帮助企业不断提升应用交付的质量和效率,通过构建自动化、测试自动化、部署自动化,完成从代码提交到应用交付的自动化。json(JavaScriptObject Notation,JS对象简谱)是一种轻量级的数据交换格式。Icode平台是一款企业级代码服务平台,提供代码托管、代码评审、代码扫描、代码搜索等一系列以代码核心的功能。tomcat是一种轻量级应用服务器。jar和war都是压缩文件,jar是类的归档文件,war是一个网络应用程序。
步骤102,基于动态参数进行覆盖率插桩。
在本实施例中,覆盖率工具可以基于动态参数进行覆盖率插桩。
通常,在获取到用户输入的动态参数之后,覆盖率工具可以拉取Icode平台中的应用源代码,并与k8s集群中运行的APP(application,应用)进行通信,完成多节点的覆盖率插桩。
其中,k8s全称Kubernetes,是开源的一套用于搭建分布式集群应用环境的平台,它基于docker,和docker配合可以很方便地部署分布式应用。
步骤103,基于动态参数进行覆盖率统计,生成覆盖率报告。
在本实施例中,覆盖率工具可以基于动态参数进行覆盖率统计,生成覆盖率报告。
通常,在获取到用户输入的动态参数之后,覆盖率工具可以拉取Icode平台中的应用源代码,并与k8s集群中运行的APP进行通信,完成多节点的覆盖率插桩和最终覆盖率数据收集,生成覆盖率报告。
通常,覆盖率工具可以将覆盖率报告推送到Cov平台做报表展示。其中,Cov平台可以提供统一、标准、高效且智能的单测构建基础设施,针对各类测试提供了全面的代码覆盖维度度量,支持报告数据推送及存储比对功能。
在一些实施例中,为了丰富覆盖率报告的推送方式,覆盖率报告可以通过以下至少一项方式推送:
其一,通过调用邮件通知功能实时推送覆盖率报告。
通常,通过调用Ipipe平台上邮件通知功能可以实现实时的邮件通知。
其二,通过调用报告推送接口推送覆盖率报告。
通常,通过调用Cov平台提供的报告推送接口,可以实现报告的上传和管理。
本公开实施例提供的代码覆盖率采集方法,在k8s分布式环境下基于jacoco实现了对java容器化应用无感知式全自动化代码覆盖率采集。并且,结合Ipipe平台、Icode平台和Cov平台,实现全自动化执行,解决jacoco环境搭建较复杂,且依赖源码等问题,全程无需人工参与。
继续参考图2,其示出了根据本公开的代码覆盖率采集方法的又一个实施例的流程图。该代码覆盖率采集方法包括以下步骤:
步骤201,接收用户输入的动态参数。
在本实施例中,步骤201的具体操作已在图1所示的实施例中步骤101中进行了详细的介绍,在此不再赘述。
步骤202,根据代码库信息拉取项目的各个微服务的源代码。
在本实施例中,根据动态参数中代码库信息,可以拉取项目的各个微服务的源代码。
通常,从Ipipe获取到用户输入的动态参数后,覆盖率工具可以根据Icode代码库信息,将项目涉及的所有微服务的源代码拉取到中控机上。
步骤203,根据提交标识信息,生成代码增量文件。
在本实施例中,根据动态参数中的提交标识信息,可以生成代码增量文件。
通常,动态参数中可以包括用户输入的两次提交的commit ID(即commit ID1和commit ID2)。由于commit ID记录代码变更信息,因此根据commit ID1和commit ID2,可以生成代码增量文件。
步骤204,将覆盖率工具和源代码分发到集群登录信息对应的集群中包含应用进程标识的各个节点上。
在本实施例中,将覆盖率工具和源代码分发到集群登录信息对应的集群中包含应用进程标识的各个节点上。
通常,将覆盖率工具和源代码压缩后远程分发到集群登录信息对应的集群中包含应用进程标识的节点上。其中,集群登录信息对应的集群是被测集群。包含应用进程标识的节点是安装有APP的节点。
步骤205,根据应用进程标识定位容器标识,将覆盖率工具和源代码复制到容器标识对应的容器内部。
在本实施例中,根据应用进程标识定位容器标识,可以将覆盖率工具和源代码复制到容器标识对应的容器内部。
通常,通过docker ps命令可以定位到容器标识。通过docker cp命令将覆盖率工具和源代码复制到容器内部。
步骤206,根据服务类型、服务进程标志、压缩包在容器内路径、容器内启动脚本路径、源码包相对工程根目录路径、不进行覆盖率统计的文件、扫描包范围和代理通信端口,在容器内动态替换构建模板文件中的变量。
在本实施例中,根据服务类型、服务进程标志、压缩包在容器内路径、容器内启动脚本路径、源码包相对工程根目录路径、不进行覆盖率统计的文件、扫描包范围和代理通信端口,可以在容器内动态替换构建模板文件中的变量。
通常,根据用户输入的服务类型jar/tomcat、服务进程标志、jar/war包在容器内路径、jar/war容器内启动脚本路径,源码包相对工程根目录路径、生成报告时排除的不进行覆盖率统计的文件、扫描包范围、agent通信端口,在容器内动态替换build.xml模板文件中的变量。
步骤207,根据容器内启动脚本路径,将覆盖率工具的代理动态写入容器内启动脚本文件中,并重启容器。
在本实施例中,根据容器内启动脚本路径,可以将覆盖率工具的代理动态写入容器内启动脚本文件中,并重启容器。
通常,将jacocoagent动态写入用户输入的jar/war容器内启动脚本文件中,然后通过docker restart命令重启容器,从而完成插桩整个过程。
步骤208,根据服务类型在容器内动态生成覆盖率文件脚本和覆盖率报告脚本。
在本实施例中,根据服务类型,可以在容器内动态生成覆盖率文件脚本和覆盖率报告脚本。
通常,根据服务类型jar/tomcat,可以在容器内动态生成ant_dump.sh和ant_report.sh。
步骤209,在集群中包含应用进程标识的各个节点上执行覆盖率文件脚本,得到各个节点的覆盖率文件。
在本实施例中,在集群中包含应用进程标识的各个节点上,可以执行覆盖率文件脚本,得到各个节点的覆盖率文件。
通常,在集群的各个节点上行ant_dump.sh,得到所有节点上生成的jacoco.exec文件。
步骤210,从集群中选取主节点,并将集群的其他节点的覆盖率文件分发到主节点上。
在本实施例中,从集群中选取主节点,可以将集群的其他节点的覆盖率文件分发到主节点上。
通常,选取用户输入的第一个节点作为主节点,将其它节点上的jacoco.exec文件统一传到中控机节点,再由中控机分发到主节点上。
步骤211,在主节点上基于各个节点的覆盖率文件执行覆盖率报告脚本,生成各个微服务的全量和增量覆盖率报告。
在本实施例中,在主节点上基于各个节点的覆盖率文件执行覆盖率报告脚本,生成各个微服务的全量和增量覆盖率报告。
通常,在主节点上执行ant_report.sh,可以生成各个微服务的全量和增量覆盖率报告。这里,增量报告生成功能可以调用Cov平台提供的能力。
步骤212,按照项目维度对各个微服务的全量和增量覆盖率报告进行汇总,生成项目覆盖率报告。
在本实施例中,按照项目维度对各个微服务的全量和增量覆盖率报告进行汇总,可以生成项目覆盖率报告。
通常,将容器中的报告docker cp到物理机上,再远程回传到中控机。在中控机上,按项目维度通过字符串解析html报表方式获取所有微服务的覆盖率数据,将所有微服务数据汇总后,按公式计算出整体的指标值,归档到项目版本命名的文件夹下。
在一些实施例中,为了避免执行测试期间,服务不稳定、POD漂移导致的覆盖率数据丢失问题,可以在各个节点上定时执行覆盖率文件脚本。同时,扫描各个节点的服务进程状态,对于服务进程状态中不包含目标命令参数的节点,重新进行覆盖率插桩。
通过设置一个定时任务,定时dump出jacoco.exec文件。同时扫描服务进程状态,是否包含javaagent关键字。如果不包含,说明未插桩或插桩失效,则需要重新进行插桩。通过动态监测插桩状态,避免了服务重启、崩溃、POD漂移,导致的代码覆盖率数据大量丢失问题,提高可用性。
从图2中可以看出,与图1对应的实施例相比,本实施例中的代码覆盖率采集方法突出了插桩步骤和统计步骤。由此,本实施例描述的方案可以在k8s分布式环境下,实现多个java微服务的代码覆盖率自动采集和合并。实现对容器的无感知式插桩,不需要在构建镜像前修改docekr镜像或者docker-compose.yaml,研发人员无感知,保持研发、测试、发布的一致性。支持项目级别覆盖率报告,一个项目包含多个微服务,可以按项目维度统计总体覆盖率。有效的解决了智慧城市产品迁移到云原生环境后,后端代码覆盖率统计的难题。实现k8s分布式环境下、无侵入无感知、全自动化统计的能力,大大提高了产品质量和迭代效率。目前已经应用在智慧城市事业部,运管平台、视觉工作站、一人一档、人像***、视图库***等产品中。
为了便于理解,图3是可以实现本公开实施例的代码覆盖率采集方法的场景图。如图3所示,覆盖率工具一共包含4个通用模块的技术实现方案,分别是覆盖率插桩、覆盖率统计、报表推送和动态监测。
覆盖率插桩:从Ipipe平台获取到用户输入的动态参数后,将项目涉及的所有微服务的源代码从Icode代码仓库拉取到中控机上。根据用户输入的两次提交的commitID,生成代码增量文件。然后将覆盖率工具和源代码压缩后远程分发到被测集群的节点上,并通过docker ps命令定位到容器ID后,通过docker cp命令将覆盖率工具和源代码复制到容器内部。接下来动态生成build.xml模板文件,并将jacocoagent动态写入用户输入的jar/war容器内启动脚本文件中,然后通过docker restart命令重启容器,从而完成插桩整个过程。
覆盖率统计:从Ipipe平台获取到用户输入的动态参数后,根据服务类型jar/tomcat,在容器内动态生成ant_dump.sh和ant_report.sh。在集群的各个节点上执行ant_dump.sh,得到所有节点上生成的jacoco.exec文件。选取用户输入的第一个节点作为主节点,将其它节点上的jacoco.exec文件统一传到中控机节点,再由中控机分发到主节点上。在主节点上执行ant_report.sh,生成各个微服务的全量和增量覆盖率报告。然后将容器中的报告docker cp到物理机上,再远程回传到中控机。在中控机上,按项目维度通过字符串解析html报表方式获取所有微服务的覆盖率数据,将所有微服务数据汇总后,按公式计算出整体的指标值,归档到项目版本命名的文件夹下。
报告推送:通过调用Ipipe平台上邮件通知功能实现实时的邮件通知;通过调用Cov平台提供的报告推送接口,实现报告的上传和管理。
动态检测:设置一个定时任务,定时dump出jacoco.exec文件,同时扫描服务进程状态,是否包含javaagent关键字,如果不包含,则邮件通知对应测试同学,同时完成覆盖率插桩动作。
进一步参考图4,作为对上述各图所示方法的实现,本公开提供了一种代码覆盖率采集装置的一个实施例,该装置实施例与图1所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图4所示,本实施例的代码覆盖率采集装置400可以包括:接收模块401、插桩模块402和统计模块403。其中,接收模块401,被配置成接收用户输入的动态参数;插桩模块402,被配置成基于动态参数进行覆盖率插桩;统计模块403,被配置成基于动态参数进行覆盖率统计,生成覆盖率报告。
在本实施例中,代码覆盖率采集装置400中:接收模块401、插桩模块402和统计模块403的具体处理及其所带来的技术效果可分别参考图1对应实施例中的步骤101-103的相关说明,在此不再赘述。
在本实施例的一些可选的实现方式中,动态参数包括:集群登录信息、代码库信息、分支信息、提交标识信息、服务类型、服务进程标志、压缩包在容器内路径、容器内启动脚本路径、源码包相对工程根目录路径、不进行覆盖率统计的文件、扫描包范围、代理通信端口和项目版本信息。
在本实施例的一些可选的实现方式中,插桩模块402进一步被配置成:根据代码库信息拉取项目的各个微服务的源代码;根据提交标识信息,生成代码增量文件;将覆盖率工具和源代码分发到集群登录信息对应的集群中包含应用进程标识的各个节点上;根据应用进程标识定位容器标识,将覆盖率工具和源代码复制到容器标识对应的容器内部;根据服务类型、服务进程标志、压缩包在容器内路径、容器内启动脚本路径、源码包相对工程根目录路径、不进行覆盖率统计的文件、扫描包范围和代理通信端口,在容器内动态替换构建模板文件中的变量;根据容器内启动脚本路径,将覆盖率工具的代理动态写入容器内启动脚本文件中,并重启容器。
在本实施例的一些可选的实现方式中,统计模块403进一步被配置成:根据服务类型在容器内动态生成覆盖率文件脚本和覆盖率报告脚本;在集群中包含应用进程标识的各个节点上执行覆盖率文件脚本,得到各个节点的覆盖率文件;从集群中选取主节点,并将集群的其他节点的覆盖率文件分发到主节点上;在主节点上基于各个节点的覆盖率文件执行覆盖率报告脚本,生成各个微服务的全量和增量覆盖率报告;按照项目维度对各个微服务的全量和增量覆盖率报告进行汇总,生成项目覆盖率报告。
在本实施例的一些可选的实现方式中,覆盖率文件脚本是在各个节点上定时执行的;以及代码覆盖率采集装置400还包括:扫描模块,被配置成扫描各个节点的服务进程状态;重新插桩模块,被配置成对于服务进程状态中不包含目标命令参数的节点,重新进行覆盖率插桩。
在本实施例的一些可选的实现方式中,代码覆盖率采集装置400还包括:通过调用邮件通知功能实时推送覆盖率报告;和/或通过调用报告推送接口推送覆盖率报告。
本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图5示出了可以用来实施本公开的实施例的示例电子设备500的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图5所示,设备500包括计算单元501,其可以根据存储在只读存储器(ROM)502中的计算机程序或者从存储单元508加载到随机访问存储器(RAM)503中的计算机程序,来执行各种适当的动作和处理。在RAM 503中,还可存储设备500操作所需的各种程序和数据。计算单元501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
设备500中的多个部件连接至I/O接口505,包括:输入单元506,例如键盘、鼠标等;输出单元507,例如各种类型的显示器、扬声器等;存储单元508,例如磁盘、光盘等;以及通信单元509,例如网卡、调制解调器、无线通信收发机等。通信单元509允许设备500通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元501可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元501的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元501执行上文所描述的各个方法和处理,例如代码覆盖率采集方法。例如,在一些实施例中,代码覆盖率采集方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元508。在一些实施例中,计算机程序的部分或者全部可以经由ROM 502和/或通信单元509而被载入和/或安装到设备500上。当计算机程序加载到RAM 503并由计算单元501执行时,可以执行上文描述的代码覆盖率采集方法的一个或多个步骤。备选地,在其他实施例中,计算单元501可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行代码覆盖率采集方法。
本文中以上描述的***和技术的各种实施方式可以在数字电子电路***、集成电路***、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上***的***(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程***上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储***、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储***、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行***、装置或设备使用或与指令执行***、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体***、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的***和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的***和技术实施在包括后台部件的计算***(例如,作为数据服务器)、或者包括中间件部件的计算***(例如,应用服务器)、或者包括前端部件的计算***(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的***和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算***中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将***的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机***可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以是分布式***的服务器,或者是结合了区块链的服务器。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开提供的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

Claims (15)

1.一种代码覆盖率采集方法,包括:
接收用户输入的动态参数;
基于所述动态参数进行覆盖率插桩;
基于所述动态参数进行覆盖率统计,生成覆盖率报告。
2.根据权利要求1所述的方法,其中,所述动态参数包括:集群登录信息、代码库信息、分支信息、提交标识信息、服务类型、服务进程标志、压缩包在容器内路径、容器内启动脚本路径、源码包相对工程根目录路径、不进行覆盖率统计的文件、扫描包范围、代理通信端口和项目版本信息。
3.根据权利要求2所述的方法,其中,所述基于所述动态参数进行覆盖率插桩,包括:
根据所述代码库信息拉取项目的各个微服务的源代码;
根据所述提交标识信息,生成代码增量文件;
将覆盖率工具和所述源代码分发到所述集群登录信息对应的集群中包含所述应用进程标识的各个节点上;
根据所述应用进程标识定位容器标识,将所述覆盖率工具和所述源代码复制到所述容器标识对应的容器内部;
根据所述服务类型、所述服务进程标志、所述压缩包在容器内路径、所述容器内启动脚本路径、所述源码包相对工程根目录路径、所述不进行覆盖率统计的文件、所述扫描包范围和所述代理通信端口,在所述容器内动态替换构建模板文件中的变量;
根据所述容器内启动脚本路径,将所述覆盖率工具的代理动态写入容器内启动脚本文件中,并重启所述容器。
4.根据权利要求3所述的方法,其中,所述基于所述动态参数进行覆盖率统计,生成覆盖率报告,包括:
根据所述服务类型在所述容器内动态生成覆盖率文件脚本和覆盖率报告脚本;
在所述集群中包含所述应用进程标识的各个节点上执行所述覆盖率文件脚本,得到各个节点的覆盖率文件;
从所述集群中选取主节点,并将所述集群的其他节点的覆盖率文件分发到所述主节点上;
在所述主节点上基于各个节点的覆盖率文件执行所述覆盖率报告脚本,生成各个微服务的全量和增量覆盖率报告;
按照项目维度对各个微服务的全量和增量覆盖率报告进行汇总,生成项目覆盖率报告。
5.根据权利要求4所述的方法,其中,所述覆盖率文件脚本是在各个节点上定时执行的;以及
所述方法还包括:
扫描各个节点的服务进程状态;
对于所述服务进程状态中不包含目标命令参数的节点,重新进行覆盖率插桩。
6.根据权利要求1-5中任一项所述的方法,其中,所述方法还包括:
通过调用邮件通知功能实时推送所述覆盖率报告;和/或
通过调用报告推送接口推送所述覆盖率报告。
7.一种代码覆盖率采集装置,包括:
接收模块,被配置成接收用户输入的动态参数;
插桩模块,被配置成基于所述动态参数进行覆盖率插桩;
统计模块,被配置成基于所述动态参数进行覆盖率统计,生成覆盖率报告。
8.根据权利要求7所述的装置,其中,所述动态参数包括:集群登录信息、代码库信息、分支信息、提交标识信息、服务类型、服务进程标志、压缩包在容器内路径、容器内启动脚本路径、源码包相对工程根目录路径、不进行覆盖率统计的文件、扫描包范围、代理通信端口和项目版本信息。
9.根据权利要求8所述的装置,其中,所述插桩模块进一步被配置成:
根据所述代码库信息拉取项目的各个微服务的源代码;
根据所述提交标识信息,生成代码增量文件;
将覆盖率工具和所述源代码分发到所述集群登录信息对应的集群中包含所述应用进程标识的各个节点上;
根据所述应用进程标识定位容器标识,将所述覆盖率工具和所述源代码复制到所述容器标识对应的容器内部;
根据所述服务类型、所述服务进程标志、所述压缩包在容器内路径、所述容器内启动脚本路径、所述源码包相对工程根目录路径、所述不进行覆盖率统计的文件、所述扫描包范围和所述代理通信端口,在所述容器内动态替换构建模板文件中的变量;
根据所述容器内启动脚本路径,将所述覆盖率工具的代理动态写入容器内启动脚本文件中,并重启所述容器。
10.根据权利要求9所述的装置,其中,所述统计模块进一步被配置成:
根据所述服务类型在所述容器内动态生成覆盖率文件脚本和覆盖率报告脚本;
在所述集群中包含所述应用进程标识的各个节点上执行所述覆盖率文件脚本,得到各个节点的覆盖率文件;
从所述集群中选取主节点,并将所述集群的其他节点的覆盖率文件分发到所述主节点上;
在所述主节点上基于各个节点的覆盖率文件执行所述覆盖率报告脚本,生成各个微服务的全量和增量覆盖率报告;
按照项目维度对各个微服务的全量和增量覆盖率报告进行汇总,生成项目覆盖率报告。
11.根据权利要求10所述的装置,其中,所述覆盖率文件脚本是在各个节点上定时执行的;以及
所述装置还包括:
扫描模块,被配置成扫描各个节点的服务进程状态;
重新插桩模块,被配置成对于所述服务进程状态中不包含目标命令参数的节点,重新进行覆盖率插桩。
12.根据权利要求7-11中任一项所述的装置,其中,所述装置还包括:
通过调用邮件通知功能实时推送所述覆盖率报告;和/或
通过调用报告推送接口推送所述覆盖率报告。
13.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-6中任一项所述的方法。
14.一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行权利要求1-6中任一项所述的方法。
15.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-6中任一项所述的方法。
CN202211658891.0A 2022-12-22 2022-12-22 代码覆盖率采集方法、装置以及设备 Pending CN116010260A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211658891.0A CN116010260A (zh) 2022-12-22 2022-12-22 代码覆盖率采集方法、装置以及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211658891.0A CN116010260A (zh) 2022-12-22 2022-12-22 代码覆盖率采集方法、装置以及设备

Publications (1)

Publication Number Publication Date
CN116010260A true CN116010260A (zh) 2023-04-25

Family

ID=86037612

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211658891.0A Pending CN116010260A (zh) 2022-12-22 2022-12-22 代码覆盖率采集方法、装置以及设备

Country Status (1)

Country Link
CN (1) CN116010260A (zh)

Similar Documents

Publication Publication Date Title
CN107515826B (zh) 测试用例精准推荐方法、装置、***、设备及存储介质
CN107302476B (zh) 一种测试异步交互***的自动化测试方法与***
WO2022179034A1 (zh) 自动化测试方法、装置、电子设备及存储介质
US12032477B2 (en) Method and apparatus for generating and applying deep learning model based on deep learning framework
CN113076253A (zh) 一种测试方法和测试装置
US11163673B1 (en) Enhanced testing by automated reuse of test metrics
CN113377665A (zh) 基于容器技术的测试方法、装置、电子设备及存储介质
CN109408309A (zh) 多终端的测试方法及装置
CN114691780A (zh) 数据同步方法、装置、电子设备以及存储介质
CN113127357B (zh) 单元测试方法、装置、设备、存储介质及程序产品
CN112559525B (zh) 数据检查***、方法、装置和服务器
CN115129574A (zh) 一种代码测试方法和装置
CN116627432A (zh) 一种前端应用自动化部署方法、装置、设备及介质
CN116010260A (zh) 代码覆盖率采集方法、装置以及设备
CN115248735A (zh) 一种日志数据输出控制方法、装置、设备及存储介质
CN109814911A (zh) 用于管理脚本程序的方法、装置、计算机设备及存储介质
CN112948195B (zh) 接口测试的方法、装置、电子设备和存储介质
CN115357493A (zh) 测试方法、装置、电子设备和存储介质
CN113704079B (zh) 基于Protobuf的接口测试方法和装置
CN114138762A (zh) 数据加工方法、装置、存储介质以及终端
CN114003497A (zh) 业务***的测试方法、装置、设备及存储介质
CN113434382A (zh) 数据库性能监控方法、装置、电子设备及计算机可读介质
CN114218313A (zh) 数据管理方法、装置、电子设备、存储介质及产品
CN112650815A (zh) 环境数据的同步方法及装置、存储介质及电子装置
CN112835759A (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