1.本发明涉及计算机软件测试技术领域,尤其涉及一种测试案例推荐方法、装置、设备及存储介质。
背景技术:2.测试案例是为某个特殊的目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序代码或核实是否满足某个特定需求。传统模式下的黑盒测试方法,常依赖与测试人员对业务需求理解的主观经验,易造成测试案例的遗漏,且由于运行代码不可见,针对代码中的异常分支难以进行全面覆盖的测试。
3.因此,在系统功能测试中使用代码覆盖率工具以监控测试执行过程,统计代码覆盖率结果,已逐渐成为广泛应用于客观评价测试案例集的有效性和充分性,以及评价测试结果可信度的重要手段。
4.然而,目前针对代码覆盖率结果的处理,常由测试人员在执行测试后对获取的代码覆盖率报告进行人工分析,进以针对确定出未覆盖或未完全覆盖的代码进行测试案例补充。虽然目前已形成了一些解读代码覆盖率报告的经验、方法和知识库,但仍旧有一定的技术门槛,代码基础较为薄弱的某些测试人员常难以对需进行补充的测试案例进行准确完全的确定,使得针对程序代码的测试不够充分。
技术实现要素:5.本发明提供了一种测试案例推荐方法、装置、设备及存储介质,实现了对代码覆盖率报告的自动解析,以及测试案例的准确确定,提升了测试案例推荐的准确度和完全性。
6.第一方面,本发明实施例提供了一种测试案例推荐方法,该方法包括:
7.获取测试代码,并确定测试代码的完整调用关系和代码覆盖率报告;
8.解析代码覆盖率报告,确定至少一个待推荐方法名,并确定测试代码中与各待推荐方法名对应的异常代码;待推荐方法名为测试代码中未覆盖或未完全覆盖方法的方法名;
9.根据完整调用关系,确定测试代码中与待推荐方法名对应的所有目标应用程序编程接口;
10.根据各目标应用程序编程接口、各待推荐方法名与各异常代码确定至少一个案例推荐报告,并根据各案例推荐报告确定目标推荐测试案例。
11.第二方面,本发明实施例还提供了一种测试案例推荐装置,该测试案例推荐装置包括:
12.代码信息获取模块,用于获取测试代码,并确定测试代码的完整调用关系和代码覆盖率报告;
13.异常确定模块,用于解析代码覆盖率报告,确定至少一个待推荐方法名,并确定测试代码中与各待推荐方法名对应的异常代码;待推荐方法名为测试代码中未覆盖或未完全
覆盖方法的方法名;
14.接口确定模块,用于根据完整调用关系,确定测试代码中与待推荐方法名对应的所有目标应用程序编程接口;
15.案例推荐模块,用于根据各目标应用程序编程接口、各待推荐方法名与各异常代码确定至少一个案例推荐报告,并根据各案例推荐报告确定目标推荐测试案例。
16.第三方面,本发明实施例还提供了一种测试案例推荐设备,该测试案例推荐设备包括:
17.至少一个处理器;以及
18.与至少一个处理器通信连接的存储器;其中,
19.存储器存储有可被至少一个处理器执行的计算机程序,计算机程序被至少一个处理器执行,使得至少一个处理器能够实现本发明任一实施例的测试案例推荐方法。
20.第四方面,本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机指令,计算机指令用于使处理器执行时实现本发明任一实施例的测试案例推荐方法。
21.本发明实施例提供的一种测试案例推荐方法、装置、设备及存储介质,通过获取测试代码,并确定测试代码的完整调用关系和代码覆盖率报告;解析代码覆盖率报告,确定至少一个待推荐方法名,并确定测试代码中与各待推荐方法名对应的异常代码;待推荐方法名为测试代码中未覆盖或未完全覆盖方法的方法名;根据完整调用关系,确定测试代码中与待推荐方法名对应的所有目标应用程序编程接口;根据各目标应用程序编程接口、各待推荐方法名与各异常代码确定至少一个案例推荐报告,并根据各案例推荐报告确定目标推荐测试案例。通过采用上述技术方案,依据预先确定出的测试代码的完整调用关系,以及测试代码执行时获取的代码覆盖率报告,对测试代码中存在覆盖率不足的方法的完整调用链进行自动确定,进而确定出测试代码中需进行补充方法对应的应用程序编程接口,利用确定出的目标应用程序编程接口、待推荐方法名和异常代码自动生成包含对应信息的测试案例,实现了与测试代码适配度高的测试案例的自动生成,解决了人工分析易遗漏测试案例的问题,避免了人工针对代码覆盖率报告分析的片面性和不稳定性,提升了对测试代码进行测试的充分性和测试效率。
22.应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
23.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
24.图1是本发明实施例一中的一种测试案例推荐方法的流程图;
25.图2是本发明实施例二中的一种测试案例推荐方法的流程图;
26.图3是本发明实施例二中的一种遍历代码覆盖率报告对应的所有第一类型标记文件,确定节点类名信息和异常行号信息的流程示意图;
27.图4是本发明实施例三中的一种测试案例推荐装置的结构示意图;
28.图5是本发明实施例四中的一种测试案例推荐设备的结构示意图。
具体实施方式
29.为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
30.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
31.实施例一
32.图1为本发明实施例一提供的一种测试案例推荐方法的流程图,本发明实施例可适用于对测试代码中覆盖不完全方法进行测试案例补充的情况,该方法可以由测试案例推荐装置来执行,该测试案例推荐装置可以由软件和/或硬件来实现,该测试案例推荐装置可以配置在测试案例推荐设备上,该测试案例推荐设备可以是笔记本、台式计算机以及智能平板等。
33.如图1所示,本发明实施例一提供的一种测试案例推荐方法,具体包括如下步骤:
34.s101、获取测试代码,并确定测试代码的完整调用关系和代码覆盖率报告。
35.在本实施例中,测试代码具体可理解为用以对系统或程序性能进行测试的代码,可选的,测试代码可为银行系统中用于进行系统功能性测试的代码,也可为其他适用于不同场景下的测试代码,本发明实施例对从不进行限制。完整调用关系具体可理解为代码中不同方法间依据调用先后顺序构成的调用链信息。代码覆盖率(code coverage)具体可理解为一种软件测试中的度量指标,用以明确测试过程中被执行的源代码占全部源代码的比例。代码覆盖率报告具体可理解为测试代码中完成测试的代码在全部测试代码中的分布情况,以及部分执行和未执行的代码在测试代码中的分布情况的报告。
36.具体的,获取需要被执行测试任务的测试代码,对测试代码中的语法、结构和过程等信息进行分析,确定测试代码中各方法的调用链,也即确定出测试代码中不同方法间的完整调用关系,同时通过代码覆盖率统计工具统计测试代码执行过程中的代码执行情况,生成测试代码的代码覆盖率报告。
37.s102、解析代码覆盖率报告,确定至少一个待推荐方法名,并确定测试代码中与各待推荐方法名对应的异常代码。
38.其中,待推荐方法名为测试代码中未覆盖或未完全覆盖方法的方法名。
39.在本实施例中,待推荐方法具体可理解为测试代码中未覆盖或未完全覆盖代码在
完整代码中所对应的方法函数。待推荐方法名具体可理解为待推荐方法或函数所对应的名称,如“getfullgrplnstore”方法。异常代码具体可理解为测试代码在执行测试过程中,未完全覆盖或未覆盖的代码。
40.具体的,由于代码覆盖率报告中已对测试代码中未覆盖,或未完全覆盖的代码部分进行标注,故可通过对代码覆盖率报告进行解析,确定其中存在覆盖问题的异常代码,并依据异常代码对应的调用关系,确定不同异常代码在测试代码中所对应的方法,将各方法确定为需要进行测试丰富的待推荐方法,并获得各待推荐方法对应的待推荐方法名。
41.s103、根据完整调用关系,确定测试代码中与待推荐方法名对应的所有目标应用程序编程接口。
42.在本实施例中,应用程序编程接口(application programming interface,api)具体可理解为软件系统中不同组成部分衔接的约定,也即为一组定义、程序及协议的集合,api接口为实现功能,其下应对应包括一系列存在相互调用关系的方法函数。目标应用程序编程接口具体可理解为调用方法包括带推荐方法的api接口。
43.具体的,由于完整调用关系中可包括测试代码中不同方法间的完整调用链信息,且待推荐方法名所对应方法可位于不同调用链的不同位置,因此,在确定出待推荐方法名后,可由完整调用关系中确定测试代码中所有包含待推荐方法名的调用链,进而在确定出的每个调用链中以待推荐方法名为起点,依据调用关系向上查询即可确定在每个调用链中作为调用起始的api接口,将确定出的api接口确定为目标应用程序编程接口。
44.在本发明实施例中,通过对代码覆盖率报告进行自动解析,以及确定的测试代码的完整调用关系,使得针对测试代码中未完全覆盖测试的代码,可自动确定代码所在的方法和调用该代码的应用程序编程接口,提升了查询效率和准确性,进而使得依据确定所得信息构建的测试案例更加适用于对测试代码的测试。
45.s104、根据各目标应用程序编程接口、各待推荐方法名与各异常代码确定至少一个案例推荐报告,并根据各案例推荐报告确定目标推荐测试案例。
46.在本实施例中,案例推荐报告具体可理解为用以帮助确定或生成,对测试代码中未完全覆盖代码进行测试的测试案例的信息集合。目标推荐测试案例具体可理解为对于测试代码中,在执行测试过程中无法完全覆盖的代码进行补充测试的测试案例。
47.具体的,根据各目标应用程序编程接口、各待推荐方法名和各异常代码间的对应关系,按照内容详尽程度针对每个异常代码生成对应的案例推荐报告,进而依据案例推荐报告中包含的目标应用程序编程接口、待推荐方法名和异常代码信息,生成包含上述信息的测试案例,将生成的测试案例确定为目标推荐测试案例,并将目标推荐测试案例补充至测试代码对应的测试案例集中,使得后续依据测试案例集对测试代码执行的测试更加充分。
48.本实施例的技术方案,通过获取测试代码,并确定测试代码的完整调用关系和代码覆盖率报告;解析代码覆盖率报告,确定至少一个待推荐方法名,并确定测试代码中与各待推荐方法名对应的异常代码;待推荐方法名为测试代码中未覆盖或未完全覆盖方法的方法名;根据完整调用关系,确定测试代码中与待推荐方法名对应的所有目标应用程序编程接口;根据各目标应用程序编程接口、各待推荐方法名与各异常代码确定至少一个案例推荐报告,并根据各案例推荐报告确定目标推荐测试案例。通过采用上述技术方案,依据预先
确定出的测试代码的完整调用关系,以及测试代码执行时获取的代码覆盖率报告,对测试代码中存在覆盖率不足的方法的完整调用链进行自动确定,进而确定出测试代码中需进行补充方法对应的应用程序编程接口,利用确定出的目标应用程序编程接口、待推荐方法名和异常代码自动生成包含对应信息的测试案例,实现了与测试代码适配度高的测试案例的自动生成,解决了人工分析易遗漏测试案例的问题,避免了人工针对代码覆盖率报告分析的片面性和不稳定性,提升了对测试代码进行测试的充分性和测试效率。
49.实施例二
50.图2为本发明实施例二提供的一种测试案例推荐方法的流程图,本发明实施例的技术方案在上述各可选技术方案的基础上进一步优化,通过静态代码分析确定测试代码的完整调用关系,通过预先设置的代码覆盖率统计工具在测试代码执行时对其中代码的测试覆盖率情况进行统计,生成对应的代码覆盖率报告,进而对代码覆盖率报告中不同类型标记文件进行遍历信息提取和比对,得到测试代码中未完全覆盖代码对应的待推荐方法名,进而依据各待推荐方法名,确定其在完整调用关系中对应的向上调用链,进而确定各待推荐方法名对应的至少一个目标应用程序编程接口,并依据确定出的各信息生成对应的案例推荐报告,并依据案例推荐报告为测试代码对应测试案例集补入目标推荐测试案例,使得推荐的测试案例与测试代码更加相符,进而提升了依据补入后测试案例集进行代码测试的准确性。
51.如图2所示,本发明实施例二提供的一种测试案例推荐方法,具体包括如下步骤:
52.s201、获取测试代码,对测试代码进行静态代码解析,确定测试代码的完整调用关系。
53.在本实施例中,静态代码分析具体可理解为在无需运行被测代码的基础上,仅通过分析被测代码的语法、结构和过程等,得到工程、模块和类之间的依赖关系,以及方法调用关系等信息的分析方法。可选的,静态代码分析可通过静态代码分析工具实现,静态代码分析工具的原理可分为两种,一种是分析源代码编译后的中间文件,如java代码的callgraph工具;一种是分析源文件,如java代码的pmd工具。
54.具体的,获取测试代码,并根据测试代码的代码类型输入至预先确定的静态代码分析工具中,对测试代码中各方法的调用关系进行确定,得到测试代码的完整调用关系。
55.s202、在测试代码执行时,通过预设代码覆盖率统计工具生成测试代码的代码覆盖率报告。
56.在本实施例中,代码覆盖率统计工具具体可理解为用于对测试案例的执行进行监控,以确定测试代码中完成测试的代码情况的工具。可选的,预设代码覆盖率工具可为jacoco工具,也可为增量覆盖率统计工具diff-cover,也可为其他类型的代码覆盖率统计工具,本发明实施例对此不进行限制。
57.示例性的,假设代码覆盖率统计工具为jacoco工具,则在某个项目的war部署时,启动应用或服务的同时即会启动jacocoagent,对测试代码的执行进行监控,并用jacoco的dump和report命令,生成jacoco代码覆盖率报告。进一步地,假设代码覆盖率统计工具还包括增量覆盖统计工具diff-cover,则可根据差异代码和jacoco代码覆盖率报告,通过执行diff-cover命令生成对应的diff-cover增量覆盖率报告。
58.s203、遍历代码覆盖率报告对应的所有第一类型标记文件,确定节点类名信息和
异常行号信息。
59.在本实施例中,第一类型标记文件具体可理解为代码覆盖率报告中对异常代码行进行标记的文件,可选的,第一类型标记文件可为html形式的文件。节点类名信息具体可理解为根据异常代码所在第一类型标记文件地址确定的,其在代码覆盖率报告中对应的节点的名称。异常行号信息具体可理解为异常代码在测试代码中对应的行编号。
60.具体的,由于测试代码的长度较长,代码覆盖率报告常被拆分为多个标记文件,针对其中所有对异常代码进行标记的第一类型标记文件进行遍历,根据每个第一类型标记文件的源文件路径确定异常代码在代码覆盖率报告中对应的节点类名信息,同时由于第一类型标记文件中对各代码行是否完全覆盖通过不同的标记进行了标记,故可根据每个代码行对应的标记的类型,确定其中属于未完全覆盖或未覆盖的代码行,将该代码行在第一类型标记文件中的行号确定为异常行号信息。
61.进一步地,图3为本发明实施例二提供的一种遍历代码覆盖率报告对应的所有第一类型标记文件,确定节点类名信息和异常行号信息的流程示意图,如图3所示,具体包括如下步骤:
62.s2031、对各第一类型标记文件的路径信息中的预设分隔符进行替换调整,确定路径信息对应的节点类名信息。
63.在本实施例中,预设分隔符具体可理解为预先设置的存在于路径信息中,需要被替换以符合节点类名信息命名方式的分隔符。
64.示例性的,在第一类型标记文件为jacoco代码覆盖率报告中的html形式的标记文件时,该文件的路径信息可表示为“files/gykf2b/boeing-ofb/1.0.0_20221011_2282108/web/com.abchin a.ofb.logic.fbsto001/recvdirecttranslogic”,则在该情况下可以“.”作为预设分隔符,以最后一个“/”为界线,将“/”前的“com.abchina.ofb.logic.fbsto001”赋值给prename,将“/”后的“recvdirecttranslogic”赋值给proname,并将其中的“.”处理为“/”,拼接所得该路径信息对应的节点类名信息classname可表示为“com/abchina/ofb/logic/fbsto001/recvdirecttranslogic”。
65.接上述示例,在第一类型标记文件为diff-cover增量覆盖率报告时,则可针对diff-cover增量覆盖率报告中第一列sourcefile中的“src/main/java/”作为分隔符,将其之后的内容和“.java”之间的字符赋值给节点类名信息classname。
66.s2032、根据预设异常覆盖标识对各第一类型标记文件进行行遍历,确定异常行号信息。
67.在本实施例中,预设异常覆盖标识具体可理解为第一类型标记文件中,用以对存在覆盖异常的测试代码进行标记的标识表现形式,示例性的,可将完全覆盖的测试代码的覆盖标识确定为绿色,将未完全覆盖的测试代码的覆盖标识确定为黄色,将未覆盖的测试代码的覆盖标识确定为红色,也可根据实际需求进行特异性设置,本发明实施例对此不进行限制。
68.具体的,对各第一类型标记文件以行为单位进行遍历,根据各行中包含的标识信息,确定该行是否属于异常覆盖的代码行,在确定出该行属于未完全覆盖或未覆盖的代码行时,将其行号确定为异常行号信息。
69.示例性的,在第一类型标记文件为jacoco代码覆盖率报告中的html形式的标记文
件时,可在对第一类型标记文件进行遍历时获取其中每一行的行号和底色,分别赋值至line和colour集合中,过滤出该第一类型标记文件中所有以红色和黄色为底色的行号,并赋值给一个数组lines,也即数组lines中包含的行号即为第一类型标记文件中的异常行号信息。
70.接上述示例,在第一类型标记文件为diff-cover增量覆盖率报告时,则可将diff-cover增量覆盖率报告中第三列missing.lines赋值给数组lines,也即数组lines中包含的行号即为第一类型标记文件中的异常行号信息。
71.s204、将节点类名信息与异常行号信息,与代码覆盖率报告对应的第二类型标记文件进行比对,确定异常中间方法名。
72.在本实施例中,第二类型标记文件具体可理解为代码覆盖率报告中对测试代码数据内容和结构进行描述的文件,可选的,第二类型标记文件可为xml形式的文件。异常中间方法名具体可理解为第二类型标记文件中确定出的存在异常的代码所对应的方法名,因多行异常代码可能属于同一方法下的代码,故针对同一异常方法可输出多个异常中间方法名。
73.具体的,首先在代码覆盖率报告对应的第二类型标记文件中匹配与节点类名信息对应的节点,进而在该节点的子节点中逐一确定与异常行号信息对应代码所属的方法名,将确定出的方法名确定为异常中间方法名。
74.示例性的,在第二类型标记文件为xml形式的文件时,首先在其中匹配节点class.name=classname的节点,以上述第一类型标记文件为例,则确定出的节点为“com/abchina/ofb/logic/fbsto001/recvdirecttranslogic”,并在该节点的子节点method.name下,逐一查找数组lines中的行号归属于哪一个method,将该method的方法名确定为异常中间方法名。
75.s205、将各异常中间方法名去重,确定至少一个待推荐方法名。
76.具体的,由于多个异常代码行可能属于同一方法,故确定出的各异常中间方法名可能出现重复现象,而在确定需要推荐的测试案例时仅需明确需要进行推荐的方法,此时针对各异常中间方法名进行去重,确定出各不相同的异常中间方法名,并将其作为待推荐方法名。
77.s206、针对每个待推荐方法名,根据完整调用关系确定待推荐方法名对应的向上调用链。
78.具体的,针对每个待推荐方法名,在完整调用关系中确定包含该待推荐方法名的所有完整调用链,进而将完整调用链中位于待推荐方法名对应方法上游的调用链,也即对待推荐方法名对应方法产生调用关系的调用链确定为待推荐方法名对应的向上调用链。
79.s207、将向上调用链中携带预设标识信息的应用程序编程接口确定为,与待推荐方法名对应的目标应用程序编程接口。
80.在本实施例中,预设标识信息具体可理解为用以明确调用链中api位置的标识信息。示例性的,可通过“!entry!”表示api入口位置。
81.具体的,以待推荐方法名对应方法为起点,在与其相对应的各向上调用链中依次向上查找,直到查找到携带预设标识信息的api入口位置,同一待推荐方法名对应的api入口位置可为一个或多个,本发明实施例中将与待推荐方法名对应的各api入口位置的api确
定为目标应用程序编程接口。
82.s208、针对每个异常代码,确定与异常代码对应的待推荐方法名和目标应用程序编程接口。
83.具体的,针对每一个异常代码,根据其所属关系确定与其相对应的待推荐方法名,以及对其产生调用的目标应用程序编程接口,根据对应关系的不同,同一个异常代码可对应多个目标应用程序编程接口。
84.s209、将异常代码、待推荐方法名和目标应用程序编程接口依据第一预设报告生成格式,生成案例推荐报告。
85.在本实施例中,第一预设报告生成格式具体可理解为根据实际情况预先设置的,用以承载用于确定待生成并补充的测试案例的信息的报告格式。
86.具体的,将异常代码、待推荐方法名和目标应用程序编程接口按照第一预设报告生成格式填至对应位置,得到对应生成的案例推荐报告。
87.进一步地,若异常代码中还包括功能接口信息,则针对每个异常代码,确定与异常代码对应的待推荐方法名、目标应用程序编程接口和功能接口信息;将异常代码、待推荐方法名、目标应用程序编程接口和功能接口信息依据第二预设报告生成格式,生成案例推荐报告。
88.在本实施例中,功能接口信息具体可理解为利用swagger插件,通过访问swagger地址而批量结析出的swagger中的全量接口信息。
89.具体的,在异常代码中还包括功能接口信息时,为使得依据案例推荐报告生成的测试案例更加适用于对测试代码的测试,故在生成案例推荐报告时,需考虑异常代码与待推荐方法名、目标应用程序编程接口和功能接口信息间的对应关系,针对每一种不同的组合形式生成对应的案例推荐报告,进而使得依据案例推荐报告确定的目标推荐测试案例更加符合测试代码的测试需求。
90.s210、根据各案例推荐报告确定目标推荐测试案例。
91.本实施例的技术方案,在获取测试代码后,依次通过静态代码分析确定测试代码的完整调用关系,并通过预先设置的代码覆盖率统计工具在测试代码执行时对其中代码的测试覆盖率情况进行统计,生成对应的代码覆盖率报告,通过对代码覆盖率报告中两种不同类型标记文件进行遍历和比对,确定测试代码中未完全覆盖代码对应的待推荐方法名,进而依据各待推荐方法名,确定其在完整调用关系中对应的向上调用链,进而确定各待推荐方法名对应的至少一个目标应用程序编程接口,并依据确定出的各信息生成对应的案例推荐报告,并依据案例推荐报告为测试代码对应测试案例集补入目标推荐测试案例,使得推荐的测试案例与测试代码更加相符,进而提升了依据补入后测试案例集进行代码测试的准确性。
92.实施例三
93.图4为本发明实施例三提供的一种测试案例推荐装置的结构示意图,该测试案例推荐装置包括:代码信息获取模块31,异常确定模块32,接口确定模块33和案例推荐模块34。
94.其中,代码信息获取模块31,用于获取测试代码,并确定测试代码的完整调用关系和代码覆盖率报告;异常确定模块32,用于解析代码覆盖率报告,确定至少一个待推荐方法
名,并确定测试代码中与各待推荐方法名对应的异常代码;待推荐方法名为测试代码中未覆盖或未完全覆盖方法的方法名;接口确定模块33,用于根据完整调用关系,确定测试代码中与待推荐方法名对应的所有目标应用程序编程接口;案例推荐模块34,用于根据各目标应用程序编程接口、各待推荐方法名与各异常代码确定至少一个案例推荐报告,并根据各案例推荐报告确定目标推荐测试案例。
95.本实施例的技术方案,对测试代码中存在覆盖率不足的方法的完整调用链进行自动确定,进而确定出测试代码中需进行补充方法对应的应用程序编程接口,利用确定出的目标应用程序编程接口、待推荐方法名和异常代码自动生成包含对应信息的测试案例,实现了与测试代码适配度高的测试案例的自动生成,解决了人工分析易遗漏测试案例的问题,避免了人工针对代码覆盖率报告分析的片面性和不稳定性,提升了对测试代码进行测试的充分性和测试效率。
96.可选的,代码信息获取模块31,包括:
97.调用关系确定单元,用于对测试代码进行静态代码分析,确定测试代码的完整调用关系;
98.覆盖率报告确定单元,用于在测试代码执行时,通过预设代码覆盖率统计工具生成测试代码的代码覆盖率报告。
99.可选的,异常确定模块32,包括:
100.异常行号确定单元,用于遍历代码覆盖率报告对应的所有第一类型标记文件,确定节点类名信息和异常行号信息;
101.中间方法确定单元,用于将节点类名信息与异常行号信息,与代码覆盖率报告对应的第二类型标记文件进行比对,确定异常中间方法名;
102.待推荐方法确定单元,用于将各异常中间方法名去重,确定至少一个待推荐方法名。
103.可选的,异常行号确定单元,具体用于:对各第一类型标记文件的路径信息中的预设分隔符进行替换调整,确定路径信息对应的节点类名信息;根据预设异常覆盖标识对各第一类型标记文件进行行遍历,确定异常行号信息。
104.可选的,接口确定模块33,包括:
105.调用链确定单元,用于针对每个待推荐方法名,根据完整调用关系确定待推荐方法名对应的向上调用链;
106.接口确定单元,用于将向上调用链中携带预设标识信息的应用程序编程接口确定为,与待推荐方法名对应的目标应用程序编程接口。
107.可选的,案例推荐模块34,包括:
108.对应关系确定单元,用于针对每个异常代码,确定与异常代码对应的待推荐方法名和目标应用程序编程接口;
109.报告生成单元,用于将异常代码、待推荐方法名和目标应用程序编程接口依据第一预设报告生成格式,生成案例推荐报告。
110.可选的,若异常代码中还包括功能接口信息,则案例推荐模块34还用于:针对每个异常代码,确定与异常代码对应的待推荐方法名、目标应用程序编程接口和功能接口信息;将异常代码、待推荐方法名、目标应用程序编程接口和功能接口信息依据第二预设报告生
成格式,生成案例推荐报告。
111.本发明实施例提供的测试案例推荐装置可执行本发明任意实施例所提供的测试案例推荐方法,具备执行方法相应的功能模块和有益效果。
112.实施例四
113.图5为本发明实施例四提供的一种测试案例推荐设备的结构示意图。测试案例推荐设备40可为电子设备,旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
114.如图5所示,测试案例推荐设备40包括至少一个处理器41,以及与至少一个处理器41通信连接的存储器,如只读存储器(rom)42、随机访问存储器(ram)43等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器41可以根据存储在只读存储器(rom)42中的计算机程序或者从存储单元48加载到随机访问存储器(ram)43中的计算机程序,来执行各种适当的动作和处理。在ram 43中,还可存储测试案例推荐设备40操作所需的各种程序和数据。处理器41、rom 42以及ram 43通过总线44彼此相连。输入/输出(i/o)接口45也连接至总线44。
115.测试案例推荐设备40中的多个部件连接至i/o接口45,包括:输入单元46,例如键盘、鼠标等;输出单元47,例如各种类型的显示器、扬声器等;存储单元48,例如磁盘、光盘等;以及通信单元49,例如网卡、调制解调器、无线通信收发机等。通信单元49允许测试案例推荐设备40通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
116.处理器41可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器41的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。处理器41执行上文所描述的各个方法和处理,例如测试案例推荐方法。
117.在一些实施例中,测试案例推荐方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元48。在一些实施例中,计算机程序的部分或者全部可以经由rom 42和/或通信单元49而被载入和/或安装到测试案例推荐设备40上。当计算机程序加载到ram 43并由处理器41执行时,可以执行上文描述的测试案例推荐方法的一个或多个步骤。备选地,在其他实施例中,处理器41可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行测试案例推荐方法。
118.本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至
少一个输出装置。
119.用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
120.在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
121.为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
122.可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)、区块链网络和互联网。
123.计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与vps服务中,存在的管理难度大,业务扩展性弱的缺陷。
124.应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
125.上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
技术特征:1.一种测试案例推荐方法,其特征在于,包括:获取测试代码,并确定所述测试代码的完整调用关系和代码覆盖率报告;解析所述代码覆盖率报告,确定至少一个待推荐方法名,并确定所述测试代码中与各所述待推荐方法名对应的异常代码;所述待推荐方法名为所述测试代码中未覆盖或未完全覆盖方法的方法名;根据所述完整调用关系,确定所述测试代码中与所述待推荐方法名对应的所有目标应用程序编程接口;根据各所述目标应用程序编程接口、各所述待推荐方法名与各所述异常代码确定至少一个案例推荐报告,并根据各所述案例推荐报告确定目标推荐测试案例。2.根据权利要求1所述的方法,其特征在于,所述确定所述测试代码的完整调用关系和代码覆盖率报告,包括:对所述测试代码进行静态代码分析,确定所述测试代码的完整调用关系;在所述测试代码执行时,通过预设代码覆盖率统计工具生成所述测试代码的代码覆盖率报告。3.根据权利要求1所述的方法,其特征在于,解析所述代码覆盖率报告,确定至少一个待推荐方法名,包括:遍历所述代码覆盖率报告对应的所有第一类型标记文件,确定节点类名信息和异常行号信息;将所述节点类名信息与所述异常行号信息,与所述代码覆盖率报告对应的第二类型标记文件进行比对,确定异常中间方法名;将各所述异常中间方法名去重,确定至少一个待推荐方法名。4.根据权利要求3所述的方法,其特征在于,所述遍历所述代码覆盖率报告对应的所有第一类型标记文件,确定节点类名信息和异常行号信息,包括:对各所述第一类型标记文件的路径信息中的预设分隔符进行替换调整,确定所述路径信息对应的节点类名信息;根据预设异常覆盖标识对各所述第一类型标记文件进行行遍历,确定异常行号信息。5.根据权利要求1所述的方法,其特征在于,所述根据所述完整调用关系,确定所述测试代码中与所述待推荐方法名对应的所有目标应用程序编程接口,包括:针对每个所述待推荐方法名,根据所述完整调用关系确定所述待推荐方法名对应的向上调用链;将所述向上调用链中携带预设标识信息的应用程序编程接口确定为,与所述待推荐方法名对应的目标应用程序编程接口。6.根据权利要求1所述的方法,其特征在于,所述根据各所述目标应用程序编程接口、各所述待推荐方法名与各所述异常代码确定至少一个案例推荐报告,包括:针对每个所述异常代码,确定与所述异常代码对应的待推荐方法名和目标应用程序编程接口;将所述异常代码、所述待推荐方法名和所述目标应用程序编程接口依据第一预设报告生成格式,生成案例推荐报告。7.根据权利要求6所述的方法,其特征在于,若所述异常代码中还包括功能接口信息,
所述根据各所述目标应用程序编程接口、各所述待推荐方法名与各所述异常代码确定至少一个案例推荐报告,还包括:针对每个所述异常代码,确定与所述异常代码对应的待推荐方法名、目标应用程序编程接口和功能接口信息;将所述异常代码、所述待推荐方法名、所述目标应用程序编程接口和所述功能接口信息依据第二预设报告生成格式,生成案例推荐报告。8.一种测试案例推荐装置,其特征在于,包括:代码信息获取模块,用于获取测试代码,并确定所述测试代码的完整调用关系和代码覆盖率报告;异常确定模块,用于解析所述代码覆盖率报告,确定至少一个待推荐方法名,并确定所述测试代码中与各所述待推荐方法名对应的异常代码;所述待推荐方法名为所述测试代码中未覆盖或未完全覆盖方法的方法名;接口确定模块,用于根据所述完整调用关系,确定所述测试代码中与所述待推荐方法名对应的所有目标应用程序编程接口;案例推荐模块,用于根据各所述目标应用程序编程接口、各所述待推荐方法名与各所述异常代码确定至少一个案例推荐报告,并根据各所述案例推荐报告确定目标推荐测试案例。9.一种测试案例推荐设备,其特征在于,所述测试案例推荐设备包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-7中任一项所述的测试案例推荐方法。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现权利要求1-7中任一项所述的测试案例推荐方法。
技术总结本发明公开了一种测试案例推荐方法、装置、设备及存储介质。该方法包括:通过获取测试代码,并确定测试代码的完整调用关系和代码覆盖率报告;解析代码覆盖率报告,确定至少一个待推荐方法名,并确定测试代码中与各待推荐方法名对应的异常代码;待推荐方法名为测试代码中未覆盖或未完全覆盖方法的方法名;根据完整调用关系,确定测试代码中与待推荐方法名对应的所有目标应用程序编程接口;根据各目标应用程序编程接口、各待推荐方法名与各异常代码确定至少一个案例推荐报告,并根据各案例推荐报告确定目标推荐测试案例。本发明实施例的技术方案,解决了人工分析易遗漏测试案例的问题,避免了人工针对代码覆盖率报告分析的片面性和不稳定性。和不稳定性。和不稳定性。
技术研发人员:于虹
受保护的技术使用者:中国农业银行股份有限公司
技术研发日:2022.10.27
技术公布日:2023/1/6