CN117667750B - 测试用例生成、测试方法、装置、计算机设备及存储介质 - Google Patents

测试用例生成、测试方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN117667750B
CN117667750B CN202410135742.9A CN202410135742A CN117667750B CN 117667750 B CN117667750 B CN 117667750B CN 202410135742 A CN202410135742 A CN 202410135742A CN 117667750 B CN117667750 B CN 117667750B
Authority
CN
China
Prior art keywords
target
code
service
test case
execution result
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
Application number
CN202410135742.9A
Other languages
English (en)
Other versions
CN117667750A (zh
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 Fenyang Technology Co ltd
Original Assignee
Beijing Fenyang 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 Fenyang Technology Co ltd filed Critical Beijing Fenyang Technology Co ltd
Priority to CN202410135742.9A priority Critical patent/CN117667750B/zh
Publication of CN117667750A publication Critical patent/CN117667750A/zh
Application granted granted Critical
Publication of CN117667750B publication Critical patent/CN117667750B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本公开提供了一种测试用例生成、测试方法、装置、计算机设备及存储介质,其中,该测试用例生成方法包括:测试用例生成方法,其特征在于,包括:获取用户在访问目标服务时的服务请求信息,并基于所述服务请求信息,生成候选测试用例;对所述候选测试用例进行回放,并获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息;所述代码覆盖信息用于描述所述目标服务响应所述候选测试用例过程中的代码执行情况;基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例;其中,所述待测试服务和所述目标服务属于相同服务的不同版本。

Description

测试用例生成、测试方法、装置、计算机设备及存储介质
技术领域
本公开涉及接口测试技术领域,具体而言,涉及一种测试用例生成、测试方法、装置、计算机设备及存储介质。
背景技术
随着业务需求的快速迭代,线上业务系统会发生频繁改动甚至发生重构。为了保证在业务系统发生改动或者重构后的准确性和有效性,需要对业务系统的数据接口服务进行准确性、有效性测试;通过接口测试可以实现对系统与外界,以及系统内部各模块之间数据交互功能进行验证。当前的接口测试方法存在测试效率低的问题。
发明内容
本公开实施例至少提供一种测试用例生成、测试方法、装置、计算机设备及存储介质。
第一方面,本公开实施例提供了一种测试用例生成方法,包括:
获取用户在访问目标服务时的服务请求信息,并基于所述服务请求信息,生成候选测试用例;
对所述候选测试用例进行回放,并获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息;所述代码覆盖信息用于描述所述目标服务响应所述候选测试用例过程中的代码执行情况;
基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例;
其中,所述待测试服务和所述目标服务属于相同服务的不同版本。
这样,通过获取用户在访问目标服务时的服务请求信息,并基于所述服务请求信息,生成候选测试用例,并对所述候选测试用例进行回放,并获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息;所述代码覆盖信息用于描述所述目标服务响应所述候选测试用例过程中的代码执行情况;然后基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例,从而使得得到的目标测试用例能够以较少的数量,覆盖数据接口服务的更多代码,从而在测试效率、和测试的准确性之间取得平衡,减少测试用例的回放次数和回放所耗时间,提升测试效率,并降低了测试用例的维护成本。
一种可能的实施方式中,所述获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息,包括:
获取所述目标服务对所述候选测试用例进行响应过程中,与所述目标服务对应的代码文件中各行代码是否被执行的执行信息;
基于所述代码文件中各行代码的执行信息,生成所述代码覆盖信息。
这样,可以快速全面获取目标服务在执行候选测试用例时,目标服务对应的代码文件中各行代码被执行的情况,以方便后续筛选目标测试用例的过程。
一种可能的实施方式中,所述基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例,包括:
遍历所述目标服务对应代码文件的各行代码,并针对当前遍历到的代码,基于所述候选测试用例对应的代码覆盖信息,从所述候选测试用例中,确定在所述候选测试用例回放过程中,执行了所述当前遍历到的代码的目标候选测试用例;
从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的目标测试用例。
这样,通过遍历代码文件中的各行代码,从候选测试用例中,以更少的数据处理量,确定能够满足代码覆盖条件的目标测试用例。
一种可能的实施方式中,所述从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的目标测试用例,包括:
判断当前已确定的目标测试用例中是否存在任一所述目标候选测试用例;其中,所述当前已确定的目标测试用例是对遍历过的其他代码进行遍历时确定的目标测试用例;
若存在,遍历下一行代码,直至满足目标结束条件;
若不存在,从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的新的目标测试用例。
一种可能的实施方式中,所述从所述目标候选测试用例中,确定新的目标测试用例,包括:
基于各个所述目标候选测试用例分别对应的代码覆盖信息,确定各个所述目标候选测试用例分别对应的代码覆盖率;
基于各个所述目标候选测试用例分别对应的代码覆盖率,从所述目标候选测试用例中确定所述新的目标测试用例。
一种可能的实施方式中,所述目标结束条件包括下述至少一项:
确定的目标测试用例的数量达到目标数量;
所述目标服务对应代码文件中的各行代码被遍历完毕。
第二方面,本公开实施例还提供一种测试方法,包括:
控制目标服务和待测试服务执行目标测试用例,得到所述目标服务执行所述目标测试用例的第一执行结果、以及所述待测试服务执行所述目标测试用例的第二执行结果;其中,所述目标测试用例基于第一方面、或第一方面任一项所述的测试用例生成方法生成;
对所述第一执行结果和所述第二执行结果进行比对处理,得到利用所述目标测试用例对所述待测试服务进行测试的测试结果。
这样,由于得到的目标测试用例能够以较少的数量,覆盖数据接口服务的更多代码,从而在测试效率、和测试的准确性之间取得平衡,减少测试用例的回放次数和回放所耗时间,提升测试效率,并降低了测试用例的维护成本。
一种可能的实施方式中,所述对所述第一执行结果和所述第二执行结果进行比对处理,得到对所述待测试服务的测试结果,包括:
对所述第一执行结果和所述第二执行结果进行字符串对比,得到字符串对比结果;
在所述字符串对比结果表征所述第一执行结果和所述第二执行结果分别对应的字符串一致的情况下,确定所述测试结果为:测试成功;
在所述字符串对比结果表征所述第一执行结果和所述第二执行结果分别对应的字符串不一致的情况下,确定所述第一执行结果和所述第二执行结果的第一差异性信息,并基于所述第一差异性信息,确定所述测试结果。
一种可能的实施方式中,所述确定所述第一执行结果和所述第二执行结果的第一差异性信息,包括:
将所述第一执行结果和所述第二执行结果分别转换为JSON对象;
按照目标递归顺序,对所述第一执行结果和所述第二执行结果分别对应的JSON对象进行递归比对,得到所述第一执行结果和所述第二执行结果的第一差异性信息;
其中,所述目标递归顺序,用于描述多种JSON数据类型构成的类型顺序,所述类型顺序用于对所述第一执行结果和所述第二执行结果分别对应的JSON对象进行遍历。
这样,在目标服务和待测试服务对同一测试用例的响应结果不一致的情况下,能够以更小的粒度对响应结果中的变化字段进行识别,以得到更加精确的测试结果,减少问题排查所需要的工作量,提升测试效率。
一种可能的实施方式中,所述基于所述第一差异性信息,确定所述测试结果,包括:
在所述第一差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中的键key不相同、或者数组长度不相等、或者value的类型不相同的情况下,将所述测试结果确定为:测试失败;
在所述第一差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中和目标键key对应的值value不相同的情况下,控制所述目标服务再次执行所述目标测试用例,得到第三执行结果;
确定所述第三执行结果和所述第一执行结果之间的第二差异性信息;
在所述第二差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中目标键key对应的value不相同的情况下,为所述目标测试用例添加人工校验标记;所述人工校验标记用于提示对所述目标测试用例进行人工校验,以得到所述目标测试用例对应的测试结果;
在除所述第二差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中目标键key对应的value不相同外的其他情况下,确定所述测试结果为:测试失败。
这样,利用多次回放机制精确识别变化字段的产生是否为服务的正常响应情况,从而提升测试的准确性。
第三方面,本公开实施例还提供一种测试用例生成装置,包括:
获取模块,用于获取用户在访问目标服务时的服务请求信息,并基于所述服务请求信息,生成候选测试用例;
回放模块,用于对所述候选测试用例进行回放,并获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息;所述代码覆盖信息用于描述所述目标服务响应所述候选测试用例过程中的代码执行情况;
筛选模块,用于基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例;
其中,所述待测试服务和所述目标服务属于相同服务的不同版本。
一种可能的实施方式中,所述回放模块,在获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息时,用于:
获取所述目标服务对所述候选测试用例进行响应过程中,与所述目标服务对应的代码文件中各行代码是否被执行的执行信息;
基于所述代码文件中各行代码的执行信息,生成所述代码覆盖信息。
一种可能的实施方式中,所述筛选模块,在基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例时,用于:
遍历所述目标服务对应代码文件的各行代码,并针对当前遍历到的代码,基于所述候选测试用例对应的代码覆盖信息,从所述候选测试用例中,确定在所述候选测试用例回放过程中,执行了所述当前遍历到的代码的目标候选测试用例;
从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的目标测试用例。
一种可能的实施方式中,所述筛选模块,在从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的目标测试用例时,用于:
判断当前已确定的目标测试用例中是否存在任一所述目标候选测试用例;其中,所述当前已确定的目标测试用例是对遍历过的其他代码进行遍历时确定的目标测试用例;
若存在,遍历下一行代码,直至满足目标结束条件;
若不存在,从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的新的目标测试用例。
一种可能的实施方式中,所述筛选模块,在从所述目标候选测试用例中,确定新的目标测试用例时,用于:
基于各个所述目标候选测试用例分别对应的代码覆盖信息,确定各个所述目标候选测试用例分别对应的代码覆盖率;
基于各个所述目标候选测试用例分别对应的代码覆盖率,从所述目标候选测试用例中确定所述新的目标测试用例。
一种可能的实施方式中,目标结束条件包括下述至少一项:
确定的目标测试用例的数量达到目标数量;
所述目标服务对应代码文件中的各行代码被遍历完毕。
第四方面,本公开实施例还提供一种测试装置,包括:
执行模块,用于控制目标服务和待测试服务执行目标测试用例,得到所述目标服务执行所述目标测试用例的第一执行结果、以及所述待测试服务执行所述目标测试用例的第二执行结果;其中,所述目标测试用例基于本公开任一实施例所述的测试用例生成方法生成;
比对模块,用于对所述第一执行结果和所述第二执行结果进行比对处理,得到利用所述目标测试用例对所述待测试服务进行测试的测试结果。
一种可能的实施方式中,所述比对模块81,在对所述第一执行结果和所述第二执行结果进行比对处理,得到对所述待测试服务的测试结果时,用于:
对所述第一执行结果和所述第二执行结果进行字符串对比,得到字符串对比结果;
在所述字符串对比结果表征所述第一执行结果和所述第二执行结果分别对应的字符串一致的情况下,确定所述测试结果为:测试成功;
在所述字符串对比结果表征所述第一执行结果和所述第二执行结果分别对应的字符串不一致的情况下,确定所述第一执行结果和所述第二执行结果的第一差异性信息,并基于所述第一差异性信息,确定所述测试结果。
一种可能的实施方式中,所述比对模块81,在确定所述第一执行结果和所述第二执行结果的第一差异性信息时,用于:
将所述第一执行结果和所述第二执行结果分别转换为JSON对象;
按照目标递归顺序,对所述第一执行结果和所述第二执行结果分别对应的JSON对象进行递归比对,得到所述第一执行结果和所述第二执行结果;
其中,所述目标递归顺序,用于描述多种JSON数据类型构成的类型顺序,所述类型顺序用于对所述第一执行结果和所述第二执行结果分别对应的JSON对象进行遍历。
一种可能的实施方式中,所述比对模块81,在基于所述第一差异性信息,确定所述测试结果时,用于:
在所述第一差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中的键key不相同、或者数组长度不相等、或者值value的类型不相同的情况下,将所述测试结果确定为:测试失败;
在所述第一差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中和目标键key对应的值value不相同的情况下,控制所述目标服务再次执行所述目标测试用例,得到第三执行结果;
确定所述第三执行结果和所述第一执行结果之间的第二差异性信息;
在所述第二差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中目标键key对应的value不相同的情况下,为所述目标测试用例添加人工校验标记;所述人工校验标记用于提示对所述目标测试用例进行人工校验,以得到所述目标测试用例对应的测试结果;
在除所述第二差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中目标键key对应的value不相同外的其他情况下,确定所述测试结果为:测试失败。
第五方面,本公开可选实现方式还提供一种计算机设备,处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤;或执行上述第二方面,或第二方面中任一种可能的实施方式中的步骤。
第六方面,本公开可选实现方式还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤;或执行上述第二方面,或第二方面中任一种可能的实施方式中的步骤。
关于上述测试用例生成装置、测试装置、计算机设备、及计算机可读存储介质的效果描述参见上述测试用例生成方法和测试方法的说明,这里不再赘述。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开的技术方案。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开一些实施例所提供的测试用例生成方法的流程图;
图2示出了本公开一些实施例所提供的筛选目标测试用例的具体方法的流程图;
图3示出了本公开一些实施例所提供的确定目标测试用例的具体示例流程图;
图4示出了本公开一些实施例所提供的测试方法的流程图;
图5示出了本公开一些实施例所提供的对第一执行结果和所述第二执行结果分别对应的JSON对象进行递归比对的具体方法的流程图;
图6示出了本公开一些实施例所提供的测试系统的示意图;
图7示出了本公开一些实施例所提供的测试用例生成装置的示意图;
图8示出了本公开一些实施例所提供的测试装置的示意图;
图9示出了本公开一些实施例所提供的计算机设备的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
经研究发现,线上系统大重构后需要对一批重构优化后的数据接口服务进行准确性、有效性测试,这些数据服务接口的数以百计,要实现对这些数据服务接口的测试,需要前期针对每一个数据服务接口都准备大量的测试用例;并且随着业务需求的快速迭代导致系统服务的频繁改动,如何保证被修改后的系统原有业务的正确性就比较重要。常规的自动化测试通过记录多个用户在访问数据服务接口时所产生的操作数据来生成测试用例;在对数据服务接口进行测试时,通过生成的测试用例,回放用户操作,以达到对数据接口服务进行测试的目的。在测试过程中,为了保证测试过程能够尽量多的覆盖到数据服务接口的代码,就需要准备大量的测试用例;但测试用例的数量过多,在面对数量众多的待测试数据接口服务时,又会造成测试效率的下降。
此外,在对数据服务接口进行测试的过程中,通常是利用待测试的数据服务接口执行测试用例,并根据测试用例的执行结果和测试用例对应的预设结果进行比对。在两者一致的情况下,则表示利用该测试用例对数据服务接口的测试通过;若两者不一致,则表示利用该测试用例对数据服务接口的测试不通过,需要再进一步排查不通过的原因,这样就造成了在测试未通过的情况下,还需要花费大量的时间进行问题排查,造成测试效率的下降。同时,对于某些服务而言,即使是针对同一测试用例,在正常的情况下所产生的响应结果也会存在一定的差异,而这部分差异通常被视作测试不通过,进而造成测试结果出现误差,并造成额外的排查工作量,进一步导致测试效率的下降。
基于上述研究,本公开提供了一种测试用例的生成方法,通过将用户操作产生的数据转换为候选测试用例,并利用目标服务对候选测试用例进行响应过程中的代码覆盖信息,从候选测试用例中筛选对待测试服务进行测试的目标测试用例,从而使得得到的目标测试用例能够以少的数量,覆盖数据接口服务的更多代码,从而在测试效率、和测试的准确性之间取得平衡,减少测试用例的回放次数和回放所耗时间,提升测试效率,并降低了测试用例的维护成本。
同时,本公开实施例还提供一种测试方法,在目标服务和待测试服务对同一测试用例的响应结果不一致的情况下,能够以更小的粒度对响应结果中的变化字段进行识别,以得到更加精确的测试结果,减少问题排查所需要的工作量,提升测试效率,同时还利用多次回放机制精确识别变化字段的产生是否为服务的正常响应情况,从而提升测试的准确性。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种测试用例生成方法、和测试方法进行详细介绍,本公开实施例所提供的测试用例生成方法和测试方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字助理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该测试用例生成方法和测试方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面首先对本公开实施例提供的测试用例生成方法加以说明。
参见图1所示,为本公开实施例提供的测试用例生成方法的流程图,所述方法包括步骤S101~S103,其中:
S101:获取用户在访问目标服务时的服务请求信息,并基于所述服务请求信息,生成候选测试用例。
S102:对所述候选测试用例进行回放,并获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息;所述代码覆盖信息用于描述所述目标服务响应所述候选测试用例过程中的代码执行情况。
S103:基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例。其中,所述待测试服务和所述目标服务属于相同服务的不同版本。
下面对上述S101~S103分别加以详细说明。
针对上述S101:
在具体实施中,目标服务历史是某业务系统向用户提供的相关服务,如支付服务、数据查询服务、物品购买服务、阅读服务等,具体可以根据业务系统的具体需要确定,本公开实施例不做限定。目标服务在业务系统中对应有数据服务接口;用户对目标服务进行访问时的服务请求信息,例如是用户向目标服务对应的数据服务接口发送的服务请求中携带的各项信息,如在服务请求为超文本传输协议(Hyper Text Transfer Protocol,HTTP)请求的情况下,服务请求信息例如包括HTTP请求中携带的各个字段分别对应的字段内容。HTTP请求中携带的各个字段例如包括:统一资源标识符(Uniform Resource Identifier,URI)、请求方法(Request Method)、请求头(headers)、以及请求体(body)。数据服务接口在接收到服务请求后,会根据服务请求中携带的各个字段的字段内容,对服务请求进行响应,生成对应的响应结果。
为了获取用户在访问目标服务时的服务请求信息,例如可以通过代码嵌入的方式、或者java agent的方式,将用于进行服务请求信息录制的录制模块嵌入到数据服务接口中;当目标服务对应的数据服务接口接收到用户发送的服务请求后,录制模块自动获取用户发送的服务请求对应的服务请求信息。
此外,由于业务系统中,在很多情况下仅需要针对业务系统中的部分服务进行测试,因此,本公开实施例在利用录制模块获取服务请求信息之前,还可以配置要录制的数据服务接口的相关参数,例如包括:与要录制的数据服务接口对应的统一资源定位符(Uniform Resource Locator,URL)名单,这样,在数据服务接口接收到用户发起的服务请求后,录制模块会根据服务请求中携带的URL,判断服务请求是否为需要录制的服务请求。若判断结果为是,才会获取该服务请求的服务请求信息。若判断结果为否,则不会获取该服务请求的服务请求信息。
在获得服务请求信息后,根据服务请求信息,生成对应的候选测试时用例。
针对上述S102:
对候选测试用例进行回放,例如是基于候选测试用例中包括的服务请求信息中的各项字段,生成新的服务请求,并将生成的新的服务请求发送给目标服务对应的数据服务接口。通常而言,该新的服务请求中携带的服务请求信息和生成候选测试用例所使用的服务请求中的服务请求信息相同。
此处,进行回放时所采用的数据服务接口,例如是无用户流量的数据服务接口,也即该数据服务接口不会接收用户发送的服务请求,而仅仅接收回放的服务请求。该无流量的数据服务接口、和上述S101中的数据服务接口为代码、功能完全一致的服务接口。
具体地,本公开实施例提供一种获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息的具体方式,包括:
获取所述目标服务对所述候选测试用例进行响应过程中,与所述目标服务对应的代码文件中各行代码是否被执行的执行信息;
基于所述代码文件中各行代码的执行信息,生成所述代码覆盖信息.
此处,可以在数据服务接口的各个代码文件中,通过代码嵌入的方式、或者javaagent的方式嵌入用于检测各个代码文件中的每行代码是否被执行的监测模块。
无用户流量的数据服务接口在接收到基于候选测试用例生成的服务请求后,会对该服务请求进行响应。在响应过程中,会根据实际的业务需要,执行数据服务接口对应的至少部分代码。而在该过程中,监测模块会记录每行代码是否被执行的执行信息。
在得到无用户流量的数据服务接口对应的各代码文件中,每行代码的执行信息后,将这些执行信息整合,进而生成代码覆盖信息。
具体地,数据服务接口对应的代码文件有N个,N为大于0的整数。每个代码文件中包括多行代码;代码覆盖信息例如可以采用数组的形式表示,其中,针对某个候选测试用例,其代码覆盖信息可以表示为N个数组,其中,每个数组对应一个代码文件。每个数组中,包括了多个数组元素;每个数组元素和对应的代码文件中的一行代码对应,且数组元素的值,表征数据服务节点在对服务请求进行响应时,与数组元素对应行的代码是否被执行。若对应行的代码被执行,则该行代码对应的数组元素的值例如可以表示为:true或者表示为1;若对应行的代码未被执行,则该行代码对应的数组元素的值可以为:false或者表示为0。另外,在另一实施例中,在数据服务接口对某个候选测试用例对应的服务请求进行响应的时候,若只执行了部分代码文件中的代码,为了方便后续的遍历,也即,有部分代码文件中的代码是未被执行的,针对该候选测试用例,可以将代码未被执行的代码文件对应的数组设置为空,以方便后续遍历代码文件。
示例性的,假设数据服务接口对应的代码文件包括:“com.test.ClassA”、以及“com.test.ClassB”,其中,“com.test.ClassA”包括7行代码,其中第1、3、5行代码在响应某服务请求时被执行,而其他未被执行;“com.test.ClassB”包括9行代码,其中第4、7行代码在响应某服务请求时被执行,其他代码未被执行;则生成的与该服务请求对应的代码覆盖信息例如包括:
“com.test.ClassA”:[true,flase,true,false,true,false,false]
“com.test.ClassB”:[false,flase,false,true,false,false,true,false,false]
其中,true表示对应行的代码被执行;false表示对应行的代码未被执行。
通过上述方式,得到目标服务对所述候选测试用例进行响应的代码覆盖信息。
针对上述S103:
在具体实施中,为了尽量减少在测试过程中所使用的测试用例,以减少测试时间,提升测试效率,同时还要保证测试的准确性,这就要求在测试过程中保证更多的代码被执行到,以发现数据服务接口的代码是否存在问题,本公开实施例中,在得到多个候选测试用例、以及每个候选测试用例对应的代码覆盖信息后,根据该代码覆盖信息,从候选测试用例中,筛选对待测试服务进行测试的目标测试用例。
这里,待测试服务,例如和目标服务属于相同服务的不同版本,目标服务和待测试服务可以具有至少部分相同的服务功能。不同版本的服务,所对应的数据服务接口的代码有所区别。例如可以在原有的代码中增加了新的代码、减少了原有的代码、或者对原有的代码进行了更改。而对待测试服务的测试目的也即保证待测试服务和目标服务针对同一服务请求,会给出相同的响应结果。
参见图2所示,本公开实施例提供一种基于代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例的具体方式,包括:
S201:遍历所述目标服务对应代码文件的各行代码,并针对当前遍历到的代码,基于所述候选测试用例对应的代码覆盖信息,从所述候选测试用例中,确定在所述候选测试用例回放过程中,执行了所述当前遍历到的代码的目标候选测试用例;
S202:从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的目标测试用例。
在具体实施中,在遍历各行代码的过程中,例如可以首先根据当前遍历到的代码文件,从各个候选测试用例对应的代码覆盖信息所包括的N个数组中,确定和遍历到的代码文件对应的目标数组,然后根据当前遍历到的代码在代码文件中的位置,确定和当前遍历到的代码对应的目标数组元素在目标数组中的目标位置,并根据该目标数组元素在目标数组中的目标位置,从目标数组中,读取对应目标数组元素的值。针对某个候选测试用例M1,若确定的目标数组元素的值表示当前遍历到的代码被执行过,则该候选测试用例M1被确定为目标候选测试用例。
若确定的目标数组元素的值表示当前遍历到的代码未被执行过,则该候选测试用例M1被确定为非目标候选测试用例。
在确定了目标候选测试用例后,可以采用下述方式确定与当前遍历到的代码对应的目标测试用例:
S2021:判断当前已确定的目标测试用例中是否存在任一所述目标候选测试用例;其中,所述当前已确定的目标测试用例是对遍历过的其他代码进行遍历时确定的目标测试用例。
在具体实施中,假设代码文件有m个,分别为K1~Kn。其中,K1为遍历的第一个代码文件。假设K1包括了n行代码,分别为s1~sn。
在遍历第一个代码文件的第一行代码s1时,由于当前不存在遍历过的其他代码,因此,可以从该第一个代码文件K1中的第一行代码s1对应的目标候选测试用例中,选择一个作为目标测试用例H1。
继续遍历第一个代码文件K1的第二行代码s2;此时,由于已经存在一个目标测试用例H1,则此时要确定目标测试用例H1是否和第二行代码s2对应的某个目标候选测试用例是同一个测试用例。若存在,则继续遍历第一个代码文件K1的第三行代码s3。若不存在,则从第二行代码s2对应的目标候选测试用例中,选择一个作为目标测试用例H2。
继续遍历第一个代码文件K1的第三行代码s3;此时,假设通过遍历上第一行代码s1和第二行代码s2,已经确定了目标测试用例H1和H2,则此时要确定目标测试用例H2或者H2,是否和第三行代码s3对应的某个目标候选测试用例是同一个测试用例。若存在,则继续遍历第一个代码文件K1的第四行代码s4。若不存在,则从第三行代码s3对应的目标候选测试用例中,选择一个作为目标测试用例H3。
重复上述遍历过程,直至满足目标结束条件。
另一实施例中,在遍历各个代码文件中的各行代码的过程中,针对某些候选测试用例而言,数据服务接口在对这些候选测试用例对应的服务请求进行响应时,并未执行过某些代码文件中的代码,也即,在这些候选测试用例对应的代码覆盖信息中,与为执行的这些代码文件对应的数组为空。为了加快遍历的速度,减少在遍历代码文件过程中所需要访问的数据量,在遍历各个代码文件之前,可以根据各个候选测试用例对应的代码覆盖信息,为各个代码文件确定覆盖到各个代码文件的候选测试用例。
示例性的,假设代码文件包括:假设代码文件有3个,分别为K1~K3。候选测试用例包括M1~M3,根据M1~M3分别对应的代码覆盖信息,分别为K1~Kn确定各自对应的候选测试用例。
也即,针对候选测试用例M1,假设数据服务接口响应候选测试用例M1对应的服务请求时,仅执行了代码文件K1和代码文件K3中的代码,则将候选测试用例M1作为代码文件K1对应的候选测试用例,并且将候选测试用例M1作为代码文件K3对应的候选测试用例。
针对候选测试用例M2,假设数据服务接口响应候选测试用例M2对应的服务请求时,仅执行了代码文件K2中的代码,则将候选测试用例M2作为代码文件K2对应的候选测试用例。
针对候选测试用例M3,假设数据服务接口响应候选测试用例M3对应的服务请求时,仅执行了代码文件K1和K2中的代码,则将候选测试用例M3作为代码文件K1对应的候选测试用例,并将候选测试用例M3作为代码文件K2对应的候选测试用例。
则针对代码文件K1,对应的候选测试用例包括:M1、以及M3。
针对代码文件K2,对应的候选测试用例包括:M2、以及M3。
针对代码文件K3,对应的候选测试用例包括:M1。
这样,在遍历各个代码文件时,在遍历到代码文件K1时,则从候选测试用例M1和M3中筛选代码文件K1中的各行代码对应的目标候选测试用例。
在遍历到代码文件K2时,则从候选测试用例M2、以及M3中筛选代码文件K2中各行代码对应的目标候选测试用例。
在遍历到代码文件K3时,则从候选测试用例M1中筛选代码文件K3中各行代码对应的目标候选测试用例。
此外,在本公开另一实施例中,在某些情况下,所确定的候选测试用例并不能覆盖所有的代码文件、或者覆盖代码文件中的代码。因此,在遍历各个代码文件之前,还可以根据确定的候选测试用例分别对应的代码覆盖信息,确定候选测试用例覆盖到的目标代码文件、以及在目标代码文件中覆盖到的代码行。基于覆盖到的目标代码文件生成代码文件集,并基于各个目标代码文件中覆盖到的目标代码行,生成代码集。在遍历的时候,仅针对代码文件集中包括的各个目标代码文件进行遍历,并在遍历各个目标代码文件时,针对目标代码行进行遍历,从而进一步减少遍历过程中所需要遍历的代码文件的数量、或减少遍历到的代码行的数量,提升目标测试用例的筛选效率。
承接上述S2021:
S2022:若存在,遍历下一行代码,直至满足目标结束条件。
在本公开实施例中,目标结束条件,例如包括下述至少一项:
a1:确定的目标测试用例的数量达到目标数量。
此处,可以预先为目标测试用例设定一目标数量,在结束对当前遍历的代码的遍历后,可以确定目标测试用例的数量,并将目标测试用例的数量和该目标数量进行比对。若目标测试用例的数量等于该目标数量,则结束遍历过程。
这样,可以保证目标测试用例的数量不会过多,从而避免在利用目标测试用例对待测试服务进行测试时所消耗的时间过长,造成测试效率低的问题。
a2:所述目标服务对应代码文件中的各行代码被遍历完毕。
这样,可以保证目标测试用例能够覆盖目标服务的所有代码,从而保证对待测试服务进行测试时的准确度。
此外,还可以统计各个候选测试用例在回放过程中,无用户流量的数据服务接口对每个候选测试用例的响应时长。当当前确定的所有目标测试用例对应的响应总时长达到目标响应时长后,结束遍历。这样,可以在测试时长维度上,保证对待测试服务的测试所消耗的时长被控制在一定的时长内。
例如,还可以根据当前确定的所有目标测试用例分别对数据服务接口对应代码的代码覆盖信息,确定当前确定的所有目标测试用例对数据服务接口对应的代码的总覆盖率。当该总覆盖率达到目标覆盖率阈值的情况下,则认为满足目标结束条件,结束遍历。
此外,也可以设置其他的目标结束条件,本公开实施例不做限定。
承接上述S2021:
S2023:若不存在,从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的新的目标测试用例。
在具体实施中,在从目标候选测试用例中,确定当前遍历到的代码对应的新的目标测试用例时,例如可以随机将目标候选测试用例中的任一个作为新的目标测试用例。
此外,本公开另一实施例中,还可以采用下述方式,从目标候选测试用例中确定新的目标测试用例:
基于各个所述目标候选测试用例分别对应的代码覆盖信息,确定各个所述目标候选测试用例分别对应的代码覆盖率;
基于各个所述目标候选测试用例分别对应的代码覆盖率,从所述目标候选测试用例中确定所述新的目标测试用例。
在具体实施中,每个候选测试用例对应的代码覆盖信息包括了与数据服务接口对应的各个代码文件对应数组,例如可以根据各个数组中数组元素的取值,确定各个候选测试用例覆盖到的代码的总行数,并根据该总行数,确定各个目标候选测试用例分别对应的代码覆盖信息。示例性的,以数组元素的值为true、或者false为例,该总行数为数组中取值为true的数组元素的数量。
这样,能够保证确定的目标测试用例,能够以更少的数量,覆盖更多的代码。
参见图3所示,本公开实施例提供一种确定目标测试用例的具体示例,包括:
S301:同个数据服务接口下所有候选测试用例覆盖的目标代码文件、和覆盖的目标代码行取并集,得到遍历的代码文件集、以及各个代码文件的代码集。
S302:从代码文件集中遍历获取代目标码文件。
S303:从代码集中遍历获取目标代码文件的目标代码行。
S304:基于各个候选测试用例对应的代码覆盖信息,从候选测试用例中筛选当前遍历到的目标代码行对应的用例集,该用例集中,包括与当前遍历得到的目标代码行对应的至少一个目标候选测试用例。
S305:判断用例集中是否存在任一当前已经确定的目标候选测试用例。如果是,则跳转至S306。如果否,则跳转至S308。
S306:检测当前遍历到的代码文件中的代码行是否遍历完成,如果否,则跳转至S303。如果是,则跳转至S307。
S307:检测代码文件是否遍历完成。如果否,则跳转至S302。如果是,则跳转至S310。
S308:从用例集中,确定一个目标候选测试用例,作为新的目标测试用例,加入目标测试用例构成的正式用例集中。
S309:检测目标测试用例的数量是否达到目标数量。如果否,则跳转至S306。如果是,则跳转至S310。
S310:结束遍历,将确定的所有目标测试用例存储到数据库中。
通过上述过程,即可以实现根据候选测试用例的代码覆盖信息,从候选测试用例中筛选目标测试用例。
此外本公开实施例还提供另外一种基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例的具体方法,包括:
遍历各个候选测试用例,并针对当前遍历到的候选测试用例,基于当前遍历到的候选测试用例对应的代码覆盖信息,确定所述当前遍历到的候选测试用例覆盖的第一代码行;
判断第一代码行中,是否存在未覆盖代码行。其中,未覆盖代码行包括:所述目标服务对当前已确定的目标测试用例进行响应过程中,与所述目标服务对应的代码文件中未被执行的代码行;
若存在,则将所述当前遍历到的候选测试用例,确定为目标测试用例。
若不存在,则遍历下一候选测试用例。直至满足遍历停止条件。
在具体实施中,假设代码文件有n个,分别为:分别为K1~Kn。则针对每个候选测试用例对应的代码覆盖信息中包括了包括H个数组,其中,根据在目标服务响应每个候选测试用例时所执行的代码的不同,H为1~n中的一个整数。假设候选测试用例有h个,分别为M1~Mh。
首先遍历候选测试用例M1,获取候选测试用例M1对应的代码覆盖信息。根据候选测试用例M1对应的代码覆盖信息所包括的各个数组中,每个数组元素的取值,从各个数组中,确定取值为true的数组元素,这些数组元素对应的代码行,为候选测试用例M1对应的第一代码行。此时,由于候选测试用例M1第一个被遍历到,因此,当前所有代码文件的代码行都是未覆盖代码行。因此,候选测试用例M1对应的第一代码行中存在未覆盖代码行。将候选测试用例M1确定为目标候选测试用例。此外,还会将所有的第一代码行均确定为被覆盖代码行,除了第一代码行外的其他代码行均确定为未覆盖代码行,其构成集合P1。
接着遍历候选测试用例M2,获取候选测试用例M2对应的代码覆盖信息。根据候选测试用例M2对应的代码覆盖信息所包括的各个数组中,每个数组元素的取值,从各个数组中,确定取值为true的数组元素,这些数组元素对应的代码行,为候选测试用例M2对应的第一代码行。此时,可以确定候选测试用例M2对应的第一代码行构成的集合D1、和集合P1之间是否存在交集。如果存在交集,则表示候选测试用例M1对应的第一代码行中,存在未覆盖代码行,则此时,将候选测试用例M2作为新的目标测试用例。同时,还会将D1-(D1∩P1)中的代码行,确定为新的覆盖代码行。将该D1-(D1∩P1)中的代码行从集合P1中去除,得到集合P2,表示在遍历完候选测试用例M2后,所确定的未覆盖代码行所构成的集合。若集合D1和集合P1不存在交集,则表示集合D1中的所有第一代码行均已经被其他的目标测试用例覆盖,则接着遍历下一个候选测试用例。
接着遍历候选测试用例M3,获取候选测试用例M3对应的代码覆盖信息。根据候选测试用例M3对应的代码覆盖信息所包括的各个数组中,每个数组元素的取值,从各个数组中,确定取值为true的数组元素,这些数组元素对应的代码行,为候选测试用例M3对应的第一代码行。此时,可以确定候选测试用例M3对应的第一代码行构成的集合D2、和集合P2之间是否存在交集。如果存在交集,则表示候选测试用例M2对应的第一代码行中,存在未覆盖代码行,则此时,将候选测试用例M2作为新的目标测试用例。同时,还会将D2-(D2∩P2)中的代码行,确定为新的覆盖代码行。将该D2-(D2∩P2)中的代码行从集合P2中去除,得到集合P3,表示在遍历完候选测试用例M3后,所确定的未覆盖代码行所构成的集合。若集合D2和集合P2不存在交集,则表示集合D2中的所有第一代码行均已经被其他的目标测试用例覆盖,则接着遍历下一个候选测试用例。
继续向下遍历,直至满足遍历停止条件。该遍历停止条件例如包括下述至少一种:
所有的候选测试用例均被遍历。
在遍历某个候选测试用例后,已经不存在未覆盖代码行。
在遍历某个候选测试用例后,未覆盖代码行的数量占据所有代码行总数的比例小于目标比例阈值。
这样,也可以从候选测试用例中,将目标测试用例中筛选出来。
本公开实施例提供的测试用例生成方法,通过获取用户在访问目标服务时的服务请求信息,并基于所述服务请求信息,生成候选测试用例,并对所述候选测试用例进行回放,并获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息;所述代码覆盖信息用于描述所述目标服务响应所述候选测试用例过程中的代码执行情况;然后基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例,从而使得得到的目标测试用例能够以少的数量,覆盖数据接口服务的更多代码,从而在测试效率、和测试的准确地之间取得平衡,减少测试用例的回放次数和回放所耗时间,提升测试效率,并降低了测试用例的维护成本。
下面对本公开实施例提供的测试方法加以详细说明。
参见图4所示,为本公开实施例提供的测试方法的流程图,所述方法包括步骤S401~S403,其中:
S401:控制目标服务和待测试服务执行目标测试用例,得到所述目标服务执行所述目标测试用例的第一执行结果、以及所述待测试服务执行所述目标测试用例的第二执行结果;其中,所述目标测试用例基于本公开任一实施例提供的测试用例生成方法生成;
S402:对所述第一执行结果和所述第二执行结果进行比对处理,得到利用所述目标测试用例对所述待测试服务进行测试的测试结果。
下面对上述S401~S402分别加以详细说明。
针对上述S401:
在具体实施中,目标服务和待测试服务为相同服务的不同版本。
在利用目标服务和待测试服务执行目标测试用例的时候,例如是基于目标测试用例中的服务请求信息,组装成与目标服务对应的第一服务请求,并将第一服务请求发送给目标服务对应的数据服务接口;同时,还会基于目标测试用例中的服务请求信息,组装成与待测试服务对应的第二服务请求,得到第一执行结果,并将第二服务请求发送给待测试服务对应的数据服务接口,得到第二执行结果。
针对服务请求为HTTP请求的情况下,在对待测试服务进行测试阶段,目标服务和待测试服务分别对应有不同的HTTP地址,也即可以对应不同的URI。
在基于服务请求信息组装第一服务请求的时候,由于目标测试用例是用户访问目标服务时录制得到的,因此目标测试用例中的URI字段,通常为目标服务的URI字段。因此,可以直接基于服务请求信息中的各字段,按照HTTP请求的结构,构成第一服务请求。
在基于服务请求信息组装第二服务请求的时候,由于待测试服务的URI和目标服务的URI不同,因此通常情况下,会将目标测试用例中所包括的URI,替换为待测试服务配置的URI字段,并基于替换后的URI字段、以及目标测试用例中包括的HTTP请求的其他字段,按照HTTP请求的结构,构成第二服务请求。
此外,若在目标测试用例录制过程中所使用的目标服务的HTTP地址和测试过程中所使用的目标服务的HTTP地址不同,需要进行URI字段的替换后,得到第一服务请求,具体的替换方式本公开实施例不做限定。
针对上述S402:
在得到第一执行结果和第二执行结果后,例如可以采用下述方式对所述第一执行结果和所述第二执行结果进行比对处理,得到利用所述目标测试用例对所述待测试服务进行测试的测试结果:
对所述第一执行结果和所述第二执行结果进行字符串对比,得到字符串对比结果;
在所述字符串对比结果表征所述第一执行结果和所述第二执行结果分别对应的字符串一致的情况下,确定所述测试结果为:测试成功;
在所述字符串对比结果表征所述第一执行结果和所述第二执行结果分别对应的字符串不一致的情况下,确定所述第一执行结果和所述第二执行结果的第一差异性信息,并基于所述第一差异性信息,确定所述测试结果。
在具体实施中,在对所述第一执行结果和所述第二执行结果进行字符串对比,得到字符串对比结果时,例如可以首先利用JSON工具将第一执行结果和第二执行结果分别转换为JOSN对象。每一个JSON对象由键(key)/值(value)对构成,其中,key通常是字符串;和key对应的value通常是有效的JSON数据类型,例如:字符串、数字、对象、数组、布尔、或者null。
第一执行结果对应的,可以转换为第一字符串;第二执行结果对应的JSON对象可以装换为第二字符串。
在得到第一字符串和第二字符串后,将第一字符串和第二字符串进行对比。在第一字符串和第二字符串一致的情况下,目标服务和待测试服务对相同的服务请求的响应结果相同,也表示该服务请求对应测试用例能够覆盖到的代码并未出现问题。
示例性的,假设针对某一目标测试用例,该目标测试用例对应的第一执行结果对应的JSON对象为:
{"user_id":123,"user_name":"zhong"}
则转换而成的第一字符串例如包括:userid123usernamezhong。
第二执行结果对应的JSON对象为:
{"user_id":123,"user_name":"zhong"}
则转换成的第二字符串例如包括:userid123usernamezhong。
然后将第一字符串“userid123usernamezhong”和第二字符串“userid123usernamezhong”进行对比,由于两者一致,该目标测试用例对应的测试结果为:测试成功。
假设目标测试用例对应的第一执行结果对应的JSON对象为:
{"user_id":123,"user_name":"zhong"}
则转换而成的第一字符串例如包括:userid123usernamezhong。
第二执行结果对应的JSON对象为:
{"user_id":456,"user_name":"zhong"}
则转换成的第二字符串例如包括:userid456usernamezhong。
然后将第一字符串“userid123usernamezhong”和第二字符串“userid456usernamezhong”进行对比,由于两者不一致,则需要进一步的确定第一执行结果和第二执行结果的第一差异性信息,并基于第一差异性信息,确定测试结果。
在第一字符串和第二字符串不一致的情况下,可能存在两种情况,其一:待测试服务存在问题;其二,在某些情况下,例如在返回的响应结果中包括了当前时间、或者请求的请求标识(request Id)的情况下,针对不同的服务请求,即便服务请求中携带的各种信息都是相同的,由于响应时间不同,或者每次服务请求对应的request Id均不同,这样,在携带了上述字段的响应结果中存在不同的字段,这些不同的字段会造成第一字符串和第二字符串中存在不同的字符,但实际上,测试服务并未存在为题。若简单的将第一执行结果和第二执行结果进行字符串对比,则会造成某些测试结果应当为未存在问题的目标测试用例被确定为存在问题,造成测试的结果不准确。
因此,针对上述这种情况,本公开实施例中,本公开实施例还会进一步确定所述第一执行结果和所述第二执行结果的第一差异性信息,并基于所述第一差异性信息,确定所述测试结果。
具体地,可以采用下述方式确定所述第一执行结果和所述第二执行结果的第一差异性信息:
将所述第一执行结果和所述第二执行结果分别转换为JSON对象;
按照目标递归顺序,对所述第一执行结果和所述第二执行结果分别对应的JSON对象进行递归比对,得到所述第一执行结果和所述第二执行结果的第一差异性信息;
其中,所述目标递归顺序,用于描述多种JSON数据类型构成的类型顺序,所述类型顺序用于对所述第一执行结果和所述第二执行结果分别对应的JSON对象中的各个元素进行遍历。
在具体实施中,由于JSON对象本身是嵌套的数据格式,JSON对象本的数据类型为:对象(Json Object);同时JSON对象内包括了多个元素,也即JSON对象中的key/value对,每个key的数据类型为字符串,每个value对应的JSON数据类型,例如:字符串(string)、数字(number)、对象(Object)、数组(Array)、布尔(boolean)、或者空(null)等。
针对上述JSON数据类型,例如可以设置一目标递归顺序,其包括:Object→Array→其他,其中其他包括:string、number、boolean、null。
然后按照上述目标递归顺序,对第一执行结果和所述第二执行结果分别对应的JSON对象进行递归比对,得到第一差异性信息。
具体地,参见图5所示,本公开实施例提供一种按照目标递归顺序,对第一执行结果和所述第二执行结果分别对应的JSON对象进行递归比对,得到第一差异性信息的具体方式,包括:
S501:将第一执行结果转换成的第一JSON对象、和第二执行结果转换成的第二JSON对象中的键值key分别进行匹配。若第一JSON对象和第二JSON对象中存在匹配失败的key,则跳转至S510;若第一JSON对象和第二JSON对象的所有key均匹配成功,则跳转至S502;
S502:遍历第一JSON对象和第二JSON对象中的key,并执行下述遍历过程:
S503:确定当前遍历的第一JSON元素、和当前遍历的第二JSON元素。
此处,当前遍历的第一JSON元素、和当前遍历的第二JSON元素分别为第一JSON对象和第二JSON对象中和遍历到的key分别对应的value。
S504:判断当前遍历的第一JSON元素、和当前遍历的第二JSON元素对应的数据类型是否相同;若不相同,则跳转至S511;在相同的情况下,当前遍历的第一JSON元素、和当前遍历的第二JSON元素的数据类型为对象,则跳转至S505;若数据类型为数组,则跳转至S507;若数据类型为字符串、数字、布尔、或者空中的任一种,则跳转至S509。
S505:判断当前遍历到的第一JSON元素、和当前遍历到的第二JSON元素是否所有的key都相同。若否,则跳转至S510;若是,则跳转至S506;
S506:遍历第一JSON元素和第二JSON元素中的key,并将遍历到的key在第一JSON元素中对应的value作为新的第一JSON元素,并将遍历到的key在第二JSON元素中对应的value作为新的第二JSON元素,跳转至S504。也即,取每个key在第一JSON元素、和第二JSON元素中的value进行对比。
S507:判断第一JSON元素和第二JSON元素分别对应的数组长度是否一致;若否,则跳转至S513;若是,则跳转至S514。
S508:遍历第一JSON元素和第二JSON元素中的每一个数组元素,并将遍历到的数组元素在第一JSON元素中的取值作为新的第一JSON元素,并将遍历到的数组元素在第二JSON元素中的取值作为新的第二JSON元素,跳转至S503。
S509:判断第一JSON元素和第二JSON元素的构成字符是否相同。若否,则跳转至S513,若是,则跳转至S514。
S510:确定所述第一差异性信息包括:key不相同。
S511:确定所述第一差异性信息包括:数据类型不相同。
S512:确定所述第一差异性信息包括:数组长度不相同。
S513:确定所述第一差异性信息包括:value不相同,并存储所述第一JSON元素和第二JSON元素对应的value路径;其中,所述value路径用于定位不相同的value,在执行结果转换成的JSON对象中的位置。
S514:当前遍历的第一JSON元素、和当前遍历的第二JSON元素比对成功。这里,由于字符串对比结果表征所述第一执行结果和所述第二执行结果分别对应的字符串不一致的情况下,才会确定第一差异性信息,因此,上述遍历过程必然能够定位到具体的差异位置,当出现该种情况下,继续向下遍历下一JSON元素。
同时,在上述遍历过程中,若遍历步骤跳转到S510~S514中任一步骤,即可以结束遍历过程,也即只要确定上述S510~S514中任一步骤对应的第一差异性信息即可。也可以将第一执行结果和所述第二执行结果分别转换为JSON对象中的元素均遍历完之后,得到综合性的第一差异性信息。
这样,基于遍历到的JOSN元素的数据类型,在JOSN元素的数据类型为对象或者数组的时候,继续向下遍历,以实现利用递归的遍历方式,确定了第一差异性信息,
下面以简单的嵌套JSON对象为例,对上述递归比对过程进行说明:假设第一JSON对象为:
myObj 1= {
"name":"runoob",
"alexa":1,
"sites": {
"site1":"www.runoob.com",
"site2":"m.runoob.com",
"site3":"c.runoob.com"
},
"user_id ":123
}
第二JSON对象为:
myObj 2= {
"name":"runoob",
"alexa":1,
"sites": {
"site1":"www.runoob.com",
"site2":"m.runoob.com",
"site3":"c.runoob.com"
},
"user_id":456
}
在上述第一JSON对象和第二JSON对象中,则key分别为:name、alexa、sites、以及user_id。
其中,在第一JSON对象中,“name”对应的value为“runoob”,类型为字符串;“alexa”对应的value为“1”,类型为数字;“sites”对应的value为:
{"site1":"www.runoob.com","site2":"m.runoob.com","site3":"c.runoob.com"},类型为对象。“user_id”对应的value为:“123”,类型对象为数字。
其中,在第二JSON对象中,“name”对应的value为“runoob”,类型为字符串;“alexa”对应的value为“1”,类型为数字;“sites”对应的value为:
{"site1":"www.runoob.com","site2":"m.runoob.com","site3":"c.runoob.com"},类型为对象。“user_id”对应的value为:“456”,类型对象为数字。
由于两者的kay相同,因此进入到对key的遍历过程。
首先遍历“name”。
取“name”在第一JSON对象中的value,以及在第二JSON对象中的value。两个value的类型相同,均为字符串,因此将两个value进行构成字符的比对,由于两者完全相同,因此继续遍历下一key:“alexa”。
在遍历“alexa”时:
取“alexa”在第一JSON对象中的value,以及在第二JSON对象中的value。两个value的类型相同,均为数字,因此将两个value进行构成字符的比对,由于两者完全相同,均为“1”,因此继续遍历下一key:“sites”。
在遍历“sites”时:
取“sites”在第一JSON对象中的value,以及在第二JSON对象中的value。两个value的类型相同,均为对象,因此首先比对两个value中的key“site1”、“site2”以及“site3”;由于两者完全相同,因此,继续向下遍历,也即遍历“site1”、“site2”以及“site3”。在遍历“site1”时,取“site1”在第一JSON对象中的value,以及在第二JSON对象中的value。所取的两个value的类型相同,均为字符串,因此将“site1”对应的两个value进行构成字符的比对;由于“site1”对应的两个value完全相同,均为“www.runoob.com”,因此继续遍历“site2”;在遍历“site2”时,取“site2”在第一JSON对象中的value,以及在第二JSON对象中的value。所取的两个value的类型相同,均为字符串,因此将“site2”对应的两个value进行构成字符的比对;由于“site2”对应的两个value完全相同,均为“m.runoob.com”,因此继续遍历“site3”;遍历“site3”时,取“site3”在第一JSON对象中的value,以及在第二JSON对象中的value。所取的两个value的类型相同,均为字符串,因此将“site3”对应的两个value进行构成字符的比对;由于“site3”对应的两个value完全相同,均为“c.runoob.com”,此时将“sites”遍历完成。继续遍历“user_id”。
在遍历“user_id”时,取“user_id”在第一JSON对象中的value,以及在第二JSON对象中的value。两个value的类型相同,均为数字,因此将“user_id”的两个value进行构成字符的比对;由于“user_id”在第一JSON对象中的value为:“123”,在第二JSON对象中的value为“456”,两者不相同,此时,确定第一差异性信息:value不相同,并记录不相同的value对应的value路径:“user_id→value”。
这样,通过上述过程,既可以得到第一执行结果和第二执行结果对应的第一差异性信息。
此外,在JSON对象的嵌套更加复杂的情况下,递归比对的过程类似,在此不再赘述。
在确定了所述第一执行结果和所述第二执行结果的第一差异性信息后,例如可以采用下述方式,基于所述第一差异性信息,确定所述测试结果:
在所述第一差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中的键key不相同、或者数组长度不相等、或者value的类型不相同的情况下,将所述测试结果确定为:测试失败;
在所述第一差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中和目标键key对应的值value不相同的情况下,控制所述目标服务再次执行所述目标测试用例,得到第三执行结果;
确定所述第三执行结果和所述第一执行结果之间的第二差异性信息;
在所述第二差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中目标键key对应的value不相同的情况下,为所述目标测试用例添加人工校验标记;所述人工校验标记用于提示对所述目标测试用例进行人工校验,以得到所述目标测试用例对应的测试结果;
在除所述第二差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中目标键key对应的value不相同外的其他情况下,确定所述测试结果为:测试失败。
在具体实施中,在上述图5对应的递归比对过程中,若确定的第一差异性信息如上述S510、S511、S512中所述的情况中的任一种后,则可以确定测试结果确定为:测试失败。
若确定的第一差异性信息如上述S513中所述的任一种,则需要再利用目标服务执行一次目标测试用例,得到第三执行结果。然后确定第一执行结果和第二执行结果对应的第二差异性信息。
然后确定第一差异性信息和第二差异性信息,是否指示了同一个Key的value不相同,若第一差异性信息和第二差异性信息指示了同一个Key的value不相同,则可能存在即使对相同服务请求进行正常的响应,所得到的响应结果也会存在不同字段的可能,在该种情况下,可以为目标测试用例添加人工校验标记,以提示测试人员对目标测试用例的执行结果进行人工校验,以得到准确的测试结果。若第一差异性信息和第二差异性信息指并未指示出同一个Key的value不相同,也即,除了上述第一差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中和目标键key对应的值value不相同的情况外的其他情况,则表示待测试服务对目标测试用例的执行结果是存在问题的,因此将测试结果定为测试失败。
上述实施例中,在将目标服务和待测试服务对同一目标测试用例的执行结果对应的字符串不相同的情况下,通过对执行结果转换成的JSON对象的递归对比,准确确定第一执行结果和第二执行结果之间的第一差异性信息,并根据第一差异性信息的不同,确定是否通过目标服务再次执行目标测试用例的方式,验证该第一差异性信息的产生是否为正常状况,避以得到更加准确的测试结果。
参见图6所示,本公开实施例还提供一种测试系统的具体示例,用于执行上述任一实施例所述的测试用例生成方法、以及测试方法,包括:
用例管理模块61、录制模块62、用例分析模块63、代码覆盖模块64、用例回放模块65、以及用例结果分析模块66。
其中,用例管理模块61,用于:用于测试人员管理用例和配置录制请求的相关参数。功能如下:1、配置录制接口参数:url名单,录制开关,目标测试用例最大数量;2、配置回放参数:回放的目标服务的http地址和待测试服务的http地址;3、执行回放计划;4、查看回放结果。
在上述相关参数配置完成后,将上述相关参数存储至数据库中。
录制模块62,用于从数据库中读取录制请求的相关参数,提供数据服务接口的录制能力,并把录制的http请求,也即候选测试用例发送到队列服务。队列服务将候选测试用例推送给用例分析模块63。
用例分析模块63在接收到队列服务推送的候选测试用例后,将候选测试用例存储到数据库中。在定时任务被触发后,用例分析模块63从数据库中读取候选测试用例,生成回放的服务请求,并将回放的服务请求发送给无用户流量的目标服务的数据服务接口。
代码覆盖模块64,用于记录候选测试用例回放过程中,目标服务对候选测试用例进行响应的代码覆盖信息,并将代码覆盖信息回传给用例分析模块63。
用例分析模块63接收到代码覆盖模块64回传的代码覆盖信息后,基于代码覆盖信息,从候选测试用例中筛选对待测试服务进行测试的目标测试用例,并将筛选得到的目标测试用例存储到数据库中。
用例管理模块61,在接收到用户发送的测试指令后,从数据库中读取目标测试用例,并将目标测试用例传输给用例回放模块65。
用例回放模块65,根据用例管理模块61发送的目标测试用例后,控制目标服务和待测试服务执行目标测试用例,得到目标服务执行目标测试用例的第一执行结果、以及待测试服务执行目标测试用例的第二执行结果。然后将第一执行结果和第二执行结果发送给用例结果分析模块66。
用例结果分析模块66,对第一执行结果和第二执行结果进行比对处理,得到利用目标测试用例对待测试服务进行测试的测试结果。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与测试用例生成方法对应的测试用例生成装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述测试用例生成方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图7所示,为本公开实施例提供的一种测试用例生成装置的示意图,所述装置包括:
获取模块71,用于获取用户在访问目标服务时的服务请求信息,并基于所述服务请求信息,生成候选测试用例;
回放模块72,用于对所述候选测试用例进行回放,并获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息;所述代码覆盖信息用于描述所述目标服务响应所述候选测试用例过程中的代码执行情况;
筛选模块73,用于基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例;
其中,所述待测试服务和所述目标服务属于相同服务的不同版本。
一种可能的实施方式中,所述回放模块72,在获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息时,用于:
获取所述目标服务对所述候选测试用例进行响应过程中,与所述目标服务对应的代码文件中各行代码是否被执行的执行信息;
基于所述代码文件中各行代码的执行信息,生成所述代码覆盖信息。
一种可能的实施方式中,所述筛选模块73,在基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例时,用于:
遍历所述目标服务对应代码文件的各行代码,并针对当前遍历到的代码,基于所述候选测试用例对应的代码覆盖信息,从所述候选测试用例中,确定在所述候选测试用例回放过程中,执行了所述当前遍历到的代码的目标候选测试用例;
从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的目标测试用例。
一种可能的实施方式中,所述筛选模块73,在从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的目标测试用例时,用于:
判断当前已确定的目标测试用例中是否存在任一所述目标候选测试用例;其中,所述当前已确定的目标测试用例是对遍历过的其他代码进行遍历时确定的目标测试用例;
若存在,遍历下一行代码,直至满足目标结束条件;
若不存在,从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的新的目标测试用例。
一种可能的实施方式中,所述筛选模块73,在从所述目标候选测试用例中,确定新的目标测试用例时,用于:
基于各个所述目标候选测试用例分别对应的代码覆盖信息,确定各个所述目标候选测试用例分别对应的代码覆盖率;
基于各个所述目标候选测试用例分别对应的代码覆盖率,从所述目标候选测试用例中确定所述新的目标测试用例。
一种可能的实施方式中,目标结束条件包括下述至少一项:
确定的目标测试用例的数量达到目标数量;
所述目标服务对应代码文件中的各行代码被遍历完毕。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
基于同一发明构思,本公开实施例中还提供了与测试方法对应的测试装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述测试方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参见图8所示,本公开实施例提供的测试装置包括:
执行模块81,用于控制目标服务和待测试服务执行目标测试用例,得到所述目标服务执行所述目标测试用例的第一执行结果、以及所述待测试服务执行所述目标测试用例的第二执行结果;其中,所述目标测试用例基于本公开任一实施例所述的测试用例生成方法生成;
比对模块82,用于对所述第一执行结果和所述第二执行结果进行比对处理,得到利用所述目标测试用例对所述待测试服务进行测试的测试结果。
一种可能的实施方式中,所述比对模块81,在对所述第一执行结果和所述第二执行结果进行比对处理,得到对所述待测试服务的测试结果时,用于:
对所述第一执行结果和所述第二执行结果进行字符串对比,得到字符串对比结果;
在所述字符串对比结果表征所述第一执行结果和所述第二执行结果分别对应的字符串一致的情况下,确定所述测试结果为:测试成功;
在所述字符串对比结果表征所述第一执行结果和所述第二执行结果分别对应的字符串不一致的情况下,确定所述第一执行结果和所述第二执行结果的第一差异性信息,并基于所述第一差异性信息,确定所述测试结果。
一种可能的实施方式中,所述比对模块81,在确定所述第一执行结果和所述第二执行结果的第一差异性信息时,用于:
将所述第一执行结果和所述第二执行结果分别转换为JSON对象;
按照目标递归顺序,对所述第一执行结果和所述第二执行结果分别对应的JSON对象进行递归比对,得到所述第一执行结果和所述第二执行结果的第一差异性信息;
其中,所述目标递归顺序,用于描述多种JSON数据类型构成的类型顺序,所述类型顺序用于对所述第一执行结果和所述第二执行结果分别对应的JSON对象进行遍历。
一种可能的实施方式中,所述比对模块81,在基于所述第一差异性信息,确定所述测试结果时,用于:
在所述第一差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中的键key不相同、或者数组长度不相等、或者值value的类型不相同的情况下,将所述测试结果确定为:测试失败;
在所述第一差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中和目标键key对应的值value不相同的情况下,控制所述目标服务再次执行所述目标测试用例,得到第三执行结果;
确定所述第三执行结果和所述第一执行结果之间的第二差异性信息;
在所述第二差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中目标键key对应的value不相同的情况下,为所述目标测试用例添加人工校验标记;所述人工校验标记用于提示对所述目标测试用例进行人工校验,以得到所述目标测试用例对应的测试结果;
在除所述第二差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中目标键key对应的value不相同外的其他情况下,确定所述测试结果为:测试失败。
本公开实施例还提供了一种计算机设备,如图9所示,为本公开实施例提供的计算机设备结构示意图,包括:
处理器91和存储器92;所述存储器92存储有处理器91可执行的机器可读指令,处理器91用于执行存储器92中存储的机器可读指令,所述机器可读指令被处理器91执行时,处理器91执行下述步骤:
获取用户在访问目标服务时的服务请求信息,并基于所述服务请求信息,生成候选测试用例;
对所述候选测试用例进行回放,并获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息;所述代码覆盖信息用于描述所述目标服务响应所述候选测试用例过程中的代码执行情况;
基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例;
其中,所述待测试服务和所述目标服务属于相同服务的不同版本。
或执行下述步骤:
控制目标服务和待测试服务执行目标测试用例,得到所述目标服务执行所述目标测试用例的第一执行结果、以及所述待测试服务执行所述目标测试用例的第二执行结果;其中,所述目标测试用例基于本公开实施例任一项所述的测试用例生成方法生成;
对所述第一执行结果和所述第二执行结果进行比对处理,得到利用所述目标测试用例对所述待测试服务进行测试的测试结果。
上述存储器92包括内存921和外部存储器922;这里的内存921也称内存储器,用于暂时存放处理器91中的运算数据,以及与硬盘等外部存储器922交换的数据,处理器91通过内存921与外部存储器922进行数据交换。
上述指令的具体执行过程可以参考本公开实施例中所述的测试用例生成方法、或测试方法的步骤,此处不再赘述。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述测试用例生成方法、或测试方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的测试用例生成方法、或测试方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信服务,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。

Claims (13)

1.一种测试用例生成方法,其特征在于,包括:
获取用户在访问目标服务时的服务请求信息,并基于所述服务请求信息,生成候选测试用例;
对所述候选测试用例进行回放,并获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息;所述代码覆盖信息用于描述所述目标服务响应所述候选测试用例过程中的代码执行情况;
基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例;
其中,所述待测试服务和所述目标服务属于相同服务的不同版本;
所述基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例,包括:
根据确定的候选测试用例分别对应的代码覆盖信息,确定候选测试用例覆盖到的目标代码文件、以及在目标代码文件中覆盖到的代码行,基于覆盖到的目标代码文件生成代码文件集,并基于各个目标代码文件中覆盖到的目标代码行,生成代码集;
针对所述代码集中的目标代码行,执行下述过程:
遍历所述代码集中的各行代码,并针对当前遍历到的代码,基于所述候选测试用例对应的代码覆盖信息,从所述候选测试用例中,确定在所述候选测试用例回放过程中,执行了所述当前遍历到的代码的目标候选测试用例;
从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的目标测试用例。
2.根据权利要求1所述的方法,其特征在于,所述获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息,包括:
获取所述目标服务对所述候选测试用例进行响应过程中,与所述目标服务对应的代码文件中各行代码是否被执行的执行信息;
基于所述代码文件中各行代码的执行信息,生成所述代码覆盖信息。
3.根据权利要求1所述的方法,其特征在于,所述从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的目标测试用例,包括:
判断当前已确定的目标测试用例中是否存在任一所述目标候选测试用例;其中,所述当前已确定的目标测试用例是对遍历过的其他代码进行遍历时确定的目标测试用例;
若存在,遍历下一行代码,直至满足目标结束条件;
若不存在,从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的新的目标测试用例。
4.根据权利要求3所述的方法,其特征在于,所述从所述目标候选测试用例中,确定新的目标测试用例,包括:
基于各个所述目标候选测试用例分别对应的代码覆盖信息,确定各个所述目标候选测试用例分别对应的代码覆盖率;
基于各个所述目标候选测试用例分别对应的代码覆盖率,从所述目标候选测试用例中确定所述新的目标测试用例。
5.根据权利要求3所述的方法,其特征在于,所述目标结束条件包括下述至少一项:
确定的目标测试用例的数量达到目标数量;
所述目标服务对应代码文件中的各行代码被遍历完毕。
6.一种测试方法,其特征在于,包括:
控制目标服务和待测试服务执行目标测试用例,得到所述目标服务执行所述目标测试用例的第一执行结果、以及所述待测试服务执行所述目标测试用例的第二执行结果;其中,所述目标测试用例基于权利要求1-5任一项所述的测试用例生成方法生成;
对所述第一执行结果和所述第二执行结果进行比对处理,得到利用所述目标测试用例对所述待测试服务进行测试的测试结果。
7.根据权利要求6所述的方法,其特征在于,所述对所述第一执行结果和所述第二执行结果进行比对处理,得到对所述待测试服务的测试结果,包括:
对所述第一执行结果和所述第二执行结果进行字符串对比,得到字符串对比结果;
在所述字符串对比结果表征所述第一执行结果和所述第二执行结果分别对应的字符串一致的情况下,确定所述测试结果为:测试成功;
在所述字符串对比结果表征所述第一执行结果和所述第二执行结果分别对应的字符串不一致的情况下,确定所述第一执行结果和所述第二执行结果的第一差异性信息,并基于所述第一差异性信息,确定所述测试结果。
8.根据权利要求7所述的方法,其特征在于,所述确定所述第一执行结果和所述第二执行结果的第一差异性信息,包括:
将所述第一执行结果和所述第二执行结果分别转换为JSON对象;
按照目标递归顺序,对所述第一执行结果和所述第二执行结果分别对应的JSON对象进行递归比对,得到所述第一执行结果和所述第二执行结果的第一差异性信息;
其中,所述目标递归顺序,用于描述多种JSON数据类型构成的类型顺序,所述类型顺序用于对所述第一执行结果和所述第二执行结果分别对应的JSON对象进行遍历。
9.根据权利要求8所述的方法,其特征在于,所述基于所述第一差异性信息,确定所述测试结果,包括:
在所述第一差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中的键key不相同、或者数组长度不相等、或者value的类型不相同的情况下,将所述测试结果确定为:测试失败;
在所述第一差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中和目标键key对应的值value不相同的情况下,控制所述目标服务再次执行所述目标测试用例,得到第三执行结果;
确定所述第三执行结果和所述第一执行结果之间的第二差异性信息;
在所述第二差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中目标键key对应的value不相同的情况下,为所述目标测试用例添加人工校验标记;所述人工校验标记用于提示对所述目标测试用例进行人工校验,以得到所述目标测试用例对应的测试结果;
在除所述第二差异性信息指示所述第一执行结果和所述第二执行结果分别对应的JSON对象中目标键key对应的value不相同外的其他情况下,确定所述测试结果为:测试失败。
10.一种测试用例生成装置,其特征在于,包括:
获取模块,用于获取用户在访问目标服务时的服务请求信息,并基于所述服务请求信息,生成候选测试用例;
回放模块,用于对所述候选测试用例进行回放,并获取所述候选测试用例回放过程中,所述目标服务对所述候选测试用例进行响应的代码覆盖信息;所述代码覆盖信息用于描述所述目标服务响应所述候选测试用例过程中的代码执行情况;
筛选模块,用于基于所述代码覆盖信息,从所述候选测试用例中筛选对待测试服务进行测试的目标测试用例;
其中,所述待测试服务和所述目标服务属于相同服务的不同版本;
所述筛选模块,具体用于:
根据确定的候选测试用例分别对应的代码覆盖信息,确定候选测试用例覆盖到的目标代码文件、以及在目标代码文件中覆盖到的代码行,基于覆盖到的目标代码文件生成代码文件集,并基于各个目标代码文件中覆盖到的目标代码行,生成代码集;
针对所述代码集中的目标代码行,执行下述过程:
遍历所述代码集中的各行代码,并针对当前遍历到的代码,基于所述候选测试用例对应的代码覆盖信息,从所述候选测试用例中,确定在所述候选测试用例回放过程中,执行了所述当前遍历到的代码的目标候选测试用例;
从所述目标候选测试用例中,确定与所述当前遍历到的代码对应的目标测试用例。
11.一种测试装置,其特征在于,包括:
执行模块,用于控制目标服务和待测试服务执行目标测试用例,得到所述目标服务执行所述目标测试用例的第一执行结果、以及所述待测试服务执行所述目标测试用例的第二执行结果;其中,所述目标测试用例基于权利要求1-5任一项所述的测试用例生成方法生成;
比对模块,用于对所述第一执行结果和所述第二执行结果进行比对处理,得到利用所述目标测试用例对所述待测试服务进行测试的测试结果。
12.一种计算机设备,其特征在于,包括:处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述处理器执行如权利要求1至9任一项所述方法的步骤。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被计算机设备运行时,所述计算机设备执行如权利要求1至9任意一项所述方法的步骤。
CN202410135742.9A 2024-01-31 2024-01-31 测试用例生成、测试方法、装置、计算机设备及存储介质 Active CN117667750B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410135742.9A CN117667750B (zh) 2024-01-31 2024-01-31 测试用例生成、测试方法、装置、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410135742.9A CN117667750B (zh) 2024-01-31 2024-01-31 测试用例生成、测试方法、装置、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN117667750A CN117667750A (zh) 2024-03-08
CN117667750B true CN117667750B (zh) 2024-05-14

Family

ID=90075344

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410135742.9A Active CN117667750B (zh) 2024-01-31 2024-01-31 测试用例生成、测试方法、装置、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN117667750B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007014521A1 (fr) * 2005-08-01 2007-02-08 Tong Wang Procede permettant de concevoir un scenario d'essai et systeme correspondant
CN106227661A (zh) * 2016-07-22 2016-12-14 腾讯科技(深圳)有限公司 数据处理方法及装置
CN107193739A (zh) * 2017-05-23 2017-09-22 张泽祎 一种黑盒回归测试方法
CN112783800A (zh) * 2021-03-19 2021-05-11 北京奇艺世纪科技有限公司 一种测试用例筛选方法及装置
CN114238110A (zh) * 2021-12-16 2022-03-25 平安证券股份有限公司 软件应用测试方法、装置、设备及存储介质
CN114546868A (zh) * 2022-02-25 2022-05-27 重庆紫光华山智安科技有限公司 代码覆盖率测试方法、装置和电子设备
CN116610552A (zh) * 2022-02-09 2023-08-18 广州视臻信息科技有限公司 测试用例推荐方法、装置、存储介质和电子设备

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007014521A1 (fr) * 2005-08-01 2007-02-08 Tong Wang Procede permettant de concevoir un scenario d'essai et systeme correspondant
CN106227661A (zh) * 2016-07-22 2016-12-14 腾讯科技(深圳)有限公司 数据处理方法及装置
CN107193739A (zh) * 2017-05-23 2017-09-22 张泽祎 一种黑盒回归测试方法
CN112783800A (zh) * 2021-03-19 2021-05-11 北京奇艺世纪科技有限公司 一种测试用例筛选方法及装置
CN114238110A (zh) * 2021-12-16 2022-03-25 平安证券股份有限公司 软件应用测试方法、装置、设备及存储介质
CN116610552A (zh) * 2022-02-09 2023-08-18 广州视臻信息科技有限公司 测试用例推荐方法、装置、存储介质和电子设备
CN114546868A (zh) * 2022-02-25 2022-05-27 重庆紫光华山智安科技有限公司 代码覆盖率测试方法、装置和电子设备

Also Published As

Publication number Publication date
CN117667750A (zh) 2024-03-08

Similar Documents

Publication Publication Date Title
CN109474488B (zh) 接口测试方法、装置及计算机设备
US10467316B2 (en) Systems and methods for web analytics testing and web development
Subraya et al. Object driven performance testing of Web applications
CN107992409A (zh) 测试用例生成方法、装置、计算机设备和存储介质
US20080301813A1 (en) Testing Software Applications with Schema-based Fuzzing
CN108628748B (zh) 自动化测试管理方法和自动化测试管理系统
CN108984389B (zh) 一种应用程序测试方法及终端设备
US11102081B1 (en) Quantitative network testing framework for 5G and subsequent generation networks
CN108446221A (zh) 系统测试方法、装置、计算机设备和存储介质
CN107451058B (zh) 一种软件开发方法和装置
CN106487603A (zh) 一种响应测试方法及装置
CN110222042A (zh) 用于确定已核对业务数据的方法、装置、设备及系统架构
CN112241360A (zh) 一种测试用例生成方法、装置、设备及存储介质
CN111240955A (zh) Http接口自动化测试方法及装置、存储介质、电子设备
CN109831357A (zh) 一种服务验证方法、装置、存储介质及服务器
CN112540924A (zh) 接口自动化测试方法、装置、设备及存储介质
CN109101412B (zh) 测试文件生成、测试方法、装置、存储介质和计算机设备
US7536602B2 (en) Method and apparatus for evaluating paths in a state machine
CN112260885A (zh) 一种工控协议自动测试方法、系统、装置及可读存储介质
CN112202647B (zh) 区块链网络中的测试方法、装置及测试设备
CN117667750B (zh) 测试用例生成、测试方法、装置、计算机设备及存储介质
CN112650688A (zh) 自动化回归测试方法、关联设备以及计算机程序产品
CN117056218A (zh) 测试管理方法、平台、介质和设备
Smith et al. Benchmarks for end-to-end microservices testing
CN111708712A (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