掌桥专利:专业的专利平台
掌桥专利
首页

一种集成测试用例的自动生成方法、装置、设备及介质

文献发布时间:2024-01-17 01:21:27


一种集成测试用例的自动生成方法、装置、设备及介质

技术领域

本发明涉及软件测试技术领域,具体而言,涉及一种集成测试用例的自动生成方法、装置、设备及介质。

背景技术

集成测试是单元测试的逻辑扩展,其在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统后再进行相关测试,以验证软件系统各个组件之间的交互和集成是否正常,确保整个系统能够正确地工作。目前,在轨道交通中,现有的集成测试用例自动生成方案存在不能满足轨道交通信号系统集成测试中3层内接口调用率的最大覆盖的技术问题,且现有的生成方案不支持和Testbed软件的交互接口,这导致测试人员在获取到测试用例后,并不能直接使用,使自动生成测试用例减轻的工作量转移到了测试用例的翻译和存储上,仍然无法减轻用人成本。

发明内容

本发明的目的在于提供一种集成测试用例的自动生成方法、装置、设备及介质,以改善上述问题。为了实现上述目的,本发明采取的技术方案如下:

第一方面,本申请提供了一种集成测试用例的自动生成方法,包括:

获取初始用例文件,从初始用例文件中获取需要集成的测试函数的函数名和路径,根据函数名和路径建立键值对字典;

根据测试函数的函数名获取对应的桩函数,提取桩函数中的约束条件;

基于顶层约束方向聚合方法将所述约束条件反向聚合到顶层测试函数中,生成新的用例生成文件;

为新的用例生成文件生成第二测试用例,以初始测试用例文件为模版,将第二测试用例写入到新的测试用例文件得到最终测试用例文件。

第二方面,本申请还提供了一种集成测试用例的自动生成装置,包括:

获取模块:用于获取初始用例文件,从初始用例文件中获取需要集成的测试函数的函数名和路径,根据函数名和路径建立键值对字典;

提取模块:用于根据测试函数的函数名获取对应的桩函数,提取桩函数中的约束条件;

反向聚合模块:用于基于顶层约束方向聚合方法将所述约束条件反向聚合到顶层测试函数中,生成新的用例生成文件;

写入模块:用于为新的用例生成文件生成第二测试用例,以初始测试用例文件为模版,将第二测试用例写入到新的测试用例文件得到最终测试用例文件。

第三方面,本申请还提供了一种集成测试用例的自动生成设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现所述集成测试用例的自动生成方法的步骤。

第四方面,本申请还提供了一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述基于集成测试用例的自动生成方法的步骤。

本发明的有益效果为:

本发明提出了一种顶层约束反向聚合方法,通过将底层约束集成到顶层设计中,再为顶层设计生成测试用例,所生成的测试用例在满足顶层设计分支覆盖准则的同时还能够满足底层设计中接口调用率的最大化,代替了人工设计测试用例,降低设计集成测试用例的成本。

本发明的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明实施例了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为自底向顶集成策略的流程示意图;

图2为本发明实施例中所述的集成测试用例的自动生成方法流程示意图;

图3为本发明实施例中所述的集成测试用例的自动生成装置结构示意图;

图4为本发明实施例中所述的集成测试用例的自动生成设备结构示意图。

图中标记:

800、集成测试用例的自动生成设备;801、处理器;802、存储器;803、多媒体组件;804、I/O接口;805、通信组件。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

实施例1:

集成测试用于验证两个或多个单元或其他集成是否正确地一起工作,本实施例基于自底向顶的集成策略提出了一种集成测试用例的自动生成方法,其中, 自底向顶的集成策略主要为:

如图1所示,首先“原子”模块被分为三个模块群,每个模块群引入一个驱动模块进行测试。因此模块群1、模块群2中的模块均隶属于模块SL,因此在驱动模块Dr1、Dr2去掉后,模块群1与模块群2直接与SL接口,这时可对SL进行集成测试,Dr3被去掉后,SR与模块群3直接接口,可对SR进行集成测试,最后SL、SR和Top全部集成在一起进行测试。

参见图2,图中示出了本方法包括:

S1.获取初始用例文件tcf文件,从初始用例文件中获取需要集成的测试函数的函数名和路径,根据函数名和路径建立键值对字典map,所述键值对字典map用于保存测试函数的位置,以便于后续查找对应的文件;

基于以上实施例,本方法还包括:

S2.根据测试函数的函数名获取对应的桩函数,提取桩函数中的约束条件;

S21.根据函数名获取对应的桩函数,并从键值对字典map中查找桩函数对应的桩函数文件;

