CN117827632A - 测试方法、装置及存储介质 - Google Patents

测试方法、装置及存储介质 Download PDF

Info

Publication number
CN117827632A
CN117827632A CN202211204252.7A CN202211204252A CN117827632A CN 117827632 A CN117827632 A CN 117827632A CN 202211204252 A CN202211204252 A CN 202211204252A CN 117827632 A CN117827632 A CN 117827632A
Authority
CN
China
Prior art keywords
code
test case
test
difference
generating
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
CN202211204252.7A
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 Zitiao Network Technology Co Ltd
Original Assignee
Beijing Zitiao Network 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 Zitiao Network Technology Co Ltd filed Critical Beijing Zitiao Network Technology Co Ltd
Priority to CN202211204252.7A priority Critical patent/CN117827632A/zh
Publication of CN117827632A publication Critical patent/CN117827632A/zh
Pending legal-status Critical Current

Links

Abstract

本申请提供一种测试方法、装置及存储介质,该方法根据第一代码和预存单元测试用例生成方法,生成第一测试用例,进而,基于第一测试用例,对第二代码进行测试,根据第一代码、第二代码、第一测试用例,以及单元测试用例生成方法,生成第二测试用例,基于第二测试用例,对第三代码进行测试,获得第二测试结果,其中,上述第一代码、第二代码和第三代码分别为同一应用程序的不同版本的代码,从而,根据上述两个代码的测试结果,确定异常代码,解决现有软件测试中利用自动生成技术生成的测试用例存在Oracle problem,导致软件测试出错的问题。而且,本申请实施例通过比较两个版本代码的测试结果,能够以较大的概率发现代码之间的区别。

Description

