CN111611152B - 测试用例生成方法、装置、电子设备及可读存储介质 - Google Patents
测试用例生成方法、装置、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN111611152B CN111611152B CN201910138869.5A CN201910138869A CN111611152B CN 111611152 B CN111611152 B CN 111611152B CN 201910138869 A CN201910138869 A CN 201910138869A CN 111611152 B CN111611152 B CN 111611152B
- Authority
- CN
- China
- Prior art keywords
- test case
- function
- value
- variable
- preset interface
- 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
Links
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/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- 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)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供了一种测试用例生成方法、装置、电子设备及可读存储介质,所述方法包括:获取变量集合中的第n个变量;根据第n个变量的取值获得预设接口函数的输入值,第n个变量的取值与预设接口函数具有依赖关系;依赖关系为第n个变量的取值与预设接口函数之间的函数调用流程中输入值与输出值的对应关系;将预设接口函数的输入值作为第n个变量的取值对应的第一测试用例;基于n的取值,重复根据第n个变量的取值获得所述预设接口函数的输入值的步骤,得到第一测试用例集,本申请实施例通过获取函数的输入值与输出值之间的关系,确定出变量依赖的函数的输入值,最终得到对应的测试用例,提高了测试用例生成的效率。
Description
技术领域
本申请涉及测试技术领域,具体而言,涉及一种测试用例生成方法、装置、电子设备及可读存储介质。
背景技术
目前,软件产品测试成本占整个开发成本30%~40%,而测试用例设计占整个测试周期的30%左右,在实际测试过程中,这部分工作都是由测试人员手工完成,人力成本较高。
为了降低人力成本,现有技术中通常使用测试用例生成工具,来辅助测试工作。但是,现有的测试用例生成工具在构建测试用例过程中,其运算量依然很大,降低了测试用例生成的效率。
发明内容
有鉴于此,本申请实施例的目的在于提供一种测试用例生成方法、装置、电子设备及可读存储介质,能够在分析变量取值过程中,通过获取函数的输入值与输出值之间的关系,确定出变量依赖的函数的输入值,最终得到对应的测试用例,提高了测试用例生成的效率。
第一方面,本申请实施例提供了一种测试用例生成方法,所述方法包括:获取变量集合中的第n个变量,其中,n为大于0的整数;根据所述第n个变量的取值获得预设接口函数的输入值,所述第n个变量的取值与所述预设接口函数具有依赖关系;所述依赖关系为所述第n个变量的取值与所述预设接口函数之间的函数调用流程中输入值与输出值的对应关系;将所述预设接口函数的输入值作为第n个变量的取值对应的第一测试用例;基于所述n的取值,重复根据第n个变量的取值获得所述预设接口函数的输入值的步骤,得到第一测试用例集,其中,所述第一测试用例集包括所述变量集合中每一个变量对应的第一测试用例。
在本发明较佳的实施例中,所述函数调用流程包括中间函数,所述中间函数由所述预设接口函数调用,所述依赖关系包括第一中间依赖关系及第二中间依赖关系,所述根据所述第n个变量获得预设接口函数的输入值的步骤,包括:根据所述第n个变量的取值获得所述中间函数的输入值,所述第n个变量与所述中间函数具有第一中间依赖关系;所述第一中间依赖关系包括所述中间函数的输入值与所述中间函数的输出值的对应关系;依据所述中间函数的输入值获得所述预设接口函数的输入值,所述中间函数的输入值与所述预设接口函数具有第二中间依赖关系,所述第二中间依赖关系包括所述预设接口函数的输入值与所述预设接口函数的输出值的对应关系。
在本发明较佳的实施例中,一种可以实施的获取变量集合方式为:解析源代码中函数调用流程得到所述变量集合,具体步骤包括:解析源代码中函数调用流程得到控制图,其中,所述控制图中的节点包括判定条件;遍历所述控制图中每一个节点,获取所述每一个节点的判定条件中的变量;将多个所述变量组成所述变量集合,其中,解析源代码中函数调用流程得到控制图的步骤的具体子步骤包括:对所述源代码进行语法分析,得到抽象语法树;依据所述抽象语法树中函数之间的调用关系生成函数调用流程;依次提取函数调用流中每个函数中的判定条件及对应的分支语句;以所述判定条件为节点、以对应的分支语句为边生成所述控制图。
在本发明较佳的实施例中,生成第一测试用例后,为了达到提高测试用例执行的效率,需要对每一个变量对应的第一测试用例进行执行,以覆盖对应的源代码,执行第一测试用例的具体步骤为:执行与所述第n个变量对应的第一测试用例,以覆盖对应的源代码。
在本发明较佳的实施例中,由于源代码中每个函数的使用频率不同,为了提高测试用例生成效率,可以只对使用频率高的函数依据该函数的输入值和输出值之间的关系确定该函数的输入值,在这种场景下,第一测试用例集只能覆盖部分场景,为了使测试用例能覆盖到更全面的场景,本发明还提供了一种可以实施的方式以生成第二测试用例集,和第一测试用例集互为补充,作为一种可以实施的生成第二测试用例集的方式,其步骤包括:依据所述预设接口函数的入参的取值范围,对所述预设接口函数的入参的取值进行正交组合,得到第二测试用例集,其中,所述第二测试用例集中每一个测试用例对应每一个正交组合的入参的取值。
在本发明较佳的实施例中,可以将第一测试用例集和第二测试用例集综合起来得到场景覆盖较全面的测试用例合集,其步骤为:依据所述第一测试用例集及所述第二测试用例集生成测试用例合集。
在本发明较佳的实施例中,由于第一测试用例集和第二测试用例集中的用例可能会重复覆盖相同的分支,因此为了避免相同的测试用例重复执行,影响测试用例执行的效率,本发明还提供一种对第一测试用例集和第二测试用例集中重复的测试用例进行去重得到测试用例合集的方法,该方法具体包括步骤:将所述第一测试用例集及所述第二测试用例集合并成初始合集;对所述初始合集中覆盖相同代码路径的测试用例进行去重,得到测试用例合集,作为一种对第一测试用例集和第二测试用例集中重复的测试用例进行去重的实施方式,其具体子步骤可以是:依次从所述初始合集取出并执行当前测试用例,标记出所述当前测试用例覆盖的当前代码路径;当所述当前代码路径为初始合集中已经执行的测试用例的覆盖的代码路径的子集时,将所述当前测试用例从所述初始合集中移除。
第二方面,本申请实施例提供了一种测试用例生成装置,所述装置包括:初始模块,用于获取变量集合中的第n个变量,其中,n为大于0的整数;分析模块,用于根据所述第n个变量的取值获得预设接口函数的输入值,所述第n个变量的取值与所述预设接口函数具有依赖关系;所述依赖关系为所述第n个变量的取值与所述预设接口函数之间的函数调用流程中输入值与输出值的对应关系;第一用例生成模块,用于将所述预设接口函数的输入值作为第n个变量的取值对应的第一测试用例;第一用例集生成模块,用于基于所述n的取值,重复根据第n个变量的取值获得所述预设接口函数的输入值的步骤,得到第一测试用例集,其中,所述第一测试用例集包括所述变量集合中每一个变量对应的第一测试用例。
在本发明较佳的实施例中,函数调用流程包括中间函数,所述中间函数由所述预设接口函数调用,所述依赖关系包括第一中间依赖关系及第二中间依赖关系,所述分析模块具体用于:根据所述第n个变量的取值获得所述中间函数的输入值,所述第n个变量与所述中间函数具有第一中间依赖关系;所述第一中间依赖关系包括所述中间函数的输入值与所述中间函数的输出值的对应关系;依据所述中间函数的输入值获得所述预设接口函数的输入值,所述中间函数的输入值与所述预设接口函数具有第二中间依赖关系,所述第二中间依赖关系包括所述预设接口函数的输入值与所述预设接口函数的输出值的对应关系。
在本发明较佳的实施例中,所述测试用例生成装置还包括变量集合生成模块,变量集合生成模块用于解析源代码中函数调用流程得到所述变量集合。
在本发明较佳的实施例中,变量集合生成模块包括:解析单元,用于解析源代码中函数调用流程得到控制图,其中,所述控制图中的节点包括判定条件;遍历单元,用于遍历所述控制图中每一个节点,获取所述每一个节点的判定条件中的变量;组成单元,用于将多个所述变量组成所述变量集合。
在本发明较佳的实施例中,解析单元具体用于:对所述源代码进行语法分析,得到抽象语法树;依据所述抽象语法树中函数之间的调用关系生成函数调用流程;依次提取函数调用流中每个函数中的判定条件及对应的分支语句;以所述判定条件为节点、以对应的分支语句为边生成所述控制图。
在本发明较佳的实施例中,所述测试用例生成装置还包括:执行模块,用于执行与所述第n个变量对应的第一测试用例,以覆盖对应的源代码。
在本发明较佳的实施例中,所述测试用例生成装置还包括:第二用例集生成模块,用于依据所述预设接口函数的入参的取值范围,对所述预设接口函数的入参的取值进行正交组合,得到第二测试用例集,其中,所述第二测试用例集中每一个测试用例对应每一个正交组合的入参的取值。
在本发明较佳的实施例中,所述测试用例生成装置还包括:测试用例合集生成模块,用于依据所述第一测试用例集及所述第二测试用例集生成测试用例合集。
在本发明较佳的实施例中,所述测试用例合集生成模块包括:合并单元,用于将所述第一测试用例集及所述第二测试用例集合并成初始合集;去重单元,用于对所述初始合集中覆盖相同代码路径的测试用例进行去重,得到测试用例合集。
在本发明较佳的实施例中,所述去重单元具体用于:依次从所述初始合集取出并执行当前测试用例,标记出所述当前测试用例覆盖的当前代码路径;当所述当前代码路径为初始合集中已经执行的测试用例的覆盖的代码路径的子集时,将所述当前测试用例从所述初始合集中移除。
第三方面,本申请实施例还提供了一种电子设备,包括:处理器和存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面的实施例中的步骤。
第四方面,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面的实施例中的步骤。
采用上述方案,在分析变量取值过程中,通过获取函数的输入值与输出值之间的关系,确定变量依赖的函数的输入值,最终得到对应预设接口函数的输入值,将对应预设接口函数的输入值作为对应的测试用例,由于确定变量依赖的函数的输入值可以通过函数的输入值与输出值之间的关系直接推导得到,无需进行复杂的算法运算,因而大大地提高了测试用例生成的效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请实施例所提供的一种测试用例生成方法的流程图;
图2为图1示出的步骤S201的子步骤流程图;
图3示出了本申请实施例所提供的控制图的示例图;
图4为图1示出的步骤S203的子步骤流程图;
图5示出了本申请实施例所提供的另一种测试用例生成方法的流程图;
图6为图5示出的步骤S402的子步骤流程图;
图7示出了本申请实施例所提供的一种测试用例生成装置的结构示意图;
图8为图7示出的变量集合生成模块的结构示意图;
图9为图7示出的测试用例合集生成模块的结构示意图;
图10示出了本申请实施例所提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
在计算机领域,源代码可以由任何一种计算机编程语言实现,对于存在函数语句的计算机编程语言或者存在与函数功能等同的计算机编程语言实现的源代码,均可使用本申请提供的测试用例生成方法、装置、电子设备,例如,Go语言、C++语言、Python语言、Java语言等,因此,本申请实施例并不对具体的源代码的语言作限制,任何使用本申请实施例提供的方法均在本申请保护范围内。下面通过具体实施例进行详细描述。
实施例一
本实施例提供了一种测试用例生成方法,如图1所示的测试用例生成方法的流程图,该方法包括以下步骤:
步骤S201,解析源代码中函数调用流程得到变量集合。
在本发明实施例中,首先解析源代码,得到函数调用流程,然后获取函数调用流程中的每一个判断条件分支中的变量,所有判断条件分支中的变量及对应的变量的取值组成变量集合,作为一种实现方式,如图2,步骤S201可以包括以下子步骤:
子步骤S2011,解析源代码中函数调用流程得到控制图,其中,控制图中的节点包括判定条件;
在本发明实施例中,函数调用流程表征函数之间的调用关系及调用顺序,依据函数的调用关系及调用顺序可以确定函数的执行顺序,例如,函数A和函数B顺序执行,函数A调用函数C,则函数的执行顺序可以表示为:A->C->B,意思是,先执行函数A、再执行函数C、最后执行函数B,控制图是一个以判定条件为节点、以对应的分支语句为边组成的图,可以表征源代码中代码执行的流向,控制图中的所有节点组成了源代码中代码执行的流向有分支的场景。
在本发明实施例中,作为一种具体实施方式,得到控制图可以通过以下方式实现:
首先,对源代码进行语法分析,得到抽象语法树;
在本发明实施例中,抽象语法树AST(Abstract Syntax Tree,AST)是编程语言的源代码的抽象语法结构的树状表现形式,抽象语法树的结构不依赖于源语言的文法,也就是语法分析阶段所采用的上下文无关文法,通常来讲,大多数编程语言都有对自己的语法分析器,可以对自己语言的源代码进行语法分析,得到抽象语法树。
其次,依据抽象语法树中函数之间的调用关系生成函数调用流程;
再次,依次提取函数调用流中每个函数中的判定条件及对应的分支语句;
最后,以判定条件为节点、以对应的分支语句为边生成控制图。
在本发明实施例中,例如,源代码如下:
函数执行顺序为:A->B->C->D,表示:函数A执行完后执行函数B,函数B执行完后执行函数C,函数C执行完后执行函数D,则对应的控制图如图3所示,图3中,控制图一共有4个节点,分别对应图3中的4个椭圆框:条件1、条件3、条件2、条件4,每个条件对应条件成立和条件不成立两个分支,矩形框中是节点之间的语句,例如,语句1是位于条件1与条件2之间的语句、语句2是位于条件2与条件4之间的语句、语句3是位于条件3与条件2之间的语句、语句4是位于条件4与结束点之间的语句。
子步骤S2012,遍历控制图中每一个节点,获取每一个节点的判定条件中的变量;
在本发明实施例中,每一个节点包括一个判定条件,判定条件中可以包括变量、常量或者函数赋值等,将判定条件中的变量筛选出来,组成变量集合,例如,源代码采用Go语言编写,判断条件代码如下:
其中,判断条件为if a>40,a为变量,40为常量。
子步骤S2013,将多个变量组成变量集合。
需要说明的是,本发明实施例中的步骤S201及其子步骤S2011-S2013可以在步骤S202执行之前预先执行以得到变量集合,变量集合代表了源文件需要测试的判定分支对应的变量的取值,生成了变量集合中的变量对应的测试用例,运行这些用例即可覆盖源文件中的需要测试的判定分支。
还需要说明的是,步骤S201的子步骤S2011-S2013只是生成变量集合的一种具体实施方式,并不代表只有这一种实施方式,例如,解析源代码可以通过对源代码进行分析,此时,即使源代码中有语法错误,头文件不全也照样可以分析出大致的函数调用流程,解析源代码还可以基于编译器的分析法,此时对源代码要求要高一些,至少能编译通过,不一定要链接得到可执行文件,要求源代码没有语法错误,其中调用的函数只要不涉及判定分支的,可以只有声明,没有定义,函数调用流程图可以使用Doxygen、GNU cflow,egypt等工具来生成。
步骤S202,获取变量集合中的第n个变量,其中,n为大于0的整数。
在本发明实施例中,变量集合包括多个变量及变量的取值,每一个变量来自于源代码中影响代码流向的函数调用代码、判断条件代码、循环条件代码等,当变量来自于判断条件代码或者循环条件代码时,均对应两种场景:满足判断条件或者循环条件和不满足判断条件或者循环条件,每个判定条件对应2种场景:判定条件成立和判定条件不成立,判定条件中可以包括至少一个变量,将判定条件中的变量筛选出来,组成变量集合。两种场景下变量的取值是不同的,因此,变量集合中的每个变量的取值可以有2个,例如,源代码采用Go语言编写,判断条件代码如下:
其中,判断条件为if a>40,a为变量,a的取值可以有2个,比如a为50,对应判断条件成立的情况,a为20,对应判断条件不成立的情况。
在本发明实施例中,同一个变量取不同值对应不同的测试用例,覆盖同一个判断条件的不同分支。
步骤S203,根据第n个变量的取值获得预设接口函数的输入值,第n个变量的取值与预设接口函数具有依赖关系;依赖关系为第n个变量的取值与预设接口函数之间的函数调用流程中输入值与输出值的对应关系。
在本发明实施例中,预设接口函数为执行测试用例的入口函数,测试用例为预设接口函数的输入参数的不同取值。第n个变量的取值可以对应一个判定条件的一个分支,依据第n个变量的取值与预设接口函数的依赖关系即可获取与第n个变量的取值对应的预设接口函数的输入值。
需要说明的是,依赖关系可以是直接函数依赖关系,即第n个变量的取值和预设接口函数的输入值之间只存在预设接口函数,也可以是间接函数依赖关系,即第n个变量的取值和预设接口函数的输入值之间除了存在预设接口函数,还存在至少一个中间函数,最终推导出对应的预设接口函数的输入值。
当依赖关系为直接函数依赖关系时,此时依赖关系包括预设接口函数的输入值与预设接口函数的输出值的对应关系,其中,预设接口函数的输入值可以是预设接口函数的输入参数的取值,预设接口函数的输出值可以是预设接口函数的输出参数的值,或者预设接口函数的返回值等,第n个变量的取值直接依赖预设接口函数,此时,可以首先根据第n个变量的取值确定预设接口函数的输出值,然后依据依赖关系,推导出对应的预设接口函数的输入值。例如,第n个变量为a,其取值为10,a=fun1(x),在fun1函数中,存在语句:if(x>100)return 10,代表的含义为:如果fun1函数的入参x大于100,则fun1函数返回10,变量a的值为fun1函数的返回值,因此,可以推导出fun1函数的输出值为10,根据fun1函数的输入值与输出值的对应关系:fun1函数的入参x大于100,则fun1函数返回10,可以推导出fun1的输入值大于100,可以取111。
当依赖关系为间接函数依赖关系时,此时依赖关系除了包括预设接口函数的输入值与预设接口函数的输出值的对应关系,还包括中间函数的输入值与中间函数的输出值的对应关系,因此,请参照图4,步骤S203还包括以下子步骤:
子步骤S2031,根据第n个变量的取值获得中间函数的输入值,第n个变量与中间函数具有第一中间依赖关系;第一中间依赖关系包括中间函数的输入值与中间函数的输出值的对应关系;
在本发明实施例中,首先根据第n个变量的取值获得中间函数的输入值,然后根据中间函数的输入值得到预设接口函数的输入值,其中,中间函数的输入值可以是中间函数的输入参数的取值,中间函数的输出值可以是中间函数的输出参数的值或者中间函数的返回值,中间函数可以是一个,也可以是多个,当中间函数为一个时,第一中间依赖关系包括一个中间函数的输入值与中间函数的输出值的对应关系,当中间函数为多个时,第一中间依赖关系包括多个中间函数的输入值与对应的中间函数的输出值的对应关系,多个中间函数之间为依次调用关系,依据多个中间函数的依次调用关系确定多个中间函数的执行顺序,依据中间函数的执行顺序的逆序,依据当前中间函数的输出值推导出当前中间函数的调用者的输入值,直到得到最后一个中间函数的输入值。当中间函数有一个时,第n个变量依赖中间函数,中间函数被预设接口函数调用,首先,依据第n个变量的取值确定其依赖的中间函数的输出值,依据中间函数的输入值与输出值的关系再确定中间函数的输入值,依据中间函数的输入值确定预设接口函数的输出值,最后依据预设接口函数的输入值与输出值的关系确定预设接口函数的输入值,该预设接口函数的输入值即为第一测试用例。当中间函数有多个时,例如,中间函数有3个:A、B、C,执行顺序为A->B->C,表示:函数A执行完后执行函数B,函数B执行完后执行函数C,第一中间依赖关系中包括:函数A的输入值与函数A的输出值的对应关系;函数B的输入值与函数B的输出值的对应关系;函数C的输入值与函数C的输出值的对应关系,首先,根据第n个变量的取值确定函数C的输出值,具体获取过程同步骤S203,然后,依据函数C的输入值与函数C的输出值的对应关系获取函数C的输入值,第三,根据函数C的输入值确定函数B的输出值,依据函数B的输入值与函数B的输出值的对应关系获取函数B的输入值,直到获取函数A的输入值。
子步骤S2032,依据中间函数的输入值获得预设接口函数的输入值,中间函数的输入值与预设接口函数具有第二中间依赖关系,第二中间依赖关系包括预设接口函数的输入值与预设接口函数的输出值的对应关系。
在本发明实施例中,依据中间函数的输入值获取预设接口函数的输入值的步骤同上文所述,例如,中间函数有2个:A、B,函数A调用函数B,预设接口函数为C,函数C调用函数A,则函数A、B、C的执行顺序为C->A->B,第一中间依赖关系中包括:函数A的输入值与函数A的输出值的对应关系;函数B的输入值与函数B的输出值的对应关系;第二中间依赖关系中包括函数C的输入值与函数C的输出值的对应关系,首先,根据第n个变量的取值确定函数B的输出值,依据函数B的输入值与函数B的输出值的对应关系获取函数B的输入值,然后,依据函数B的输入值确定函数A的输出值,依据获取函数A的输出值、函数A的输入值与输出值的关系确定函数A的输入值,依据函数A的输入值确定函数C的输出值,最后,依据函数C的输入值与函数C的输出值的对应关系获取函数C的输入值,函数C的输入值即为第一测试用例。
还需要说明的是,本发明实施例中说明了第n个变量的取值存在和中间函数或预设接口函数的依赖关系,并不代表实际场景中第n个变量的取值只和中间函数或预设接口函数存在依赖关系,第n个变量的取值还可以是算式的结果、字符串的计算结果或者表达式的赋值等,而这种情况下,可以根据惯用手段直接推导出第n个变量依赖的其他变量的值即可,例如,a=b+10;b=fun1(x),fun1为预设接口函数,此时,虽然b的值为fun1的返回值,a是通过b的算式计算得到的,但是,a和fun1函数的输入值之间不存在中间函数,只存在一个预设接口函数,因此a和fun1函数为直接函数依赖关系。
还需要说明的是,可以将所有中间函数的输入值与中间函数的输出值的对应关系及预设接口函数的输入值与预设接口函数的输出值的对应关系统一放在规则库中,用户可以依据自己的需求,向规则库中增加函数的输入值与输出值的对应关系,也可以减少函数的输入值与输出值的对应关系,由此,可以增加对实际场景适应的灵活度。
步骤S204,将预设接口函数的输入值作为第n个变量的取值对应的第一测试用例。
在本发明实施例中,当第n个变量的取值是根据控制图中的对应节点的判定条件的成立时确定的,与第n个变量的取值对应的第一测试用例可以覆盖到对应节点的判定条件成立的情况,当第n个变量的取值是根据控制图中的对应节点的判定条件的不成立时确定的,与第n个变量的取值对应的第一测试用例可以覆盖到对应节点的判定条件不成立的情况。
步骤S205,基于n的取值,重复根据第n个变量的取值获得预设接口函数的输入值的步骤,得到第一测试用例集,其中,第一测试用例集包括变量集合中每一个变量对应的第一测试用例。
在本发明实施例中,需要遍历集合中每一个变量,并且每一个变量均可以取2个值:对应判定条件成立的值及对应判定条件不成立的值。
步骤S206,执行与第n个变量对应的第一测试用例,以覆盖对应的源代码。
在本发明实施例中,由于第n个变量的取值是依据判定条件确定的,因此,不管对于源代码中的分支语句还是循环语句,都只涉及对应的判定条件成立和不成立的情况,分别对应两个不同的测试用例,每个测试用例执行时覆盖对应的判定分支,特别是对于循环语句来说,由于不需要在一个测试用例中穷尽循环语句的所有循环次数,才能测试到循环语句涉及的循环条件成立和循环条件不成立两种情况,因此,提高了测试用例执行效率。
在本发明实施例中,当预设接口函数的输入参数与预设接口函数的所有输入值均具有依赖关系时,第一测试用例集中的每一个第一测试用例均为一个可以直接执行的测试用例,例如,预设接口函数的输入参数为a和b,变量x的取值为3,推导出预设接口函数的输入参数a的取值为1、b的取值为10,则a=1、b=10即为对应的第一测试用例。在变量集合中的变量依赖的中间函数较多的情况下,为了减少推导过程中的工作量,提高测试用例生成的效率,可以只针对使用频率高的函数采用对应的依赖关系确定函数的输入值,最终得到第一测试用例集,此时,得到的第一测试用例可能没有覆盖到源代码中全部分支,在此情况下,为了保证测试用例覆盖的全面性,可以根据预设接口函数的入参的取值范围,对预设接口函数的入参的取值进行正交组合,得到第二测试用例集,和第一测试用例集互为补充。
当预设接口函数的输入参数与预设接口函数中的输入值的其中一个或者多个具有依赖关系时,还需要确定预设接口函数中的输入值中的其他输入值,例如,预设接口函数的输入参数为a、b、c,变量x取值为3,变量x与输入参数a和b具有依赖关系,因此,通过变量x的取值3可以推导出输入参数a的值为10、输入参数b的值为1,由于c与变量x没有依赖关系,就推导不出c的取值,此时,需要根据预设接口函数的入参a、b、c的取值范围,得到第二测试用例集,依据第二测试用例集补全第一测试用例集。
为了得到第二测试用例集,本发明实施例还包括以下步骤,请参照图5,图5示出了本发明实施例示出了另一种测试用例生成方法流程图:
步骤S401,依据预设接口函数的入参的取值范围,对预设接口函数的入参的取值进行正交组合,得到第二测试用例集,其中,第二测试用例集中每一个测试用例对应每一个正交组合的入参的取值。
在本发明实施例中,预设接口函数的入参的取值范围可以是一个区间,例如,预设接口函数的入参a的取值范围为a<10,预设接口函数的入参的取值范围也可以是一个包含多个值的集合,该集合中的值可以是整数、字符或者字符串等等,预设接口函数的入参可以取值为该集合中的任意一个值,例如,预设接口函数的入参b的取值范围为{2,4,6,8}、预设接口函数的入参c的取值范围为{“北京”,“上海”,“深圳”}。
在本发明实施例中,例如,预设接口函数有3个入参:分别为a、b和c,a的取值范围为{2,4,6}、b的取值范围为{“北京”,“上海”},c的取值范围为{“in”,“out”},根据正交原理对入参a、b、c的取值进行正交组合得到的第二测试用例集中包括8个第二测试用例,分别为:{"a":2,"b":"北京","c":"in"}、{"a":2,"b":"上海","c":"in"}、{"a":2,"b":"北京","c":"out"}、{"a":4,"b":"北京","c":"in"}、{"a":4,"b":"上海","c":"out"}、{"a":4,"b":"上海","c":"in"}、{"a":6,"b":"北京","c":"out"}、{"a":6,"b":"上海","c":"in"}。
需要说明的是,预设接口函数的入参也可以只有一个,此时,按照其取值范围,选取多个典型的取值,将多个典型的取值作为第二测试用例集,例如,预设接口函数只有一个入参a,a的取值范围为10<a<100,此时,可以取a=0、a=10、a=21、a=100、a=1000这几个典型的值,作为第二测试用例集。
还需要说明的是,第一测试用例集与第二测试用例集的生成的顺序可以不做限定,可以首先生成第一测试用例集,再生成第二测试用例集,然后根据第二测试用例及对第一测试用例集中缺失的预设接口函数的入参进行补充,也可以首先选出预设接口函数的入参的典型取值,进行正交组合生成第二测试用例集,然后再生成第一测试用例集。
在本发明实施例中,第一测试用例集与第二测试用例集可以互为补充,为了得到覆盖较为全面的测试用例合集,本发明实施例还包括步骤S402。
步骤S402,依据第一测试用例集及第二测试用例集生成测试用例合集。
在本发明实施例中,当第一测试用例集中的第一测试用例包括预设接口函数中的所有入参时,当第一测试用例集中的第一测试用例未包括预设接口函数中的所有入参时,也可以根据缺失入参的取值范围对第一测试用例中的缺失入参进行补齐。通过执行第一测试用例集及第二测试用例集中的所有测试用例,将其中覆盖到相同分支的测试用例进行去重,从而得到最终精简后的测试用例合集,以达到执行最精简的测试用例,覆盖最多的判定分支,最终达到提高测试用例执行效率的目的,作为一种生成测试用例合集的方式,请参照图6,步骤S402还包括以下子步骤:
子步骤S4021,将第一测试用例集及第二测试用例集合并成初始合集;
在本发明实施例中,初始合集中包括第一测试用例集中的所有第一测试用例及第二测试用例集中的所有第二测试用例,因此,初始合集中可能存在覆盖相同判定分支的第一测试用例及第二测试用例;
子步骤S4022,对初始合集中覆盖相同代码路径的测试用例进行去重,得到测试用例合集。
在本发明实施例中,对对初始合集中覆盖相同代码路径的测试用例进行去重的具体实施方式可以是:
首先,依次从初始合集取出并执行当前测试用例,标记出当前测试用例覆盖的当前代码路径;
其次,当当前代码路径为初始合集中已经执行的测试用例的覆盖的代码路径的子集时,将当前测试用例从初始合集中移除。
在本发明实施例中,例如,执行1#测试用例覆盖的代码路径1->2->3->4->5,执行2#测试用例覆盖的代码路径4->5,2#测试用例覆盖的代码路径为1#测试用例覆盖的代码路径的子集,因此,将2#测试用例覆盖的代码路径从初始合集中移除。
在本发明实施例中,在分析变量取值过程中,通过获取函数的输入值与输出值之间的关系,确定出变量依赖的函数的输入值,与现有技术相比,具有以下有益效果:
第一,由于分析变量取值过程中依据函数的输入值与输出值之间的关系,最终获取与变量取值对应的预设接口函数的输入值,使得分析过程简单、高效。
第二,对于循环语句而言,将其分解为循环条件成立和循环条件不成立两种场景,分别对应两个测试用例,因此,执行测试用例时无需通过穷尽循环语句中的循环次数即可测试对应循环条件成立和不成立两种分支流程,提高测试用例执行的效率。
第三,对于函数的输入值与输出值之间的关系进行统一规则库的管理,使得用户可以根据需要对函数的输入值与输出值之间的关系进行增加或者减少,提高了实际应用的灵活性。
第四,可以针对预设接口函数及相关的分支流程生成对应的测试用例,无需关心除预设接口函数及相关的分支流程之外的其他函数的逻辑,对于存在大量接口函数的应用场景,其效率的提升更为明显。
第五,通过对预设接口函数的入参的取值范围进行正交组合得到第二测试用例集,可以和第一测试用例集互为补充,并且将其中的重复测试用例进行去重,最终得到精简而又覆盖全面的测试用例集,由此,提升覆盖率的同时又提高了测试用例执行的效率。
实施例二
图7示出了本发明实施例提供的测试用例生成装置200的结构框图,该装置包括以下模块:
变量集合生成模块201,用于解析源代码中函数调用流程得到变量集合。
在本发明实施例中,变量集合生成模块201用于执行步骤S201。
在本发明实施例中,请参照图8,变量集合生成模块201包括解析单元2011、遍历单元2012及组成单元2013。
在本发明实施例中,解析单元2011用于解析源代码中函数调用流程得到控制图,其中,控制图中的节点包括判定条件,在本发明实施例中,解析单元2011用于执行子步骤S2011,解析单元2011还用于执行:
对源代码进行语法分析,得到抽象语法树;
依据抽象语法树中函数之间的调用关系生成函数调用流程;
依次提取函数调用流中每个函数中的判定条件及对应的分支语句;
以判定条件为节点、以对应的分支语句为边生成控制图。
在本发明实施例中,遍历单元2012用于遍历控制图中每一个节点,获取每一个节点的判定条件中的变量,在本发明实施例中,遍历单元2012用于执行子步骤S2011。
在本发明实施例中,组成单元2013用于将多个变量组成变量集合。
在本发明实施例中,组成单元2013用于执行步骤S2013。
初始模块202,用于获取变量集合中的第n个变量,其中,n为大于0的整数;
在本发明实施例中,初始模块202用于执行步骤S202。
分析模块203,用于根据第n个变量的取值获得预设接口函数的输入值,第n个变量的取值与预设接口函数具有依赖关系;依赖关系为第n个变量的取值与预设接口函数之间的函数调用流程中输入值与输出值的对应关系;
在本发明实施例中,分析模块203具体用于:
根据第n个变量的取值获得中间函数的输入值,第n个变量与中间函数具有第一中间依赖关系;第一中间依赖关系包括中间函数的输入值与中间函数的输出值的对应关系;
依据中间函数的输入值获得预设接口函数的输入值,中间函数的输入值与预设接口函数具有第二中间依赖关系,第二中间依赖关系包括预设接口函数的输入值与预设接口函数的输出值的对应关系。
在本发明实施例中,分析模块203执行步骤S203及其子步骤S2031-S2032。
第一用例生成模块204,用于将预设接口函数的输入值作为第n个变量的取值对应的第一测试用例;
在本发明实施例中,第一用例生成模块204用于执行步骤S204。
第一用例集生成模块205,用于基于n的取值,重复根据第n个变量的取值获得预设接口函数的输入值的步骤,得到第一测试用例集,其中,第一测试用例集包括变量集合中每一个变量对应的第一测试用例。
在本发明实施例中,第一用例集生成模块205用于执行步骤S205。
执行模块206,用于执行与第n个变量对应的第一测试用例,以覆盖对应的源代码。
在本发明实施例中,执行模块206用于执行步骤S206。
第二用例集生成模块207,用于依据预设接口函数的入参的取值范围,对预设接口函数的入参的取值进行正交组合,得到第二测试用例集,其中,第二测试用例集中每一个测试用例对应每一个正交组合的入参的取值;
在本发明实施例中,第二用例集生成模块207用于执行步骤S401。
测试用例合集生成模块208,用于依据第一测试用例集及第二测试用例集生成测试用例合集。
在本发明实施例中,测试用例合集生成模块208用于执行步骤S402。
在本发明实施例中,请参照图9,测试用例合集生成模块208包括:合并单元2081、去重单元2082。
在本发明实施例中,合并单元2081用于将第一测试用例集及第二测试用例集合并成初始合集,在本发明实施例中,合并单元2081用于执行子步骤S4021。
在本发明实施例中,去重单元2082用于对初始合集中覆盖相同代码路径的测试用例进行去重,得到测试用例合集,在本发明实施例中,去重单元2082用于执行子步骤S4022,去重单元2082还具体用于:
依次从初始合集取出并执行当前测试用例,标记出所述当前测试用例覆盖的当前代码路径;
当当前代码路径为初始合集中已经执行的测试用例的覆盖的代码路径的子集时,将当前测试用例从所述初始合集中移除。
实施例三
如图10所示,图10为本申请实施例提供的一种电子设备100的结构示意图,包括:处理器121、存储器122和总线123;所述存储器122存储有所述处理器121可执行的机器可读指令,所述处理器121与所述存储器122之间通过总线123通信。另外,该电子设备100还可以包括通信接口124,通信接口124和存储器122通过总线123连接。
其中,存储器122可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口124(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等,电子设备100通过通信接口124,可以获取到上述变量集合。
总线123可以是ISA总线、PCI总线或EISA总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
其中,存储器122用于存储程序,处理器121在接收到执行指令后,执行程序,前述本申请实施例任一实施例揭示的方法或装置所执行的方法可以应用于处理器121中,或者由处理器121实现。
处理器121可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器121中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器121可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DigitalSignal Processor,简称DSP)、专用集成电路(Application Specific IntegratedCircuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器ROM(Read-Only Memory,ROM),可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器122,处理器121读取存储器122中的信息,结合其硬件完成上述方法的步骤。
所述机器可读指令被所述处理器121执行时执行如下处理:获取变量集合中的第n个变量,其中,n为大于0的整数;
根据所述第n个变量的取值获得预设接口函数的输入值,所述第n个变量的取值与所述预设接口函数具有依赖关系;所述依赖关系为所述第n个变量的取值与所述预设接口函数之间的函数调用流程中输入值与输出值的对应关系;将所述预设接口函数的输入值作为第n个变量的取值对应的第一测试用例;基于所述n的取值,重复根据第n个变量的取值获得所述预设接口函数的输入值的步骤,得到第一测试用例集,其中,所述第一测试用例集包括所述变量集合中每一个变量对应的第一测试用例。
实施例四
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器121运行时执行实施例一的测试用例生成方法的步骤。
具体地,该计算机可读存储介质可以为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被处理器121运行时,能够执行上述测试用例生成方法,从而提升了测试用例生成的效率及执行的效率。
本申请实施例提供的测试用例生成方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
综上所述,本申请实施例提供了一种测试用例生成方法、装置、电子设备及可读存储介质,所述方法包括:获取变量集合中的第n个变量,其中,n为大于0的整数;根据所述第n个变量的取值获得预设接口函数的输入值,所述第n个变量的取值与所述预设接口函数具有依赖关系;所述依赖关系为所述第n个变量的取值与所述预设接口函数之间的函数调用流程中输入值与输出值的对应关系;将所述预设接口函数的输入值作为第n个变量的取值对应的第一测试用例;基于所述n的取值,重复根据第n个变量的取值获得所述预设接口函数的输入值的步骤,得到第一测试用例集,其中,所述第一测试用例集包括所述变量集合中每一个变量对应的第一测试用例,本申请实施例能够在分析变量取值过程中,通过获取函数的输入值与输出值之间的关系,确定出变量依赖的函数的输入值,最终得到对应的测试用例,提高了测试用例生成的效率。
以上,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (20)
1.一种测试用例生成方法,其特征在于,包括:
获取变量集合中的第n个变量,其中,n为大于0的整数;所述变量集合是通过解析源代码中函数调用流程的控制图,获取控制图中每一个节点的判定条件中的变量所得到的;
根据所述第n个变量的取值获得所述第n个变量的取值与预设接口函数之间的函数调用流程中包括的中间函数的输入值,所述第n个变量与所述中间函数具有第一中间依赖关系;所述第一中间依赖关系包括所述中间函数的输入值与所述中间函数的输出值的对应关系;
依据所述中间函数的输入值获得预设接口函数的输入值,所述中间函数的输入值与所述预设接口函数具有第二中间依赖关系,所述第二中间依赖关系包括所述预设接口函数的输入值与所述预设接口函数的输出值的对应关系;所述中间函数由所述预设接口函数调用;
将所述预设接口函数的输入值作为第n个变量的取值对应的第一测试用例;
基于所述n的取值,重复根据第n个变量的取值获得所述预设接口函数的输入值的步骤,得到第一测试用例集,其中,所述第一测试用例集包括所述变量集合中每一个变量对应的第一测试用例。
2.根据权利要求1所述的测试用例生成方法,其特征在于,所述获取变量集合中的第n个变量的步骤之前,所述方法还包括:
解析源代码中函数调用流程得到所述变量集合。
3.如权利要求2所述的测试用例生成方法,其特征在于,所述解析源代码中函数调用流程得到所述变量集合的步骤,包括:
解析源代码中函数调用流程得到控制图,其中,所述控制图中的节点包括判定条件;
遍历所述控制图中每一个节点,获取所述每一个节点的判定条件中的变量;
将多个所述变量组成所述变量集合。
4.如权利要求3所述的测试用例生成方法,其特征在于,所述解析源代码中函数调用流程得到控制图的步骤包括:
对所述源代码进行语法分析,得到抽象语法树;
依据所述抽象语法树中函数之间的调用关系生成函数调用流程;
依次提取函数调用流中每个函数中的判定条件及对应的分支语句;
以所述判定条件为节点、以对应的分支语句为边生成所述控制图。
5.如权利要求1所述的测试用例生成方法,其特征在于,所述方法还包括:
执行与所述第n个变量对应的第一测试用例,以覆盖对应的源代码。
6.如权利要求1所述的测试用例生成方法,其特征在于,所述方法还包括:
依据所述预设接口函数的入参的取值范围,对所述预设接口函数的入参的取值进行正交组合,得到第二测试用例集,其中,所述第二测试用例集中每一个测试用例对应每一个正交组合的入参的取值。
7.如权利要求6所述的测试用例生成方法,其特征在于,所述方法还包括:
依据所述第一测试用例集及所述第二测试用例集生成测试用例合集。
8.如权利要求7所述的测试用例生成方法,其特征在于,所述依据所述第一测试用例集及所述第二测试用例集生成测试用例合集的步骤,包括:
将所述第一测试用例集及所述第二测试用例集合并成初始合集;
对所述初始合集中覆盖相同代码路径的测试用例进行去重,得到测试用例合集。
9.如权利要求8所述的测试用例生成方法,其特征在于,所述对所述初始合集中覆盖相同代码路径的测试用例进行去重,得到测试用例合集的步骤,包括:
依次从所述初始合集取出并执行当前测试用例,标记出所述当前测试用例覆盖的当前代码路径;
当所述当前代码路径为初始合集中已经执行的测试用例的覆盖的代码路径的子集时,将所述当前测试用例从所述初始合集中移除。
10.一种测试用例生成装置,其特征在于,包括:
初始模块,用于获取变量集合中的第n个变量,其中,n为大于0的整数;所述变量集合是通过解析源代码中函数调用流程的控制图,获取控制图中每一个节点的判定条件中的变量所得到的;
分析模块,用于根据所述第n个变量的取值获得所述第n个变量的取值与预设接口函数之间的函数调用流程中包括的中间函数的输入值,所述第n个变量与所述中间函数具有第一中间依赖关系;所述第一中间依赖关系包括所述中间函数的输入值与所述中间函数的输出值的对应关系;依据所述中间函数的输入值获得预设接口函数的输入值,所述中间函数的输入值与所述预设接口函数具有第二中间依赖关系,所述第二中间依赖关系包括所述预设接口函数的输入值与所述预设接口函数的输出值的对应关系;所述中间函数由所述预设接口函数调用;
第一用例生成模块,用于将所述预设接口函数的输入值作为第n个变量的取值对应的第一测试用例;
第一用例集生成模块,用于基于所述n的取值,重复根据第n个变量的取值获得所述预设接口函数的输入值的步骤,得到第一测试用例集,其中,所述第一测试用例集包括所述变量集合中每一个变量对应的第一测试用例。
11.根据权利要求10所述的测试用例生成装置,其特征在于,所述装置还包括:
变量集合生成模块,用于解析源代码中函数调用流程得到所述变量集合。
12.如权利要求11所述的测试用例生成装置,其特征在于,所述变量集合生成模块包括:
解析单元,用于解析源代码中函数调用流程得到控制图,其中,所述控制图中的节点包括判定条件;
遍历单元,用于遍历所述控制图中每一个节点,获取所述每一个节点的判定条件中的变量;
组成单元,用于将多个所述变量组成所述变量集合。
13.如权利要求12所述的测试用例生成装置,其特征在于,所述解析单元具体用于:
对所述源代码进行语法分析,得到抽象语法树;
依据所述抽象语法树中函数之间的调用关系生成函数调用流程;
依次提取函数调用流中每个函数中的判定条件及对应的分支语句;
以所述判定条件为节点、以对应的分支语句为边生成所述控制图。
14.如权利要求10所述的测试用例生成装置,其特征在于,所述装置还包括:
执行模块,用于执行与所述第n个变量对应的第一测试用例,以覆盖对应的源代码。
15.如权利要求10所述的测试用例生成装置,其特征在于,所述装置还包括:
第二用例集生成模块,用于依据所述预设接口函数的入参的取值范围,对所述预设接口函数的入参的取值进行正交组合,得到第二测试用例集,其中,所述第二测试用例集中每一个测试用例对应每一个正交组合的入参的取值。
16.如权利要求15所述的测试用例生成装置,其特征在于,所述装置还包括:
测试用例合集生成模块,用于依据所述第一测试用例集及所述第二测试用例集生成测试用例合集。
17.如权利要求16所述的测试用例生成装置,其特征在于,所述测试用例合集生成模块包括:
合并单元,用于将所述第一测试用例集及所述第二测试用例集合并成初始合集;
去重单元,用于对所述初始合集中覆盖相同代码路径的测试用例进行去重,得到测试用例合集。
18.如权利要求17所述的测试用例生成装置,其特征在于,所述去重单元具体用于:
依次从所述初始合集取出并执行当前测试用例,标记出所述当前测试用例覆盖的当前代码路径;
当所述当前代码路径为初始合集中已经执行的测试用例的覆盖的代码路径的子集时,将所述当前测试用例从所述初始合集中移除。
19.一种电子设备,其特征在于,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行时执行如权利要求1至9任一所述的测试用例生成方法的步骤。
20.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至9任一所述的测试用例生成方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910138869.5A CN111611152B (zh) | 2019-02-25 | 2019-02-25 | 测试用例生成方法、装置、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910138869.5A CN111611152B (zh) | 2019-02-25 | 2019-02-25 | 测试用例生成方法、装置、电子设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111611152A CN111611152A (zh) | 2020-09-01 |
CN111611152B true CN111611152B (zh) | 2023-08-04 |
Family
ID=72199961
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910138869.5A Active CN111611152B (zh) | 2019-02-25 | 2019-02-25 | 测试用例生成方法、装置、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111611152B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112506681B (zh) * | 2020-12-22 | 2023-08-29 | 深圳市优必选科技股份有限公司 | 参数调用方法、装置、电子设备及存储介质 |
CN113204498B (zh) * | 2021-06-07 | 2023-04-07 | 支付宝(杭州)信息技术有限公司 | 针对闭源函数库生成模糊测试驱动器的方法和装置 |
CN115617700B (zh) * | 2022-12-19 | 2023-04-07 | 华东交通大学 | 基于关系分析的测试用例设计、生成方法及系统 |
CN115934576B (zh) * | 2023-03-10 | 2023-06-16 | 华锐分布式(北京)技术有限公司 | 交易场景下的测试用例生成方法、装置、设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073483A (zh) * | 2009-11-23 | 2011-05-25 | 中兴通讯股份有限公司 | 一种生成正交测试用例的方法及装置 |
CN104915293A (zh) * | 2015-06-12 | 2015-09-16 | 北京邮电大学 | 软件测试方法及系统 |
CN106681903A (zh) * | 2015-11-11 | 2017-05-17 | 阿里巴巴集团控股有限公司 | 生成测试用例的方法及装置 |
CN108595341A (zh) * | 2018-05-11 | 2018-09-28 | 清华大学 | 测试用例自动生成方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9058427B2 (en) * | 2012-07-16 | 2015-06-16 | Fujitsu Limited | Iterative generation of symbolic test drivers for object-oriented languages |
-
2019
- 2019-02-25 CN CN201910138869.5A patent/CN111611152B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073483A (zh) * | 2009-11-23 | 2011-05-25 | 中兴通讯股份有限公司 | 一种生成正交测试用例的方法及装置 |
CN104915293A (zh) * | 2015-06-12 | 2015-09-16 | 北京邮电大学 | 软件测试方法及系统 |
CN106681903A (zh) * | 2015-11-11 | 2017-05-17 | 阿里巴巴集团控股有限公司 | 生成测试用例的方法及装置 |
CN108595341A (zh) * | 2018-05-11 | 2018-09-28 | 清华大学 | 测试用例自动生成方法及系统 |
Non-Patent Citations (1)
Title |
---|
基于区间必然集的测试用例生成方法;王雅文 等;《计算机辅助设计与图形学学报》;20130430;第25卷(第4期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111611152A (zh) | 2020-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111611152B (zh) | 测试用例生成方法、装置、电子设备及可读存储介质 | |
CN106547527B (zh) | 一种JavaScript文件构建方法及装置 | |
CN106469049B (zh) | 一种文件扫描的方法及装置 | |
WO2018121531A1 (zh) | 一种生成测试用例脚本的方法和装置 | |
US8381199B2 (en) | Modular and/or demand-driven string analysis of a computer program | |
CN106295346B (zh) | 一种应用漏洞检测方法、装置及计算设备 | |
CN108549535B (zh) | 一种基于文件依赖关系的高效程序解析方法和系统 | |
CN110276811B (zh) | 图像转换方法、装置、电子设备及可读存储介质 | |
US20180203676A1 (en) | Removing library objects from a static library | |
CN109597618B (zh) | 程序开发方法、装置、计算机设备及存储介质 | |
CN111580821B (zh) | 脚本绑定方法、装置、电子设备及计算机可读存储介质 | |
CN108920179A (zh) | Java反射实现方法、装置和系统 | |
CN114268538A (zh) | 前端路由的配置方法和装置 | |
CN110737469A (zh) | 一种功能粒度上基于语义信息的源代码相似度评估方法 | |
CN106802866B (zh) | 一种Android程序的执行路径的还原方法 | |
CN111158665B (zh) | 代码生成方法及装置、电子设备和存储介质 | |
CN114115900B (zh) | 一种脚本编译方法、装置及电子设备 | |
CN111339035B (zh) | 一种目标数据的查询方法、装置、计算机设备和存储介质 | |
CN113946516A (zh) | 代码覆盖率确定方法、装置及存储介质 | |
CN114065197A (zh) | 调用序列生成方法、装置、电子设备、存储介质及产品 | |
CN112748988A (zh) | 基于领域专用语言的自定义函数运行方法和系统 | |
CN107506299B (zh) | 一种代码分析方法及终端设备 | |
CN111401020A (zh) | 一种界面加载方法、系统和计算设备 | |
CN117520191B (zh) | 一种基于程序路径的测试完备性检查方法、设备及存储介质 | |
CN111144086B (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 |