S22.根据所述桩函数文件生成第一用例生成文件xoutput.c和第一用例写入文件xnewWriter.cpp;

S23.为桩函数执行单元测试,以生成满足分支覆盖的第一测试用例;

S24.从所述第一测试用例提取出约束条件。

S25.根据所述约束条件创建中间文件;

S26.编译第一用例写入文件xnewWriter.cpp生成用例写入执行文件xnewWriter;

S27.执行用例写入执行文件xnewWriter将第一测试用例写入到所述中间文件。

基于以上实施例,本方法还包括:

S3.基于顶层约束方向聚合方法将所述约束条件反向聚合到顶层测试函数中,生成新的用例生成文件;

S31.根据测试函数的函数名和键值对字典map生成第二用例生成文件output.c和第二用例写入文件newWriter.cpp,所述output.c用于生成测试用例,newWriter.cpp用于写入用例;

S32.遍历第二用例生成文件output.c中所使用的桩函数,并提取中间文件中的第一测试用例,根据第一测试用例的使用情形依次为桩函数建立对应的模板字符串,每个字符串模版中都使用相同的标记位,对入参和返回值做标记,直到为每个桩函数生成模版列表;

顶层约束反向聚合方法是将底层的桩函数收集到的约束根据顶层使用底层函数方式的不同而插入不同的约束条件,使顶层测试函数具现包含底层函数约束的路径。针对底层函数的使用情况,具体的,所述桩函数的使用情形包括以下三种:

1)在获取函数返回值后将新声明的变量赋值给了返回值。针对这种情况在分支展开之前提前插入一个变量声明,在分支语句中,根据每个测试用例的值对该变量进行赋值。

2)没有声明新的变量,相比于第一种情况来说,变量不是在函数返回时声明,因此可以复制第一种情况的插桩,但不需要再分支展开之前插入一个变量声明。

3)不使用函数返回值,该种情况为了保证分支的展开不被编译器自动优化,需要任意添加一条和程序运行无关的代码。

本实施例中,为每种桩函数的使用情形创建了顶层设计的约束插桩字符串,从而实现了顶层设计的路径扩展,为顶层设计遍历路径的同时携带了底层设计的约束条件。

S33.声明多种模板字符串的键值对对象,将多种模板字符串组合成数组并添加到键值对对象中,其中,键为函数名,值为三种字符串;

S34.遍历第二用例写入文件newWriter.cpp,并判断是否存在桩函数的调用,并根据调用结果生成新的用例生成文件newoutput.c;

具体的,所述步骤S34包括:

遍历第二用例写入文件的每一行语句,判断当前行的语句是否存在桩函数的调用:

若存在,则获取第二用例写入文件newWriter.cpp对桩函数的使用情况,并根据所述使用情况选择出匹配的模板字符串;

将桩函数替换为匹配的模板字符串中的标志位,并写入新的用例生成文件中;

若不存在,则将当前行的语句写入新的用例生成文件newoutput.c中。

基于以上实施例,本方法还包括:

S4.为新的用例生成文件生成第二测试用例,以初始测试用例文件为模版,将第二测试用例写入到新的测试用例文件得到最终测试用例文件,包括:

S41.将新的用例生成文件编译为第一可执行文件和二进制文件;

S42.将所述二进制文件作为输入到Klee工具中,生成满足分支覆盖的第二测试用例;

S43.将第二用例写入文件编译为第二可执行文件,并根据第一可执行文件,以初始测试用例文件为模板,执行第二可执行文件将第二测试用例写入到新的测试用例文件得到最终测试用例文件,所述最终测试用例文件以tcf格式进行保存;

本实施例中, 将Testbed软件和测试用例相结合,使生成的测试用例输出至tcf文件中,支持了Testbed软件的用例查看接口,降低测试人员的用例管理成本。

本实施例通过为顶层设计扩展路径的方式为顶层设计生成的测试用例不仅满足底层设计分支覆盖,还能够满足轨道交通信号控制系统集成测试中3层调用内,接口调用率最大化的需求。

实施例2:

如图3所示,本实施例提供了一种集成测试用例的自动生成装置,所述装置包括:

获取模块:用于获取初始用例文件,从初始用例文件中获取需要集成的测试函数的函数名和路径,根据函数名和路径建立键值对字典;

提取模块:用于根据测试函数的函数名获取对应的桩函数,提取桩函数中的约束条件;

反向聚合模块:用于基于顶层约束方向聚合方法将所述约束条件反向聚合到顶层测试函数中,生成新的用例生成文件;

