System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及计算机,尤其涉及一种代码覆盖率的生成方法和装置。
技术介绍
1、代码测试是对服务代码进行正确性检测的有效手段,通常通过编写测试用例来进行代码测试。目前,在进行代码覆盖率统计时,多是通过开源的代码覆盖率统计工具(如jacoco等)来进行。然而,现有的代码覆盖率统计工具,不能按照用户维度来统计代码覆盖率。比如,一个版本的服务代码发布后,可能会有多个测试人员在新发布的服务上同时执行不同业务功能的测试用例,这样就可能会出现底层代码交叉调用的现象,最终产出的代码覆盖率报告是全部测试人员的代码调用覆盖率情况,无法统计每个测试人员执行测试用例的代码覆盖率。如果想精确统计到每个测试人员的代码覆盖率,则需要为每个测试人员都部署一套测试环境,测试执行过程需要物理隔离,浪费资源。
2、现有技术中,无法统计每个测试人员执行测试用例的代码覆盖率,无法通过代码覆盖率报告反查补充测试用例,通过补充测试用例来提升代码交付质量。
技术实现思路
1、有鉴于此,本专利技术实施例提供一种代码覆盖率的生成方法和装置,能够精确计算每个用户最后的代码覆盖率,为每个测试人员提供精准的代码覆盖率报告,从而便于通过代码覆盖率报告反查补充测试用例,以及通过补充测试用例来提升代码交付质量。
2、为实现上述目的,根据本专利技术实施例的一个方面,提供了一种代码覆盖率的生成方法,包括:
3、响应于对被测试代码的调用指令,获取调用者的用户标识;
4、根据所述用户标识对所述被测试代码中
5、对打标后的代码进行解析以得到所述被测试代码的动态调用关系,并根据所述动态调用关系生成所述被测试代码的动态调用树;
6、根据预先生成的所述被测试代码的静态调用树和所述动态调用树,生成所述用户标识对应的代码覆盖率。
7、可选地,根据所述用户标识对所述被测试代码中调用到的代码进行打标,包括:根据所述用户标识对所述被测试代码的调用线程的变量对象进行赋值,通过所述变量对象标记所述调用线程在生命周期内调用到的代码,以对所述被测试代码中调用到的代码进行打标。
8、可选地,根据所述用户标识对所述被测试代码中调用到的代码进行打标,包括:根据所述用户标识获取对应的染色规则;根据所述染色规则对所述被测试代码的调用线程的变量对象进行赋值,通过所述变量对象的值对所述调用线程在生命周期内调用到的代码进行染色,以对所述被测试代码中调用到的代码进行打标。
9、可选地,响应于对被测试代码的调用指令,获取调用者的用户标识,包括:响应于对被测试代码的调用指令,通过字节码增强技术获取调用者的用户标识。
10、可选地,在所述调用者对所述被测试代码进行了多次调用的情况下,根据预先生成的所述被测试代码的静态调用树和所述动态调用树,生成所述用户标识对应的代码覆盖率,包括:将所述调用者多次调用所述被测试代码生成的多个动态调用树进行合并,生成所述用户标识对应的所述被测试代码的动态调用树;根据预先生成的所述被测试代码的静态调用树和所述用户标识对应的所述被测试代码的动态调用树,生成所述用户标识对应的代码覆盖率。
11、可选地,根据预先生成的所述被测试代码的静态调用树和所述动态调用树,生成所述用户标识对应的代码覆盖率,包括:分别获取所述被测试代码的静态调用树和所述动态调用树所覆盖的方法个数和分支个数;根据所述动态调用树所覆盖的方法个数和所述静态调用树所覆盖的方法个数,计算所述用户标识对应的方法覆盖率;根据所述动态调用树所覆盖的分支个数和所述静态调用树所覆盖的分支个数,计算所述用户标识对应的分支覆盖率;根据所述方法覆盖率和所述分支覆盖率生成所述用户标识对应的代码覆盖率。
12、可选地,所述被测试代码具有版本号,所述被测试代码的静态调用树是通过以下方式生成的:根据所述被测试代码的版本号获取所述被测试代码的上一版本的代码;将所述被测试代码和所述被测试代码的上一版本的代码进行比较得到增量代码;对所述增量代码进行解析以得到方法之间的调用关系;根据所述方法之间的调用关系生成所述被测试代码的静态调用树。
13、根据本专利技术实施例的另一方面,提供了一种代码覆盖率的生成装置,包括:
14、标识获取模块,用于响应于对被测试代码的调用指令,获取调用者的用户标识;
15、代码打标模块,用于根据所述用户标识对所述被测试代码中调用到的代码进行打标;
16、代码解析模块,用于对打标后的代码进行解析以得到所述被测试代码的动态调用关系,并根据所述动态调用关系生成所述被测试代码的动态调用树;
17、覆盖率计算模块,用于根据预先生成的所述被测试代码的静态调用树和所述动态调用树,生成所述用户标识对应的代码覆盖率。
18、根据本专利技术实施例的又一方面,提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本专利技术实施例所提供的代码覆盖率的生成方法。
19、根据本专利技术实施例的再一方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本专利技术实施例所提供的代码覆盖率的生成方法。
20、上述专利技术中的一个实施例具有如下优点或有益效果:通过响应于对被测试代码的调用指令,获取调用者的用户标识;根据用户标识对被测试代码中调用到的代码进行打标;对打标后的代码进行解析以得到被测试代码的动态调用关系,并根据动态调用关系生成被测试代码的动态调用树;根据预先生成的被测试代码的静态调用树和动态调用树,生成用户标识对应的代码覆盖率的技术方案,可以通过动态解析被调用的代码,形成动态调用树,同时以用户维度标记被调用代码的链路,可以精确计算每个用户最后的代码覆盖率,为每个测试人员提供精准的代码覆盖率报告,从而便于通过代码覆盖率报告反查补充测试用例,以及通过补充测试用例来提升代码交付质量。
21、上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
本文档来自技高网...【技术保护点】
1.一种代码覆盖率的生成方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,根据所述用户标识对所述被测试代码中调用到的代码进行打标,包括:
3.根据权利要求1或2所述的方法,其特征在于,根据所述用户标识对所述被测试代码中调用到的代码进行打标,包括:
4.根据权利要求1所述的方法,其特征在于,响应于对被测试代码的调用指令,获取调用者的用户标识,包括:
5.根据权利要求1所述的方法,其特征在于,在所述调用者对所述被测试代码进行了多次调用的情况下,根据预先生成的所述被测试代码的静态调用树和所述动态调用树,生成所述用户标识对应的代码覆盖率,包括:
6.根据权利要求1或5所述的方法,其特征在于,根据预先生成的所述被测试代码的静态调用树和所述动态调用树,生成所述用户标识对应的代码覆盖率,包括:
7.根据权利要求1所述的方法,其特征在于,所述被测试代码具有版本号,所述被测试代码的静态调用树是通过以下方式生成的:
8.一种代码覆盖率的生成装置,其特征在于,包括:
9.一种电子设备,其特
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-7中任一所述的方法。
...【技术特征摘要】
1.一种代码覆盖率的生成方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,根据所述用户标识对所述被测试代码中调用到的代码进行打标,包括:
3.根据权利要求1或2所述的方法,其特征在于,根据所述用户标识对所述被测试代码中调用到的代码进行打标,包括:
4.根据权利要求1所述的方法,其特征在于,响应于对被测试代码的调用指令,获取调用者的用户标识,包括:
5.根据权利要求1所述的方法,其特征在于,在所述调用者对所述被测试代码进行了多次调用的情况下,根据预先生成的所述被测试代码的静态调用树和所述动态调用树,生成...
【专利技术属性】
技术研发人员:张航舰,田年勇,
申请(专利权)人:北京京东振世信息技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。