测试方法、装置及存储介质
技术领域
本申请涉及软件测试技术领域,尤其涉及一种测试方法、装置及存储介质。
背景技术
近年来,随着软件技术的飞速发展以及软件快速迭代,软件质量的稳定性和可靠性变得尤为重要,而软件测试作为保障软件质量的关键环节,目的就在于以耗费尽可能少的人力、物力在短时间内尽可能多的找出软件中的缺陷,以对软件进行修复。
相关技术中,测试人员通常按需手动编写特定的测试用例,基于测试用例对软件进行测试,而且为了改善测试效果,往往需要编写大量的测试用例。但是,通过手动编写测试用例,耗时较长、效率较低,导致软件测试效率下降。因此,现有逐渐利用自动生成技术生成测试用例,进行软件测试。
然而,现有利用自动生成技术生成的测试用例存在Oracle problem(无法验证输出是否正确的问题),从而,导致软件测试出错。
发明内容
本申请提供一种测试方法、装置及存储介质,以解决现有软件测试中利用自动生成技术生成的测试用例存在的Oracle problem(无法验证输出是否正确的问题)。
第一方面,本申请实施例提供一种测试方法,包括:
根据第一代码和预存的单元测试用例生成方法,生成第一测试用例;
基于所述第一测试用例,对第二代码进行测试,获得第一测试结果;
根据所述第一代码、所述第二代码、所述第一测试用例,以及所述单元测试用例生成方法,生成第二测试用例;
基于所述第二测试用例,对第三代码进行测试,获得第二测试结果,其中,所述第一代码、所述第二代码和所述第三代码分别为同一应用程序的不同版本的代码;
根据所述第一测试结果和所述第二测试结果,确定异常代码。
在一种可能的实现方式中,所述根据所述第一代码、所述第二代码,所述第一测试用例,以及所述单元测试用例生成方法,生成第二测试用例,包括:
将所述第一代码和所述第二代码进行比较,确定所述第一代码与所述第二代码之间的差异代码;
基于所述第一代码与所述第二代码之间的差异代码,所述第一测试用例,以及所述单元测试用例生成方法,生成所述第二测试用例。
在一种可能的实现方式中,所述基于所述第一代码与所述第二代码之间的差异代码,所述第一测试用例,以及所述单元测试用例生成方法,生成所述第二测试用例,包括:
基于所述第一代码与所述第二代码之间的差异代码,以及所述单元测试用例生成方法,生成差异测试用例;
根据所述差异测试用例,对所述第一测试用例进行更新,获得所述第二测试用例。
在一种可能的实现方式中,所述根据所述第一测试结果和所述第二测试结果,确定异常代码,包括:
将所述第一测试结果与所述第二测试结果进行比较,确定所述第二代码与所述第三代码之间的差异代码;
基于所述第二代码与所述第三代码之间的差异代码,确定异常代码。
在一种可能的实现方式中,在所述将所述第一测试结果与所述第二测试结果进行比较,确定所述第二代码与所述第三代码之间的差异代码之前,还包括:
判断所述第一测试结果与所述第二测试结果是否相同;
所述将所述第一测试结果与所述第二测试结果进行比较,确定所述第二代码与所述第三代码之间的差异代码,包括:
若所述第一测试结果与所述第二测试结果不同,则将所述第一测试结果与所述第二测试结果进行比较,确定所述第二代码与所述第三代码之间的差异代码。
在一种可能的实现方式中,所述基于所述第二代码与所述第三代码之间的差异代码,确定异常代码,包括:
将所述第二代码与所述第三代码之间的差异代码发送至预设人员,以使所述预设人员基于所述第二代码与所述第三代码之间的差异代码,确定异常代码。
在一种可能的实现方式中,在所述根据所述第一代码、所述第二代码、所述第一测试用例,以及所述单元测试用例生成方法,生成第二测试用例之后,还包括:
根据所述第二代码、所述第三代码、所述第二测试用例,以及所述单元测试用例生成方法,生成第三测试用例。
在一种可能的实现方式中,所述基于所述第一测试用例,对第二代码进行测试,获得第一测试结果,包括:
将所述第一测试用例作为测试输入,在所述第二代码上执行测试,得到所述第一测试结果。
第二方面,本申请实施例提供一种测试装置,包括:
第一生成模块,用于根据第一代码和预存的单元测试用例生成方法,生成第一测试用例;
第一测试模块,用于基于所述第一测试用例,对第二代码进行测试,获得第一测试结果;
第二生成模块,用于根据所述第一代码、所述第二代码、所述第一测试用例,以及所述单元测试用例生成方法,生成第二测试用例;
第二测试模块,用于基于所述第二测试用例,对第三代码进行测试,获得第二测试结果,其中,所述第一代码、所述第二代码和所述第三代码分别为同一应用程序的不同版本的代码;
异常确定模块,用于根据所述第一测试结果和所述第二测试结果,确定异常代码。
在一种可能的实现方式中,所述第二生成模块,具体用于:
将所述第一代码和所述第二代码进行比较,确定所述第一代码与所述第二代码之间的差异代码;
基于所述第一代码与所述第二代码之间的差异代码,所述第一测试用例,以及所述单元测试用例生成方法,生成所述第二测试用例。
在一种可能的实现方式中,所述第二生成模块,具体用于:
基于所述第一代码与所述第二代码之间的差异代码,以及所述单元测试用例生成方法,生成差异测试用例;
根据所述差异测试用例,对所述第一测试用例进行更新,获得所述第二测试用例。
在一种可能的实现方式中,所述异常确定模块,具体用于:
将所述第一测试结果与所述第二测试结果进行比较,确定所述第二代码与所述第三代码之间的差异代码;
基于所述第二代码与所述第三代码之间的差异代码,确定异常代码。
在一种可能的实现方式中,所述异常确定模块,还用于:
判断所述第一测试结果与所述第二测试结果是否相同;
若所述第一测试结果与所述第二测试结果不同,则将所述第一测试结果与所述第二测试结果进行比较,确定所述第二代码与所述第三代码之间的差异代码。
在一种可能的实现方式中,所述异常确定模块,具体用于:
将所述第二代码与所述第三代码之间的差异代码发送至预设人员,以使所述预设人员基于所述第二代码与所述第三代码之间的差异代码,确定异常代码。
在一种可能的实现方式中,还包括第三生成模块,用于在所述第二生成模块根据所述第一代码、所述第二代码、所述第一测试用例,以及所述单元测试用例生成方法,生成第二测试用例之后,根据所述第二代码、所述第三代码、所述第二测试用例,以及所述单元测试用例生成方法,生成第三测试用例。
在一种可能的实现方式中,所述第一测试模块,具体用于:
将所述第一测试用例作为测试输入,在所述第二代码上执行测试,得到所述第一测试结果。
第三方面,本申请实施例提供一种测试设备,包括:
处理器;
存储器;以及
计算机程序;
其中,所述计算机程序被存储在所述存储器中,并且被配置为由所述处理器执行,所述计算机程序包括用于执行如第一方面所述的方法的指令。
第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序使得服务器执行第一方面所述的方法。
第五方面,本申请实施例提供一种计算机程序产品,包括计算机指令,所述计算机指令被处理器执行第一方面所述的方法。
本申请实施例提供的测试方法、装置及存储介质,该方法根据第一代码和预存的单元测试用例生成方法,生成第一测试用例,进而,基于第一测试用例,对第二代码进行测试,根据上述第一代码、第二代码、第一测试用例,以及上述单元测试用例生成方法,生成第二测试用例,基于第二测试用例,对第三代码进行测试,获得第二测试结果,其中,上述第一代码、第二代码和第三代码分别为同一应用程序的不同版本的代码,从而,根据上述两个代码的测试结果,确定异常代码,解决现有软件测试中利用自动生成技术生成的测试用例存在Oracle problem,导致软件测试出错的问题。而且,本申请实施例通过比较两个版本代码的测试结果,能够以较大的概率发现代码之间的区别,从而可以以较低成本且自动化的方式,识别意料之外的程序行为(异常代码)。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的测试系统架构示意图;
图2为本申请实施例提供的一种测试方法的流程示意图;
图3为本申请实施例提供的另一种测试方法的流程示意图;
图4为本申请实施例提供的一种软件测试示意图;
图5为本申请实施例提供的一种测试装置的结构示意图;
图6为本申请实施例提供的另一种测试装置的结构示意图;
图7A为本申请实施例提供的一种测试设备的基本硬件架构示意图;
图7B为本申请实施例提供的另一种测试设备的基本硬件架构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”及“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
随着自动化测试技术的发展,越来越多的自动化测试工具和框架涌现市场,现有技术中通常利用自动生成技术生成测试用例,进行软件测试。但是利用自动生成技术生成的测试用例存在Oracle problem(无法验证输出是否正确的问题),从而,导致软件测试出错。
例如某一代码包括SubUtil,SubUtil返回a-b,利用自动生成技术生成的测试用例包括a=2,b=1,assert一个预期结果,即得到值1。如果有另一代码,如修改上述代码中的SubUtil,获得另一代码SubUtil返回a+b。利用上述测试用例对上述修改后的代码进行测试得到值3,这个按照代码逻辑来说十分正确,但是与真实的开发意图是不符合的(真实开发意图SubUtil返回a-b,但上述修改出错改为了返回a+b,利用自动生成技术生成的测试用例并没有检测出来),这便出现了一个Oracle问题。
因此,本申请实施例提出一种测试方法,在单元测试场景下,用测试用例对两个版本的代码进行测试,然后比较测试的两个版本代码的中间和最终产物,以识别不符合期望的行为(bug),从而,解决现有软件测试中利用自动生成技术生成的测试用例存在Oracleproblem,导致软件测试出错的问题。
可选地,本申请实施例提供的测试方法可以应用于如图1所示的测试系统中。在图1中,该测试系统架构可以包括接收装置101、处理装置102和显示装置103。
在具体实现过程中,接收装置101可以是输入/输出接口,也可以是通信接口,可以用于接收相关代码,如第一代码、第二代码和第三代码等。其中,第一代码、第二代码和第三代码分别为同一应用程序的不同版本的代码。
处理装置102可以通过上述接收装置101获取相关代码,然后,在单元测试场景下,利用第一代码,生成第一测试用例,进而,基于该第一测试用例对第二代码进行测试,据第一代码、第二代码和第一测试用例,生成第二测试用例,基于该第二测试用例,对第三代码进行测试,获得第二测试结果,从而,根据第一测试结果和第二测试结果,确定异常代码,如比较两个版本代码的中间和最终产物,识别意料之外的程序行为(异常代码),解决现有软件测试中利用自动生成技术生成的测试用例存在的Oracle problem。
显示装置103可以用于对上述第一代码、第一测试用例、第二代码、第二测试用例、第三代码和异常代码等进行显示。
显示装置还可以是触摸显示屏,用于在显示的上述内容的同时接收用户指令,以实现与用户的交互。
应理解,上述处理装置可以通过处理器读取存储器中的指令并执行指令的方式实现,也可以通过芯片电路实现。
需要进行说明的是,本申请实施例描述的系统架构以及业务场景是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着系统架构的演变和新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
下面以几个实施例为例对本申请的技术方案进行描述,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图2为本申请实施例提供的一种测试方法的流程示意图,本实施例的执行主体可以为图1中的处理装置,具体执行主体可以根据实际应用场景确定,本申请实施例对此不做特别限制。如图2所示,本申请实施例提供的测试方法可以包括如下步骤:
S201:根据第一代码和预存的单元测试用例生成方法,生成第一测试用例。
其中,第一代码可以根据实际情况确定,例如上述第一代码包括SubUtil,SubUtil返回a-b。
示例性的,上述处理装置在生成第一测试用例时,可以先获取预存的单元测试用例生成方法,进而,根据该单元测试用例生成方法和上述第一代码,生成第一测试用例。这里,上述预存的单元测试用例生成方法可以根据实际情况确定,例如根据路径自动生成单元测试用例的方法。
在本申请实施例中,上述处理装置利用预存的单元测试用例生成方法低成本的生成大量测试用例,从而获得更高的program path覆盖率,这样后续处理中,能有较大的概率发现版本之间的行为区别。
S202:基于上述第一测试用例,对第二代码进行测试,获得第一测试结果。
S203:根据上述第一代码、第二代码、第一测试用例,以及上述单元测试用例生成方法,生成第二测试用例。
可选地,上述处理装置在根据上述第一代码和预存的单元测试用例生成方法,生成上述第一测试用例后,可以将上述第一测试用例作为测试输入,在上述第二代码上执行测试,得到上述第一测试结果,同理,也将上述第一测试用例作为测试输入,在上述第三代码上执行测试,得到上述第二测试结果。
示例性的,以上述第一测试用例包括a=2,b=1,assert一个预期结果,即得到值1为例,上述处理装置基于该测试用例,对上述第二代码进行测试,返回值3,得到失败结果,进一步地,基于上述测试用例,对上述第三代码进行测试,返回值1,得到成功结果。
进一步地,本实施例在基于第一测试用例对各个代码进行测试的过程中,还考虑上述第一测试用例的有效性。如上述各个代码是根据不同需求在不断调整的,如果一直利用上述第一测试用例对上述各个代码进行测试,可能会出现利用上述第一测试用例无法对某些代码进行测试的情况,即由于某些代码的调整,导致上述第一测试用例不可用(失效)。因此,本实施例进一步考虑对上述第一测试用例进行更新,即根据上述第一代码、第二代码、第一测试用例,以及上述单元测试用例生成方法,进行测试用例更新,生成第二测试用例,进而,基于该第二测试用例,对第三代码进行测试,获得第二测试结果,从而,避免测试用例不可用(失效),保证后续处理正常进行。
S204:基于上述第二测试用例,对第三代码进行测试,获得第二测试结果。
其中,上述第一代码、第二代码和第三代码分别为同一应用程序的不同版本的代码。这里,上述应用程序可以根据实际情况确定,例如以上述应用程序包括SubUtil,SubUtil返回a-b为例,第一代码为上述应用程序的某一版本代码,包括SubUtil,SubUtil返回a-b,上述第二代码为上述应用程序的另一版本代码,修改上述第一代码中的SubUtil,获得SubUtil返回a+b的代码。上述第三代码为上述应用程序的再一版本代码,没有修改上述第一代码中的SubUtil,即包括SubUtil返回a-b的代码。
这里,上述处理装置在根据上述第一代码、第二代码、第一测试用例,以及上述单元测试用例生成方法,生成第二测试用例后,可以将上述第二测试用例作为测试输入,在上述第三代码上执行测试,得到上述第二测试结果,
S205:根据上述第一测试结果和上述第二测试结果,确定异常代码。
示例性的,上述处理装置可以将上述第一测试结果与第二测试结果进行比较,确定上述第二代码与第三代码之间的差异代码,从而,基于该差异代码,确定异常代码。
其中,上述处理装置在进行测试结果比较之前,可以先判断上述第一测试结果与第二测试结果是否相同,如果上述第一测试结果与第二测试结果不同,则执行上述将第一测试结果与第二测试结果进行比较的步骤。例如上述第二代码进行测试,返回值3,得到失败结果,上述第三代码进行测试,返回值1,得到成功结果,上述第二代码的测试结果和上述第三代码的测试结果不同。这里,两个代码的测试结果不同说明第一代码、第二代码和/或第三代码中可能有问题,此时,上述处理装置可以将上述两个测试结果进行比较,进而,根据比较结果,确定上述第二代码与第三代码之间的差异代码,如SubUtil文件(上述第二代码修改上述第一代码中的SubUtil,上述第三代码没有修改上述第一代码中的SubUtil)。
可选地,上述处理装置在确定上述第二代码与第三代码之间的差异代码后,可以将该差异代码发送至预设人员,以使预设人员基于上述第二代码与第三代码之间的差异代码,确定上述第一代码、第二代码和/或第三代码中的异常代码。例如上述处理装置确定上述第二代码与第三代码之间的差异代码为SubUtil文件,可以将上述SubUtil文件发送至预设人员,这样,预设人员可以基于上述SubUtil文件,对上述第一代码、第二代码和第三代码中的SubUtil文件进行检测,从而,确定第二代码中SubUtil文件出错,即确定了上述第二代码中异常代码。
本申请实施例根据第一代码和预存的单元测试用例生成方法,生成第一测试用例,进而,基于第一测试用例,对第二代码进行测试,根据上述第一代码、第二代码、第一测试用例,以及上述单元测试用例生成方法,生成第二测试用例,基于第二测试用例,对第三代码进行测试,获得第二测试结果,其中,上述第一代码、第二代码和第三代码分别为同一应用程序的不同版本的代码,从而,根据上述两个代码的测试结果,确定异常代码,解决现有软件测试中利用自动生成技术生成的测试用例存在Oracle problem,导致软件测试出错的问题。而且,本申请实施例通过比较两个版本代码的测试结果,能够以较大的概率发现代码之间的区别,从而可以以较低成本且自动化的方式,识别意料之外的程序行为(异常代码)。
另外,在本申请实施例中,上述处理装置在根据上述第一代码、第二代码、第一测试用例,以及上述单元测试用例生成方法,生成第二测试用例时,可以先将上述第一代码和第二代码进行比较,确定上述第一代码与第二代码之间的差异代码,进而,基于上述第一代码与第二代码之间的差异代码,第一测试用例,以及上述单元测试用例生成方法,生成第二测试用例,完成对上述第一测试用例的增量更新,从而,后续可以基于该第二测试用例对代码进行测试,避免测试用例不可用(失效),保证后续处理正常进行。图3为本申请实施例提出的另一种测试方法的流程示意图。如图3所示,该方法包括:
S301:根据第一代码和预存的单元测试用例生成方法,生成第一测试用例。
S302:基于上述第一测试用例,对第二代码进行测试,获得第一测试结果。
其中,步骤S301-S302与上述步骤S201-S202的实现方式类似,此处不再赘述。
S303:将上述第一代码和第二代码进行比较,确定上述第一代码与第二代码之间的差异代码。
S304:基于上述第一代码与第二代码之间的差异代码,第一测试用例,以及上述单元测试用例生成方法,生成第二测试用例。
这里,上述处理装置可以将上述第一代码和第二代码进行比较,确定上述第一代码与第二代码之间的差异代码,进而,基于该差异代码,上述第一测试用例,以及上述单元测试用例生成方法,生成上述第二测试用例。
其中,上述处理装置可以先基于上述第一代码与第二代码之间的差异代码,以及上述单元测试用例生成方法,生成差异测试用例,然后,根据该差异测试用例,对上述第一测试用例进行更新,获得上述第二测试用例。
另外,上述处理装置在对上述第一测试用例进行更新时,可以将上述差异测试用例与上述第一测试用例进行比较,基于比较结果,对上述第一测试用例进行更新,获得上述第二测试用例。
在本申请实施例中,上述处理装置基于上述第一代码和第二代码,对上述第一测试用例进行增量更新,生成第二测试用例,从而,后续可以基于该第二测试用例对代码进行测试,避免测试用例不可用(失效),保证后续处理正常进行。
S305:基于上述第二测试用例,对第三代码进行测试,获得第二测试结果。
其中,上述第一代码、第二代码和第三代码分别为同一应用程序的不同版本的代码。
这里,在上述根据上述第一代码、第二代码、第一测试用例,以及单元测试用例生成方法,生成第二测试用例之后,上述处理装置还可以根据上述第二代码、第三代码、第二测试用例,以及上述单元测试用例生成方法,生成第三测试用例,从而,可以基于第三测试用例对代码,如第四代码进行测试,在动态的生产环境中形成闭环,保证后续处理正常进行。
示例性的,如图4所示,图4给出本申请实施例提出的一种软件测试示意图,在图中,上述第一代码可以为基础版本代码(如某一应用程序最新的已发布的稳定版本的代码),第二代码为上述应用程序的A版本代码,第三代码为上述应用程序的B版本代码。这里,上述基础版本代码、A版本代码和B版本代码分别为同一应用程序的不同版本的代码。
上述处理装置可以先根据上述基础版本代码和预存的单元测试用例生成方法,生成第一测试用例,然后,基于该第一测试用例,对A版本代码进行测试,获得A版本测试结果。此时,上述处理装置考虑对上述第一测试用例进行增量更新,即根据上述基础版本代码、A版本代码,上述第一测试用例,以及上述单元测试用例生成方法,生成第二测试用例。其中,上述处理装置可以将上述基础版本代码和A版本代码进行比较,确定差异代码,从而,基于该差异代码,上述第一测试用例,以及上述单元测试用例生成方法,生成第二测试用例,如先基于上述差异代码和上述单元测试用例生成方法,生成差异测试用例,然后根据该差异测试用例,对上述第一测试用例进行更新,获得第二测试用例。
进一步地,上述处理装置基于上述第二测试用例,对B版本代码进行测试,获得B版本测试结果,从而,根据上述A版本测试结果和B版本测试结果,分析并报告异常的程序行为。这里,上述处理装置可以将上述A版本测试结果和B版本测试结果进行比较,确定A版本代码与B版本代码之间的差异代码,进而,基于该差异代码,分析并报告异常的程序行为。
另外,如果后续还有其它代码需要测试,上述处理装置可以根据A版本代码与B版本代码,上述第二测试用例,以及上述单元测试用例生成方法,生成第三测试用例,即参考上述对上述第一测试用例进行增量更新的过程,对上述第二测试用例进行增量更新,在动态的生产环境中形成闭环,避免测试用例不可用(失效),保证后续处理正常进行。
S306:根据上述第一测试结果和第二测试结果,确定异常代码。
在本申请实施例中,上述处理装置在基于上述第一测试用例,对第二代码进行测试后,对上述第一测试用例进行增量更新,获得第二测试用例,进而,基于第二测试用例对第三代码进行测试,从而,基于上述第二代码的测试结果和上述第三代码的测试结果,可以确定上述第一代码、第二代码和/或第三代码中的异常代码。
例如上述第一代码包括AddUtil,该AddUtil有误,并且在第一代码中有一个调用方MyClass,在它的getTrue方法中会去调用AddUtil。上述处理装置基于上述第一代码生成第一测试用例,如对调用方MyClass生成一个测试用例,调用myClass的getTrue方法,判断返回值是否为True。上述第二代码修改了MyClass,此时,getTrue方法的返回值是False,测试用例的assert会返回失败结果。进一步地,上述处理装置对上述测试用例进行增量更新,如果第三代码没有修改MyClass,此时,执行更新后的测试用例,将得到成功结果。上述处理装置将上述两个测试结果进行比较,确定差异代码AddUtil,进而,基于该差异代码,确定上述第一代码AddUtil有误。
本申请实施例中,上述处理装置考虑对上述第一测试用例进行更新,生成第二测试用例,进而,基于该第二测试用例,对后续代码进行测试,从而,避免测试用例不可用(失效),保证后续处理正常进行。而且,本申请实施例通过比较两个版本代码的测试结果,能够以较大的概率发现代码之间的区别,从而可以以较低成本且自动化的方式,识别意料之外的程序行为(异常代码)。
对应于上文实施例的测试方法,图5为本申请实施例提供的测试装置的结构示意图。为了便于说明,仅示出了与本申请实施例相关的部分。图5为本申请实施例提供的一种测试装置的结构示意图,该测试装置50包括:第一生成模块501、第一测试模块502、第二生成模块503、第二测试模块504以及异常确定模块505。这里的测试装置可以是上述处理装置本身,或者是实现处理装置的功能的芯片或者集成电路。这里需要说明的是,第一生成模块、第一测试模块、第二生成模块、第二测试模块以及异常确定模块的划分只是一种逻辑功能的划分,物理上两者可以是集成的,也可以是独立的。
其中,第一生成模块501,用于根据第一代码和预存的单元测试用例生成方法,生成第一测试用例。
第一测试模块502,用于基于所述第一测试用例,对第二代码进行测试,获得第一测试结果。
第二生成模块503,用于根据所述第一代码、所述第二代码、所述第一测试用例,以及所述单元测试用例生成方法,生成第二测试用例。
第二测试模块504,用于基于所述第二测试用例,对第三代码进行测试,获得第二测试结果,其中,所述第一代码、所述第二代码和所述第三代码分别为同一应用程序的不同版本的代码。
异常确定模块505,用于根据所述第一测试结果和所述第二测试结果,确定异常代码。
在一种可能的实现方式中,在一种可能的实现方式中,所述异常确定模块505,具体用于:
将所述第一测试结果与所述第二测试结果进行比较,确定所述第二代码与所述第三代码之间的差异代码;
基于所述第二代码与所述第三代码之间的差异代码,确定异常代码。
在一种可能的实现方式中,所述异常确定模块505,还用于:
判断所述第一测试结果与所述第二测试结果是否相同;
若所述第一测试结果与所述第二测试结果不同,则将所述第一测试结果与所述第二测试结果进行比较,确定所述第二代码与所述第三代码之间的差异代码。
在一种可能的实现方式中,所述异常确定模块505,具体用于:
将所述第二代码与所述第三代码之间的差异代码发送至预设人员,以使所述预设人员基于所述第二代码与所述第三代码之间的差异代码,确定异常代码。
在一种可能的实现方式中,所述第一测试模块502,具体用于:
将所述第一测试用例作为测试输入,在所述第二代码上执行测试,得到所述第一测试结果。
本申请实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本申请实施例此处不再赘述。
图6为本申请实施例提供的另一种测试装置的结构示意图,上述测试装置50还包括:第三生成模块506。
其中,所述第二生成模块503,具体用于:
将所述第一代码和所述第二代码进行比较,确定所述第一代码与所述第二代码之间的差异代码;
基于所述第一代码与所述第二代码之间的差异代码,所述第一测试用例,以及所述单元测试用例生成方法,生成所述第二测试用例。
在一种可能的实现方式中,所述第二生成模块503,具体用于:
基于所述第一代码与所述第二代码之间的差异代码,以及所述单元测试用例生成方法,生成差异测试用例;
根据所述差异测试用例,对所述第一测试用例进行更新,获得所述第二测试用例。
在一种可能的实现方式中,所述第三生成模块506,用于在所述第二生成模块503根据所述第一代码、所述第二代码、所述第一测试用例,以及所述单元测试用例生成方法,生成第二测试用例之后,根据所述第二代码、所述第三代码、所述第二测试用例,以及所述单元测试用例生成方法,生成第三测试用例。
本申请实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本申请实施例此处不再赘述。
可选地,图7A和7B示意性地提供本申请所述测试设备的一种可能的基本硬件架构示意图。
参见图7A和7B,测试设备700包括至少一个处理器701以及通信接口703。进一步可选的,还可以包括存储器702和总线704。
其中,测试设备700中,处理器701的数量可以是一个或多个,图7A和7B仅示意了其中一个处理器701。可选地,处理器701,可以是中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)或者数字信号处理器(digitalsignal processor,DSP)。如果测试设备700具有多个处理器701,多个处理器701的类型可以不同,或者可以相同。可选地,测试设备700的多个处理器701还可以集成为多核处理器。
存储器702存储计算机指令和数据;存储器702可以存储实现本申请提供的上述测试方法所需的计算机指令和数据,例如,存储器702存储用于实现上述测试方法的步骤的指令。存储器702可以是以下存储介质的任一种或任一种组合:非易失性存储器(例如只读存储器(ROM)、固态硬盘(SSD)、硬盘(HDD)、光盘),易失性存储器。
通信接口703可以为所述至少一个处理器提供信息输入/输出。也可以包括以下器件的任一种或任一种组合:网络接口(例如以太网接口)、无线网卡等具有网络接入功能的器件。
可选的,通信接口703还可以用于测试设备700与其它计算设备或者测试设备进行数据通信。
进一步可选的,图7A和7B用一条粗线表示总线704。总线704可以将处理器701与存储器702和通信接口703连接。这样,通过总线704,处理器701可以访问存储器702,还可以利用通信接口703与其它计算设备或者测试设备进行数据交互。
在本申请中,测试设备700执行存储器702中的计算机指令,使得测试设备700实现本申请提供的上述测试方法,或者使得测试设备700部署上述的测试装置。
从逻辑功能划分来看,示例性的,如图7A和7B所示,存储器702中可以包括第一生成模块501、第一测试模块502、第二生成模块503、第二测试模块504以及异常确定模块505。这里的包括仅仅涉及存储器中所存储的指令被执行时可以分别实现第一生成模块、第一测试模块、第二生成模块、第二测试模块以及异常确定模块的功能,而不限定是物理上的结构。
示例性的,如图7B所示,存储器702中还可以包括第三生成模块506。这里的包括仅仅涉及存储器中所存储的指令被执行时还可以实现第三生成模块的功能,而不限定是物理上的结构。
另外,上述的测试设备除了可以像上述图7A和7B通过软件实现外,也可以作为硬件模块,或者作为电路单元,通过硬件实现。
本申请提供一种计算机可读存储介质,所述计算机程序产品包括计算机指令,所述计算机指令指示计算设备执行本申请提供的上述测试方法。
本申请提供一种计算机程序产品,包括计算机指令,所述计算机指令被处理器执行上述测试方法。
本申请提供一种芯片,包括至少一个处理器和通信接口,所述通信接口为所述至少一个处理器提供信息输入和/或输出。进一步,所述芯片还可以包含至少一个存储器,所述存储器用于存储计算机指令。所述至少一个处理器用于调用并运行该计算机指令,以执行本申请提供的上述测试方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

