CN116414678A - 一种测试用例生成方法、装置、设备以及存储介质 - Google Patents
一种测试用例生成方法、装置、设备以及存储介质 Download PDFInfo
- Publication number
- CN116414678A CN116414678A CN202111668169.0A CN202111668169A CN116414678A CN 116414678 A CN116414678 A CN 116414678A CN 202111668169 A CN202111668169 A CN 202111668169A CN 116414678 A CN116414678 A CN 116414678A
- Authority
- CN
- China
- Prior art keywords
- function
- simulated
- objective
- call link
- 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
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 149
- 238000000034 method Methods 0.000 title claims abstract description 67
- 238000010586 diagram Methods 0.000 claims abstract description 93
- 238000004088 simulation Methods 0.000 claims abstract description 54
- 230000006870 function Effects 0.000 claims description 471
- 230000008569 process Effects 0.000 claims description 19
- 238000004590 computer program Methods 0.000 claims description 11
- 230000004044 response Effects 0.000 claims description 3
- 238000011161 development Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本公开提供了一种测试用例生成方法、装置、设备以及存储介质,首先,获取目标代码工程中的目标函数对应的调用链路图;其中,调用链路图用于表征目标函数在目标代码工程中的函数依赖关系;可基于调用链路图,确定目标函数对应的至少一个待模拟函数;并基于预先获取的待模拟函数的出入参数据,生成待模拟函数对应的模拟代码;然后,基于待模拟函数对应的模拟代码以及目标函数对应的调用链路图,生成目标函数对应的测试用例;其中,测试用例用于对目标函数进行测试。可见,本公开能够基于目标函数对应的待模拟函数和调用链路图,自动化生成目标函数的测试用例,提高了测试用例生成的效率。
Description
技术领域
本公开涉及数据处理领域,尤其涉及一种测试用例生成方法、装置、设备以及存储介质。
背景技术
测试用例是指对代码工程中的函数进行测试的代码,目前,是通过人工编写模拟mock函数和测试用例,实现对目标函数的测试。可是人工编写的测试用例存在效率较低的问题。
因此,如何提高测试用例的生成效率,是目前亟需解决的技术问题。
发明内容
为了解决上述技术问题,本公开提供了一种测试用例生成方法,能够基于目标函数对应的待模拟函数和调用链路图,自动化生成目标函数的测试用例,提高了测试用例生成的效率。
第一方面,本公开提供了一种测试用例生成方法,该方法包括:
获取目标代码工程中的目标函数对应的调用链路图;其中,所述调用链路图用于表征所述目标函数在所述目标代码工程中的函数依赖关系;
基于所述调用链路图,确定所述目标函数对应的至少一个待模拟函数;
基于预先获取的所述待模拟函数的出入参数据,生成所述待模拟函数对应的模拟代码;
基于所述待模拟函数对应的模拟代码以及所述目标函数对应的调用链路图,生成所述目标函数对应的测试用例;其中,所述测试用例用于对所述目标函数进行测试。
一种可选的实施方式中,所述基于所述调用链路图,确定所述目标函数对应的至少一个待模拟函数之前,还包括:
对所述目标函数对应的调用链路图进行展示;
相应的,所述基于所述调用链路图,确定所述目标函数对应的至少一个待模拟函数,包括:
响应于针对所述调用链路图中的至少一个函数的选定操作,将所述至少一个函数确定为所述目标函数对应的待模拟函数。
一种可选的实施方式中,所述基于所述调用链路图,确定所述目标函数对应的至少一个待模拟函数,包括:
将所述调用链路图中满足预设的函数复杂度条件的至少一个函数,确定为所述目标函数对应的待模拟函数;其中,所述函数复杂度条件包括第一条件、第二条件和第三条件中的至少一种条件,所述第一条件包括出入参字段的个数达到预设阈值,所述第二条件包括函数类型属于远程调用函数,所述第三条件包括函数中包含存储调用。
一种可选的实施方式中,所述基于所述调用链路图,确定所述目标函数对应的至少一个待模拟函数,包括:
将所述调用链路图中处于预设调用层级的至少一个函数,确定为所述目标函数对应的待模拟函数。
一种可选的实施方式中,所述基于预先获取的所述待模拟函数的出入参数据,生成所述待模拟函数对应的模拟代码之前,还包括:
在所述目标代码工程运行的过程中,对已插桩函数的出入参数据进行录制;
将所述已插桩函数与所述出入参数据存储于预设存储空间中;
相应的,所述基于预先获取的所述待模拟函数的出入参数据,生成所述待模拟函数对应的模拟代码,包括:
从所述预设存储空间中获取所述待模拟函数对应的出入参数据;
基于所述待模拟函数对应的出入参数据,生成所述待模拟函数对应的模拟代码。
一种可选的实施方式中,所述基于预先获取的所述待模拟函数的出入参数据,生成所述待模拟函数对应的模拟代码,包括:
随机生成所述待模拟函数对应的出入参数据;
基于所述待模拟函数对应的出入参数据,生成所述待模拟函数对应的模拟代码。
一种可选的实施方式中,所述基于所述待模拟函数对应的模拟代码以及所述目标函数对应的调用链路图,生成所述目标函数对应的测试用例之后,还包括:
响应于针对所述目标函数对应的测试用例的触发操作,运行所述测试用例,输出所述目标函数的测试结果。
第二方面,本公开提供了一种测试用例生成装置,所述装置包括:
获取模块,用于获取目标代码工程中的目标函数对应的调用链路图;其中,所述调用链路图用于表征所述目标函数在所述目标代码工程中的函数依赖关系;
确定模块,用于基于所述调用链路图,确定所述目标函数对应的至少一个待模拟函数;
第一生成模块,用于基于预先获取的所述待模拟函数的出入参数据,生成所述待模拟函数对应的模拟代码;
第二生成模块,用于基于所述待模拟函数对应的模拟代码以及所述目标函数对应的调用链路图,生成所述目标函数对应的测试用例;其中,所述测试用例用于对所述目标函数进行测试。
第三方面,本公开提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当指令在终端设备上运行时,使得终端设备实现上述的方法。
第四方面,本公开提供了一种设备,包括:存储器,处理器,及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时,实现上述的方法。
第五方面,本公开提供了一种计算机程序产品,计算机程序产品包括计算机程序/指令,计算机程序/指令被处理器执行时实现上述的方法。
本公开实施例提供的技术方案与现有技术相比至少具有如下优点:
本公开提供了一种测试用例生成方法,首先,获取目标代码工程中的目标函数对应的调用链路图;其中,调用链路图用于表征目标函数在目标代码工程中的函数依赖关系;可基于调用链路图,确定目标函数对应的待模拟函数;并基于预先获取的待模拟函数的出入参数据,生成待模拟函数对应的模拟代码;然后,基于待模拟函数对应的模拟代码以及目标函数对应的调用链路图,生成目标函数对应的测试用例;其中,测试用例用于对目标函数进行测试。可见,本公开实施例能够基于目标函数对应的待模拟函数和调用链路图,自动化生成目标函数的测试用例,提高了测试用例生成的效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例提供的一种测试用例生成方法流程示意图;
图2为本公开实施例提供的一种目标函数对应的调用链路示意图;
图3为本公开实施例提供的一种测试用例生成方法执行过程示意图;
图4为本公开实施例提供的一种测试用例生成装置的结构示意图;
图5为本公开实施例提供的一种测试用例生成设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
Golang语言是Google设计的一种编程语言,在进行Golang语言代码工程开发过程中,为了保证代码的质量,单元测试成为Golang语言代码工程开发过程中不可缺少的一部分,其中,单元测试是指对软件中的最小可测试单元进行检查和验证。
目前,对Golang语言代码工程中的函数(也可称为待测函数)进行对应的单元测试的过程中,通过人工编写对应的测试用例,实现对目标函数的测试。可是人工编写的测试用例可能会存在不准确等问题,后续基于不准确的测试用例对目标函数进行测试,容易导致测试失败。另外,人工编写测试用例也存在效率较低的问题。因此,如何提高测试用例生成的效率以及准确率,是目前亟需解决的技术问题。
为此,本公开实施例提供了一种测试用例生成方法,首先,获取目标代码工程中的目标函数对应的调用链路图;其中,调用链路图用于表征目标函数在目标代码工程中的函数依赖关系;可基于调用链路图,确定目标函数对应的待模拟函数;并基于预先获取的待模拟函数的出入参数据,生成待模拟函数对应的至少一个模拟代码;然后,基于待模拟函数对应的模拟代码以及目标函数对应的调用链路图,生成目标函数对应的测试用例;其中,测试用例用于对目标函数进行测试。可见,本公开实施例能够基于目标函数对应的待模拟函数和调用链路图,自动化生成目标函数的测试用例,提高了测试用例生成的效率和准确率。
基于此,本公开实施例提供了一种测试用例生成方法,参考图1,为本公开实施例提供的一种测试用例生成方法流程示意图,该方法包括:
S101、获取目标代码工程中的目标函数对应的调用链路图。
其中,调用链路图用于表征目标函数在目标代码工程中的函数依赖关系。
在目标程序的开发过程中,开发人员通常会创建一个工程,在工程中编写用于实现目标程序的业务功能的代码,编写的代码形成代码文件,并以工程的形式组织,该工程也可称为代码工程。
本公开实施例中,目标代码工程可以为预先确定的任意一个代码工程。
本公开实施例中,目标代码工程中可以包括多个函数,目标函数可以为基于测试需求从目标代码工程中的多个函数确定出的任意一个函数。
本公开实施例中,调用链路图用于表征目标函数在目标代码工程中的函数依赖关系,调用链路图中包括目标函数直接依赖和间接依赖的函数。
一种可选的实施方式中,可通过Golang AST(Abstract Syntax Tree,抽象语法树)生成函数调用链路,通过图形化的方式展示目标函数的调用链路图。其中,AST是使用树状结构表示源代码的语法结构,树的每一个节点就代表源代码中的一个结构。本公开实施例中,目标函数的调用链路图中每个节点用于表示一个函数。
本公开实施例中,在对目标函数进行单元测试之前,需要预先生成目标函数的测试用例。而在生成目标函数的测试用例的过程中,首先获取目标代码工程中的目标函数对应的调用链路图。例如,在对函数A进行单元测试,可以通过静态解析的方式对目标代码工程中的函数A对应的代码进行解析,生成函数A对应的调用链路图。
如图2所示,为本公开实施例提供的一种目标函数对应的调用链路图,其中,函数A为目标函数,函数B、函数C、函数D和函数E为目标代码工程中的与函数A具有直接或间接依赖关系的函数。
S102、基于调用链路图,确定目标函数对应的至少一个待模拟函数。
本公开实施例中,模拟测试(又称为mock测试)就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。其中,这个虚拟的对象就是模拟对象(也可称为模拟代码),即模拟对象就是真实对象在测试期间的代替品。
一种可选的实施方式中,在获取目标函数对应的调用链路图之后,对目标函数对应的调用链路图进行展示,并在接收到针对调用链路图中的至少一个函数的选定操作时,将该至少一个函数确定为目标函数对应的待模拟函数,也可以称为待mock函数。
实际应用中,开发人员可以根据测试需求,基于展示的目标函数对应的调用链路图,从调用链路图中选定至少一个函数作为待模拟函数。其中,待模拟函数就可以为调用链路图中不容易构造或者不容易获取的函数。
如上述图2所示,假设函数C或函数D为不容易构造或者不容易获取的对象,例如,因函数C或函数D对外部有依赖导致对目标函数的测试可能存在不稳定的问题,对测试造成干扰。因此,基于目标函数对应的调用链路图,用户可以主动选择函数C和函数D作为函数A对应的待模拟函数,即函数C和函数D为待模拟对象。由于可以人为选择目标函数对应的待模拟函数,提升了待模拟函数确定的灵活性。
另一种可选的实施方式中,可以将调用链路图中满足预设的函数复杂度条件的函数(也可称为复杂函数),确定为目标函数对应的待模拟函数。具体的,可以预先设定函数复杂度条件,并将目标函数的调用链路图中满足预设的函数复杂度条件的函数,确定为目标函数对应的待模拟函数。例如,假设上述图2所示的函数D满足函数复杂度条件,则可以确定函数D为函数A对应的待模拟函数。
实际应用中,预先设定的函数复杂度条件可以包括第一条件、第二条件和第三条件中的至少一种条件,第一条件包括出入参字段的个数达到预设阈值,第二条件包括函数类型属于远程调用函数,第三条件包括函数中包含存储调用等,为了便于描述,以下分别对上述函数复杂度条件进行描述。
由于出入参字段的个数较多的函数,可以被认定为是复杂函数,因此,本公开实施例中将出入参字段的个数达到预设阈值,确定为判定复杂函数的条件。其中,预设阈值可以基于经验和需求设置。例如,假设预设阈值可以为8,函数A的调用链路图中的函数B的出入参字段的个数不小于8,则可以基于上述函数复杂度条件确定函数B为复杂函数,即可以确定函数B为函数A对应的待模拟函数。
实际应用中,相比于从本地直接调用函数,远程调用函数的复杂度更高。因此,本公开实施例中,可以将属于远程调用函数作为复杂函数的判定条件。假设函数A的调用链路图中的函数C属于远程调用函数,则可以确定函数C为复杂函数,即可以确定函数C为函数A对应的待模拟函数。其中,确定一个函数是否属于远程调用函数的方法较多,在此不再赘述。
本公开实施例中,由于包含存储调用的函数的执行对于系统资源消耗较大,因此,可以认定包含存储调用的函数属于复杂函数。本公开实施例将包含存储调用作为复杂函数的判定条件。其中,包含存储调用的函数是指包含访问大型数据库语句的函数,例如,包含访问Redis(Remote Dictionary Server,即远程字典服务)、DB(data base,数据库)或图像数据库等语句的函数。假设函数A的调用链路图中的函数E包含存储调用,则可以确定函数E为复杂函数,即可以确定函数E为函数A对应的待模拟函数。
本公开实施例中,在获取目标函数对应的调用链路图之后,可基于预设的函数复杂度条件,自动化的从目标函数对应的调用链路图中将满足预设的函数复杂度条件的函数,确定为目标函数对应的待模拟函数,提高可确定待模拟函数的效率,进而提高了测试用例的生成效率。
一种可选的实施方式中,可以通过指定调用层级的方式确定目标函数对应的待模拟函数,具体的,可以基于目标函数对应的调用链路图,将调用链路图中处于预设调用层级的函数,确定为目标函数对应的待模拟函数。具体的,根据目标函数对应的调用链路图,可以确定不同函数节点的层级关系。如图2所示,函数A节点属于调用链路图的第一层,函数B节点和函数C节点属于调用链路图的第二层,函数D节点和函数E节点属于调用链路图的第三层。假设预设调用层级是第三层,则可以将函数D和函数E确定为目标函数A对应的待模拟函数。
S103、基于预先获取的待模拟函数的出入参数据,生成待模拟函数对应的模拟代码。
本公开实施例中,待模拟函数的出入参数据包括该待模拟函数的输入参数和输出参数。
一种可选的实施方式中,待模拟函数的出入参数据可以预先存储在数据库中,在测试用例生成的过程中,可基于待模拟函数的标识从数据库中获取待模拟函数的出入参数据,并基于待模拟函数的出入参数据,生成待模拟函数对应的模拟代码,也可以称为mock代码。具体的,获取的待模拟函数的出入参数据的方式可在后续实施例进行描述,在此不再赘述。
例如,假设根据目标函数A的调用链路图,确定了函数C为待模拟函数,可从数据库中获取函数C的出入参数据,并基于函数C的出入参数据,对函数C进行模拟测试,生成函数C对应的模拟代码。其中,函数C对应的模拟代码是真实对象函数C在对目标函数A测试期间的代替品。
S104、基于待模拟函数对应的模拟代码以及目标函数对应的调用链路图,生成目标函数对应的测试用例。
其中,测试用例用于对目标函数进行测试。
本公开实施例中,在生成目标函数对应的待模拟函数的模拟代码之后,基于模拟代码和目标函数对应的调用链路图,生成目标函数的测试代码,作为目标函数的测试用例,用于对目标函数进行测试。
一种可选的实施方式中,本公开实施例提供的测试用例生成方法可以应用于代码开发工具客户端,开发人员在代码开发的过程中,可以基于本公开实施例提供的测试用例生成方法为任一函数生成测试用例,并运行该测试用例实现对该函数的测试。基于该函数的测试结果,开发人员可以及时修改该函数的相关代码,达到边开发边测试的效果,整体上能够提升开发人员的代码开发效率以及准确率,从而节省了后续代码测试人员的成本。
实际应用中,在目标函数对应的测试用例生成之后,可以响应于针对目标函数对应的测试用例的触发操作,运行该测试用例对目标函数进行测试,输出目标函数的测试结果。
本公开提供了一种测试用例生成方法,首先,获取目标代码工程中的目标函数对应的调用链路图;其中,调用链路图用于表征目标函数在目标代码工程中的函数依赖关系;可基于调用链路图,确定目标函数对应的待模拟函数;并基于预先获取的待模拟函数的出入参数据,生成待模拟函数对应的模拟代码;然后,基于待模拟函数对应的模拟代码以及目标函数对应的调用链路图,生成目标函数对应的测试用例;其中,测试用例用于对目标函数进行测试。可见,本公开实施例能够基于目标函数对应的待模拟函数和调用链路图,自动化生成目标函数的测试用例,提高了测试用例生成的效率和准确率。
为了便于对本公开提供的测试用例生成方法进一步理解,在上述实施例的基础上,本公开实施例还提供了另一种测试用例生成方法,参考图3,为本公开实施例提供的一种测试用例生成方法执行过程示意图。
本公开实施例中,基于测试需求,可以预先在目标代码工程中对函数进行插桩(也可称为打桩),在目标代码工程运行的过程中,对已插桩函数的出入参数据进行录制,录制得到的出入参数据可以用于测试用例的生成。
一种可选的实施方式中,可以预先确定待模拟函数,并通过Golang AST在目标代码工程中对该待模拟函数进行插桩,以便在目标代码工程的运行过程中,能够对已插桩的待模拟函数的出入参数据进行录制,从而获得用于对待模拟函数进行模拟所需的出入参数据。
另一种可选的实施方式中,在无法确定待模拟函数的情况下,可以预先通过Golang AST对目标代码工程中的全量函数进行插桩,并对已插桩函数的出入参数据进行录制,以及将录制得到的出入参数据与已插桩函数的对应关系存储于预设存储空间,以便后续用于生成测试用例。
本公开实施例中,对于录制得到的已插桩函数的出入参数据,可以存储于预设存储空间中,具体的,将已插桩函数与出入参数据对应存储于预设存储空间中。如图3所示,一种可选的实施方式中,可以将待模拟函数和该待模拟函数对应的出入参数据存储在预设存储空间中,其中,预设存储空间可以是任意一种类型的数据库,例如,上文提到DB数据库等。
一种可选的实施例中,在确定目标函数对应的待模拟函数之后,可从预设存储空间中获取待模拟函数对应的出入参数据;并基于待模拟函数对应的出入参数据,生成待模拟函数对应的模拟代码。
如图3所示,客户端在确定目标函数对应的待模拟函数之后,可以自动化的从数据库中获取待模拟函数的出入参数据,具体的,客户端可以基于待模拟函数的标识从数据库中获取该标识对应的待模拟函数对应的出入参数据;客户端可基于待模拟函数的出入参数据,自动化的生成待模拟函数对应的模拟代码,并可基于待模拟函数对应的模拟代码以及目标函数对应的调用链路图,生成目标函数对应的测试用例。后续基于该测试用例可以对目标工程代码中的目标函数进行测试,确定目标函数是否存在异常。
另一种可选的实施方式中,可随机生成待模拟函数对应的出入参数据,并基于该待模拟函数对应的随机生成的出入参数据,生成待模拟函数对应的模拟代码。这种情况下,在基于模拟代码和目标函数的调用链路图生成测试用例之后,开发人员需要将测试用例的代码中随机生成的出入参数据修改为真实的出入参数据,以得到能够对目标函数进行有效测试的测试用例。
本公开提供了一种测试用例生成方法,首先,获取目标代码工程中的目标函数对应的调用链路图;可基于调用链路图,确定目标函数对应的待模拟函数;在目标代码工程运行的过程中,对已插桩函数的出入参数据进行录制;将已插桩函数与出入参数据存储于预设存储空间中;从预设存储空间中获取待模拟函数对应的出入参数据;基于待模拟函数对应的出入参数据,生成待模拟函数对应的模拟代码,然后,基于待模拟函数对应的模拟代码以及目标函数对应的调用链路图,生成目标函数对应的测试用例。可见,本公开实施例可以预先对待模拟函数的出入参数据进行录制,并基于录制得到的出入参数据生成待模拟函数对应的模拟代码,进而自动化的生成目标函数对应的测试用例,可见,本公开实施例自动化生成目标函数的测试用例,提高了测试用例生成的效率和准确率。
与上述实施例基于同一个发明构思,本公开实施例还提供了一种测试用例生成装置,参考图4,为本公开实施例提供的一种测试用例生成装置的结构示意图,该装置包括:
获取模块401,用于获取目标代码工程中的目标函数对应的调用链路图;其中,调用链路图用于表征目标函数在目标代码工程中的函数依赖关系;
确定模块402,用于基于调用链路图,确定目标函数对应的至少一个待模拟函数;
第一生成模块403,用于基于预先获取的待模拟函数的出入参数据,生成待模拟函数对应的模拟代码;
第二生成模块404,用于基于待模拟函数对应的模拟代码以及目标函数对应的调用链路图,生成目标函数对应的测试用例;其中,测试用例用于对目标函数进行测试。
一种可选的实施方式中,该装置还包括:
展示模块,用于对目标函数对应的调用链路图进行展示;
相应的,确定模块,包括:
选定子模块,用于响应于针对调用链路图中的至少一个函数的选定操作,将至少一个函数确定为目标函数对应的待模拟函数。
一种可选的实施方式中,确定模块,还包括:
第一确定子模块,用于将调用链路图中满足预设的函数复杂度条件的函数,确定为目标函数对应的待模拟函数;其中,所述函数复杂度条件包括第一条件、第二条件和第三条件中的至少一种条件,所述第一条件包括出入参字段的个数达到预设阈值,所述第二条件包括函数类型属于远程调用函数,所述第三条件包括函数中包含存储调用。
一种可选的实施方式中,确定模块,还包括:
第二确定子模块,用于将调用链路图中处于预设调用层级的函数,确定为目标函数对应的待模拟函数。
一种可选的实施方式中,该装置,还包括:
录制模块,用于在目标代码工程运行的过程中,对已插桩函数的出入参数据进行录制;
存储模块,用于将已插桩函数与出入参数据存储于预设存储空间中;
相应的,第一生成模块,包括:
获取子模块,用于从预设存储空间中获取待模拟函数对应的出入参数据;
第一生成子模块,用于基于待模拟函数对应的出入参数据,生成待模拟函数对应的模拟代码。
一种可选的实施方式中,第一生成模块,还包括:
第二生成子模块,用于随机生成待模拟函数对应的出入参数据;
第三生成子模块,用于基于待模拟函数对应的出入参数据,生成待模拟函数对应的模拟代码。
一种可选的实施方式中,该装置,还包括:
输出模块,用于响应于针对目标函数对应的测试用例的触发操作,运行测试用例,输出目标函数的测试结果。
本公开实施例提供了一种测试用例生成装置,首先,获取目标代码工程中的目标函数对应的调用链路图;其中,调用链路图用于表征目标函数在目标代码工程中的函数依赖关系;可基于调用链路图,确定目标函数对应的待模拟函数;并基于预先获取的待模拟函数的出入参数据,生成待模拟函数对应的模拟代码;然后,基于待模拟函数对应的模拟代码以及目标函数对应的调用链路图,生成目标函数对应的测试用例;其中,测试用例用于对目标函数进行测试。可见,本公开实施例能够基于目标函数对应的待模拟函数和调用链路图,自动化生成目标函数的测试用例,提高了测试用例生成的效率。
除了上述方法和装置以外,本公开实施例还提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当指令在终端设备上运行时,使得终端设备实现本公开实施例的测试用例生成方法。
本公开实施例还提供了一种计算机程序产品,计算机程序产品包括计算机程序/指令,计算机程序/指令被处理器执行时实现本公开实施例的测试用例生成方法。
另外,本公开实施例还提供了一种测试用例生成设备,参见图5所示,图5为本公开实施例提供的一种测试用例生成设备的结构示意图,包括:
处理器501、存储器502、输入装置503和输出装置504。测试用例生成设备中的处理器501的数量可以一个或多个,图5中以一个处理器为例。在本公开的一些实施例中,处理器501、存储器502、输入装置503和输出装置504可通过总线或其它方式连接,其中,图5中以通过总线连接为例。
存储器502可用于存储软件程序以及模块,处理器501通过运行存储在存储器502的软件程序以及模块,从而执行测试用例生成设备的各种功能应用以及数据处理。存储器502可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等。此外,存储器502可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。输入装置503可用于接收输入的数字或字符信息,以及产生与测试用例生成设备的用户设置以及功能控制有关的信号输入。
具体在本实施例中,处理器501会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器502中,并由处理器501来运行存储在存储器502中的应用程序,从而实现上述测试用例生成设备的各种功能。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (11)
1.一种测试用例生成方法,其特征在于,所述方法包括:
获取目标代码工程中的目标函数对应的调用链路图;其中,所述调用链路图用于表征所述目标函数在所述目标代码工程中的函数依赖关系;
基于所述调用链路图,确定所述目标函数对应的至少一个待模拟函数;
基于预先获取的所述待模拟函数的出入参数据,生成所述待模拟函数对应的模拟代码;
基于所述待模拟函数对应的模拟代码以及所述目标函数对应的调用链路图,生成所述目标函数对应的测试用例;其中,所述测试用例用于对所述目标函数进行测试。
2.根据权利要求1所述的方法,其特征在于,所述基于所述调用链路图,确定所述目标函数对应的至少一个待模拟函数之前,还包括:
对所述目标函数对应的调用链路图进行展示;
相应的,所述基于所述调用链路图,确定所述目标函数对应的至少一个待模拟函数,包括:
响应于针对所述调用链路图中的至少一个函数的选定操作,将所述至少一个函数确定为所述目标函数对应的待模拟函数。
3.根据权利要求1所述的方法,其特征在于,所述基于所述调用链路图,确定所述目标函数对应的至少一个待模拟函数,包括:
将所述调用链路图中满足预设的函数复杂度条件的至少一个函数,确定为所述目标函数对应的待模拟函数;其中,所述函数复杂度条件包括第一条件、第二条件和第三条件中的至少一种条件,所述第一条件包括出入参字段的个数达到预设阈值,所述第二条件包括函数类型属于远程调用函数,所述第三条件包括函数中包含存储调用。
4.根据权利要求1所述的方法,其特征在于,所述基于所述调用链路图,确定所述目标函数对应的至少一个待模拟函数,包括:
将所述调用链路图中处于预设调用层级的至少一个函数,确定为所述目标函数对应的待模拟函数。
5.根据权利要求1所述的方法,其特征在于,所述基于预先获取的所述待模拟函数的出入参数据,生成所述待模拟函数对应的模拟代码之前,还包括:
在所述目标代码工程运行的过程中,对已插桩函数的出入参数据进行录制;
将所述已插桩函数与所述出入参数据存储于预设存储空间中;
相应的,所述基于预先获取的所述待模拟函数的出入参数据,生成所述待模拟函数对应的模拟代码,包括:
从所述预设存储空间中获取所述待模拟函数对应的出入参数据;
基于所述待模拟函数对应的出入参数据,生成所述待模拟函数对应的模拟代码。
6.根据权利要求1所述的方法,其特征在于,所述基于预先获取的所述待模拟函数的出入参数据,生成所述待模拟函数对应的模拟代码,包括:
随机生成所述待模拟函数对应的出入参数据;
基于所述待模拟函数对应的出入参数据,生成所述待模拟函数对应的模拟代码。
7.根据权利要求1所述的方法,其特征在于,所述基于所述待模拟函数对应的模拟代码以及所述目标函数对应的调用链路图,生成所述目标函数对应的测试用例之后,还包括:
响应于针对所述目标函数对应的测试用例的触发操作,运行所述测试用例,输出所述目标函数的测试结果。
8.一种测试用例生成装置,其特征在于,所述装置包括:
获取模块,用于获取目标代码工程中的目标函数对应的调用链路图;其中,所述调用链路图用于表征所述目标函数在所述目标代码工程中的函数依赖关系;
确定模块,用于基于所述调用链路图,确定所述目标函数对应的至少一个待模拟函数;
第一生成模块,用于基于预先获取的所述待模拟函数的出入参数据,生成所述待模拟函数对应的模拟代码;
第二生成模块,用于基于所述待模拟函数对应的模拟代码以及所述目标函数对应的调用链路图,生成所述目标函数对应的测试用例;其中,所述测试用例用于对所述目标函数进行测试。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备实现如权利要求1-7任一项所述的方法。
10.一种设备,其特征在于,包括:存储器,处理器,及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1-7任一项所述的方法。
11.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现如权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111668169.0A CN116414678A (zh) | 2021-12-31 | 2021-12-31 | 一种测试用例生成方法、装置、设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111668169.0A CN116414678A (zh) | 2021-12-31 | 2021-12-31 | 一种测试用例生成方法、装置、设备以及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116414678A true CN116414678A (zh) | 2023-07-11 |
Family
ID=87049965
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111668169.0A Pending CN116414678A (zh) | 2021-12-31 | 2021-12-31 | 一种测试用例生成方法、装置、设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116414678A (zh) |
-
2021
- 2021-12-31 CN CN202111668169.0A patent/CN116414678A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10671516B2 (en) | Method, device, and computer program product for testing code | |
US10127141B2 (en) | Electronic technology resource evaluation system | |
CN110008113B (zh) | 一种测试方法、装置、电子设备 | |
CN110716870B (zh) | 服务的自动化测试方法及装置 | |
CN109634869B (zh) | 二进制翻译中间表示正确性测试方法及装置 | |
US10089218B2 (en) | Methods circuits apparatuses systems and associated computer executable code for generating a software unit test | |
Shahriar et al. | Testing of memory leak in android applications | |
CN111382070A (zh) | 兼容性测试方法、装置、存储介质和计算机设备 | |
US9396097B2 (en) | Methods, circuits, devices, systems and associated computer executable code for testing software code | |
CN113127347A (zh) | 一种接口测试方法、装置、设备及可读存储介质 | |
CN112052172A (zh) | 第三方通道的快速测试方法、装置和电子设备 | |
KR101334806B1 (ko) | 테스트 케이스 자동 생성 시스템에서 테스트 케이스를 구성하는 입력값의 집합을 자동으로 산출하는 방법 | |
US11422917B2 (en) | Deriving software application dependency trees for white-box testing | |
EP3734460B1 (en) | Probabilistic software testing via dynamic graphs | |
CN117493188A (zh) | 接口测试方法及装置、电子设备及存储介质 | |
CN116893960A (zh) | 代码质量检测方法、装置、计算机设备和存储介质 | |
CN116662203A (zh) | 测试方法、装置、计算机设备及存储介质 | |
CN116841543A (zh) | 基于Flutter动态生成跨平台多端应用的开发方法 | |
CN116414678A (zh) | 一种测试用例生成方法、装置、设备以及存储介质 | |
CN116016270A (zh) | 一种交换机测试管理方法、装置、电子设备和存储介质 | |
Winzinger et al. | Automatic test case generation for serverless applications | |
CN113220586A (zh) | 一种自动化的接口压力测试执行方法、装置和系统 | |
CN109446091B (zh) | 业务实体对象测试方法及装置 | |
CN113392003A (zh) | 编程代码的评价方法及装置 | |
CN113031964A (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 |