写入模块:用于为新的用例生成文件生成第二测试用例,以初始测试用例文件为模版,将第二测试用例写入到新的测试用例文件得到最终测试用例文件。

基于以上实施例, 提取模块包括:

查找单元:用于根据函数名获取对应的桩函数,并从键值对字典查找桩函数对应的桩函数文件;

第一生成单元:用于根据所述桩函数文件生成第一用例生成文件和第一用例写入文件;

第二生成单元:用于为桩函数执行单元测试,以生成满足分支覆盖的第一测试用例;

提取单元:用于从所述第一测试用例提取出约束条件。

基于以上实施例, 反向聚合模块包括:

第三生成单元:用于根据测试函数的函数名和键值对字典生成第二用例生成文件和第二用例写入文件;

建立单元:用于遍历第二用例生成文件中所使用的桩函数,并获取第一测试用例,根据第一测试用例的使用情形为桩函数建立多种模板字符串;

声明单元:用于声明多种模板字符串的键值对对象,将多种模板字符串组合成数组并添加到键值对对象中;

第一判断单元:用于遍历第二用例写入文件,并判断是否存在桩函数的调用,并根据调用结果生成新的用例生成文件;

具体的,所述第一判断单元包括:

遍历单元:用于遍历第二用例写入文件的每一行语句,判断当前行的语句是否存在桩函数的调用:

若存在,则获取第二用例写入文件对桩函数的使用情况,并根据所述使用情况选择出匹配的模板字符串;

替换单元:用于将桩函数替换为匹配的模板字符串中的标志位,并写入新的用例生成文件中;

若不存在,则将当前行的语句写入新的用例生成文件中。

基于以上实施例,写入模块包括:

编译单元:用于将新的用例生成文件编译为第一可执行文件和二进制文件;

第四生成单元:用于将所述二进制文件作为输入到Klee工具中,生成满足分支覆盖的第二测试用例;

写入单元:用于将第二用例写入文件编译为第二可执行文件,并根据第一可执行文件,以初始测试用例文件为模板,执行第二可执行文件将第二测试用例写入到新的测试用例文件得到最终测试用例文件。

需要说明的是,关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

实施例3:

相应于上面的方法实施例,本实施例中还提供了一种集成测试用例的自动生成设备,下文描述的一种集成测试用例的自动生成设备与上文描述的一种集成测试用例的自动生成方法可相互对应参照。

图4是根据示例性实施例示出的一种集成测试用例的自动生成设备800的框图。如图4所示,该集成测试用例的自动生成设备800可以包括:处理器801,存储器802。该集成测试用例的自动生成设备800还可以包括多媒体组件803, I/O接口804,以及通信组件805中的一者或多者。

其中,处理器801用于控制该集成测试用例的自动生成设备800的整体操作,以完成上述的集成测试用例的自动生成方法中的全部或部分步骤。存储器802用于存储各种类型的数据以支持在该集成测试用例的自动生成设备800的操作,这些数据例如可以包括用于在该集成测试用例的自动生成设备800上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器802可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(ElectricallyErasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。多媒体组件803可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器802或通过通信组件805发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口804为处理器801和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件805用于该集成测试用例的自动生成设备800与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near FieldCommunication,简称NFC),2G、3G或4G,或它们中的一种或几种的组合,因此相应的该通信组件805可以包括:Wi-Fi模块,蓝牙模块,NFC模块。

在一示例性实施例中,集成测试用例的自动生成设备800可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal ProcessingDevice,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的集成测试用例的自动生成方法。

在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的集成测试用例的自动生成方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器802,上述程序指令可由集成测试用例的自动生成设备800的处理器801执行以完成上述的集成测试用例的自动生成方法。

实施例4:

相应于上面的方法实施例,本实施例中还提供了一种可读存储介质,下文描述的一种可读存储介质与上文描述的一种集成测试用例的自动生成方法可相互对应参照。

一种可读存储介质,可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例的集成测试用例的自动生成方法的步骤。

该可读存储介质具体可以为U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可存储程序代码的可读存储介质。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

相关技术
  • 一种APP的自动生成方法、装置、终端设备及可读存储介质
  • 自动化测试用例生成方法、装置、介质及电子设备
  • 测试用例的调度方法、装置、计算设备及计算机存储介质
  • 接口测试用例生成方法、装置、计算机设备和存储介质
  • 接口测试用例生成方法、装置、电子设备、存储介质
  • 一种测试用例自动生成方法、装置、设备及存储介质
  • 一种测试用例的自动生成方法、装置、设备及介质
技术分类

06120116154908