Claims (11)

1.一种测试方法,其特征在于,包括:
根据第一代码和预存的单元测试用例生成方法,生成第一测试用例;
基于所述第一测试用例,对第二代码进行测试,获得第一测试结果;
根据所述第一代码、所述第二代码、所述第一测试用例,以及所述单元测试用例生成方法,生成第二测试用例;
基于所述第二测试用例,对第三代码进行测试,获得第二测试结果,其中,所述第一代码、所述第二代码和所述第三代码分别为同一应用程序的不同版本的代码;
根据所述第一测试结果和所述第二测试结果,确定异常代码。
2.根据权利要求1所述的方法,其特征在于,所述根据所述第一代码、所述第二代码、所述第一测试用例,以及所述单元测试用例生成方法,生成第二测试用例,包括:
将所述第一代码和所述第二代码进行比较,确定所述第一代码与所述第二代码之间的差异代码;
基于所述第一代码与所述第二代码之间的差异代码,所述第一测试用例,以及所述单元测试用例生成方法,生成所述第二测试用例。
3.根据权利要求2所述的方法,其特征在于,所述基于所述第一代码与所述第二代码之间的差异代码,所述第一测试用例,以及所述单元测试用例生成方法,生成所述第二测试用例,包括:
基于所述第一代码与所述第二代码之间的差异代码,以及所述单元测试用例生成方法,生成差异测试用例;
根据所述差异测试用例,对所述第一测试用例进行更新,获得所述第二测试用例。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述根据所述第一测试结果和所述第二测试结果,确定异常代码,包括:
将所述第一测试结果与所述第二测试结果进行比较,确定所述第二代码与所述第三代码之间的差异代码;
基于所述第二代码与所述第三代码之间的差异代码,确定异常代码。
5.根据权利要求4所述的方法,其特征在于,在所述将所述第一测试结果与所述第二测试结果进行比较,确定所述第二代码与所述第三代码之间的差异代码之前,还包括:
判断所述第一测试结果与所述第二测试结果是否相同;
所述将所述第一测试结果与所述第二测试结果进行比较,确定所述第二代码与所述第三代码之间的差异代码,包括:
若所述第一测试结果与所述第二测试结果不同,则将所述第一测试结果与所述第二测试结果进行比较,确定所述第二代码与所述第三代码之间的差异代码。
6.根据权利要求4所述的方法,其特征在于,所述基于所述第二代码与所述第三代码之间的差异代码,确定异常代码,包括:
将所述第二代码与所述第三代码之间的差异代码发送至预设人员,以使所述预设人员基于所述第二代码与所述第三代码之间的差异代码,确定异常代码。
7.根据权利要求1至3中任一项所述的方法,其特征在于,在所述根据所述第一代码、所述第二代码、所述第一测试用例,以及所述单元测试用例生成方法,生成第二测试用例之后,还包括:
根据所述第二代码、所述第三代码、所述第二测试用例,以及所述单元测试用例生成方法,生成第三测试用例。
8.一种测试装置,其特征在于,包括:
第一生成模块,用于根据第一代码和预存的单元测试用例生成方法,生成第一测试用例;
第一测试模块,用于基于所述第一测试用例,对第二代码进行测试,获得第一测试结果;
第二生成模块,用于根据所述第一代码、所述第二代码、所述第一测试用例,以及所述单元测试用例生成方法,生成第二测试用例;
第二测试模块,用于基于所述第二测试用例,对第三代码进行测试,获得第二测试结果,其中,所述第一代码、所述第二代码和所述第三代码分别为同一应用程序的不同版本的代码;
异常确定模块,用于根据所述第一测试结果和所述第二测试结果,确定异常代码。
9.一种测试设备,其特征在于,包括:
处理器;
存储器;以及
计算机程序;
其中,所述计算机程序被存储在所述存储器中,并且被配置为由所述处理器执行,所述计算机程序包括用于执行如权利要求1-7任一项所述的方法的指令。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序使得服务器执行权利要求1-7任一项所述的方法。
11.一种计算机程序产品,其特征在于,包括计算机指令,所述计算机指令被处理器执行权利要求1-7任一项所述的方法。
CN202211204252.7A 2022-09-29 2022-09-29 测试方法、装置及存储介质 Pending CN117827632A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211204252.7A CN117827632A (zh) 2022-09-29 2022-09-29 测试方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211204252.7A CN117827632A (zh) 2022-09-29 2022-09-29 测试方法、装置及存储介质

Publications (1)

Publication Number Publication Date
CN117827632A true CN117827632A (zh) 2024-04-05

Family

ID=90504506

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211204252.7A Pending CN117827632A (zh) 2022-09-29 2022-09-29 测试方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN117827632A (zh)

Similar Documents

Publication Publication Date Title
US8627296B1 (en) Unified unit and integration test with automatic mock creation
US8225142B2 (en) Method and system for tracepoint-based fault diagnosis and recovery
US10209984B2 (en) Identifying a defect density
CN110032505B (zh) 软件质量确定装置和方法以及非暂态计算机可读介质
CN111753306A (zh) 一种智能合约漏洞检测方法、装置、电子设备及存储介质
US20140095142A1 (en) Resilient mock object creation for unit testing
CN112241370B (zh) 一种api接口类的校验方法、系统及装置
US8533544B2 (en) System for tree sequence testing of a device and method for tree sequence testing of a device in a test framework architecture
CN116599881A (zh) 云平台租户建模测试的方法、装置、设备及存储介质
CN117827632A (zh) 测试方法、装置及存储介质
CN108845932B (zh) 一种网络库的单元测试方法、装置、存储介质及终端
CN108845837B (zh) 一种检测windows系统运行模式的方法及电子设备
CN113704040A (zh) 一种微处理器内存可靠性测试方法
CN111475400A (zh) 一种业务平台的验证方法及相关设备
CN115080438B (zh) 一种可用性测试方法、装置、电子设备及存储介质
CN115640236B (zh) 一种脚本质量的检测方法及计算设备
US11169909B2 (en) Flexible test program generation by altering previously used resources
CN117806943A (zh) 测试方法、装置及存储介质
CN113407394B (zh) 一种服务器ras功能测试的方法、装置、设备和介质
CN111740876B (zh) 一种应用装置、测试方法、存储介质及电子设备
US11061745B2 (en) Shared resource analysis for embedded multi-core systems
CN117971687A (zh) 一种单元测试用例生成方法、装置、电子设备及存储介质
CN112199297A (zh) 数据测试方法、装置、非易失性存储介质和处理器
CN114116468A (zh) 一种应用测试方法、装置、电子设备及存储介质
CN114064484A (zh) 接口测试方法、装置、电子设备及可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination