测试用例代码自动生成装置与方法与流程

文档序号:11386434阅读:230来源:国知局
测试用例代码自动生成装置与方法与流程

本发明涉及软件测试领域,具体而言,涉及一种测试用例代码自动生成装置与方法。



背景技术:

软件产品的质量是软件企业的生存根本,随着互联网大潮的到来,应用软件、app软件已经触及到人们生活的方方面面,软件质量的高低,用户体验的好坏直接影响了终端用户对软件的使用。国内的软件企业也越来越重视软件测试。为了保证代码质量,一般都要求开发人员编写专门的测试代码,对自己写的代码进行充分的单元测试。比较简单的办法是为产品工程建立对应的测试工程,为每个类建立对应的测试类,为每个函数(很简单的除外)建立测试函数。对java语言的测试主要分为黑盒测试和白盒测试,软件测试工程师更偏向于黑盒功能测试,虽然业界也出现了很多自动化的黑盒测试工具,然而黑盒测试有明显的缺点:代码覆盖率不高,无法测试所有的分支路径,同时对该阶段发现问题的修复成本也比较高。

在现有技术中,要执行单元测试往往需要撰写比被测试代码数量更多的测试代码,以保证代码覆盖率,对开发人员来说增加了不少负担,目前业界的一般方法是引入单元测试框架,这些测试框架可以帮助开发人员生成部分代码,帮助开发人员减少固定的、重复的代码输入,从一定程度上减轻了开发人员的负担。但是在互联网时代,java开发语言的使用占用了很大的份额,目前针对java开发语言使用的最多的junit单元测试框架。一个完整的java程序包含很多的类,为了保证对代码充分测试,程序员不得不在编写完自己的代码后,然后针对自己的代码再次编写数量更多的测试代码,而且很多测试代码都是相似的,且难于维护。此外,针对被测试函数,其输入的参数类型一般为自定义类或者基本类型,开发人员选择输入测试参数也并不统一,这会导致代码覆盖率不高。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种测试用例代码自动生成装置与方法。

第一方面,本发明实施例提供了一种测试用例代码自动生成装置,所述测试用例代码自动生成装置包括:

数据读取单元,用于在预存储的目标代码目录中读取待测试函数的代码数据包;

参数提取单元,用于提取待测试函数中包含的多个输入类型参数变量及返回值;

查找单元,用于从预设的规则文件中查找与所述每个输入参数类型变量对应的变量取值范围;

代码生成单元,用于依据多个输入类型参数变量、每个输入类型参数变量的对应的取值范围、返回值以及所述代码数据包生成测试用例代码。

第二方面,本发明实施例还提供了一种测试用例代码自动生成方法,所述测试用例代码自动生成方法包括:

在预存储的目标代码目录中读取待测试函数的代码数据包;

提取待测试函数中包含的多个输入类型参数变量及返回值;

从预设的规则文件中查找与所述每个输入参数类型变量对应的变量取值范围;

依据多个输入类型参数变量、每个输入类型参数变量的对应的取值范围、返回值以及所述代码数据包生成测试用例代码。

与现有技术相比,本发明提供的测试用例代码自动生成装置与方法,首先通过在预存储的目标代码目录中读取待测试函数的代码数据包;然后再提取待测试函数中包含的多个输入类型参数变量及返回值;接着从预设的规则文件中查找与所述每个输入参数类型变量对应的变量取值范围;最后依据多个输入类型参数变量、每个输入类型参数变量的对应的取值范围、返回值以及所述代码数据包生成测试用例代码。该测试用例代码自动生成装置与方法通过自动生成测试用例代码,从而无需测试人员自己编程大量的测试代码,大大节省了人力成本,并且生成测试用例代码覆盖率高。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

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

图1为本发明实施例提供的服务器分别与代理服务器、客户端的交互示意图;

图2为本发明实施例提供的服务器的结构框图;

图3为本发明实施例提供的测试用例代码自动生成装置功能框图;

图4为本发明实施例提供的测试用例代码自动生成方法的流程图。

图标:101-存储器;102-存储控制器;103-处理器;104-外设接口;100-客户端;200-服务器;300-测试用例代码自动生成装置;400-代理服务器;301-数据读取单元;302-参数提取单元;303-查找单元;304-代码生成单元;305-信息接收单元;306-判断单元;307-信息发送单元。

具体实施方式

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

本发明较佳实施例所提供的测试用例代码自动生成装置与方法可应用于如图1所示的应用环境中。如图1所示,客户端100、服务器200以及代理服务器400位于无线网络或有线网络中,通过该无线网络或有线网络,服务器200分别与客户端100、代理服务器400进行数据交互。于本发明实施例中,客户端100中安装有至少一个应用程序(application,app),与服务器200相对应,为用户提供服务。于本发明实施例中,客户端100优选为移动终端设备,例如可以包括智能手机、平板电脑、膝上型便携计算机、穿戴式移动终端等等。

图2示出了本发明实施例中的服务器200的结构框图。如图2所示,服务器200包括测试用例代码自动生成装置300、存储器101、存储控制器102,一个或多个(图中仅示出一个)处理器103、外设接口104等。这些组件通过一条或多条通讯总线/信号线相互通讯。所述测试用例代码自动生成装置300包括至少一个可以软件或固件(firmware)的形式存储于所述存储器101中或固化在所述服务器200的操作系统(operatingsystem,os)中的软件功能模块。

存储器101可用于存储软件程序以及模块,如本发明实施例中的图片处理装置及方法所对应的程序指令/模块,处理器103通过运行存储在存储器101内的软件程序以及模块,从而执行各种功能应用以及数据处理,如本发明实施例提供的测试用例代码自动生成方法。存储器101还可以包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。处理器103以及其他可能的组件对存储器101的访问可在存储控制器102的控制下进行。

外设接口104将各种输入/输出装置耦合至处理器103以及存储器101。在一些实施例中,外设接口104、处理器103以及存储控制器102可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。

可以理解,图2所示的结构仅为示意,服务器200还可包括比图2中所示更多或者更少的组件,或者具有与图2所示不同的配置。图2中所示的各组件可以采用硬件、软件或其组合实现。

请参阅图3,本发明实施例提供了一种测试用例代码自动生成装置300,应用于服务器200,该服务器200与客户端100建立通信连接,所述测试用例代码自动生成装置300包括数据读取单元301、参数提取单元302、查找单元303、代码生成单元304、信息接收单元305、判断单元306以及信息发送单元307。

所述信息接收单元305用于接收一客户端100发送的待测试函数的名称信息。

例如,用户在客户端100(手机或电脑)安装的应用程序选择并点击待测试函数的名称信息,此时客户端100将待测试函数的名称信息发送至服务器200。

所述判断单元306用于判断是否缓存有与所述待测试函数的名称信息关联的代码数据包。

本实施例中,代码数据包可采用但不限于java语言代码数据包或c++语言代码数据包或c语言代码数据包,本发明实施例以采用java语言代码数据包举例说明。

所述数据读取单元301用于若缓存有与所述待测试函数的名称信息关联的代码数据包时,在预存储的目标代码目录中读取待测试函数的代码数据包。

所述信息发送单元307用于若未缓存有与所述待测试函数的名称信息关联的代码数据包时,向一代理服务器400发送数据请求。

所述信息接收单元305用于接收所述代理服务器400依据所述数据请求反馈的与所述待测试函数的名称信息关联的代码数据包。

当服务器200中未缓存有代码数据包时,可向代理服务器400发送数据请求,若代理服务器400存储有与所述待测试函数的名称信息关联的代码数据包时,直接将与所述待测试函数的名称信息关联的代码数据包发送至服务器200,从而需要测试人员寻找并上传代码数据包,方便快捷。本实施例,代码服务器400与多个服务器200交互,并接收多个服务器200处于测试状态时上传的不同的代码数据包并存储。

参数提取单元302用于提取待测试函数中包含的多个输入类型参数变量及返回值。

在java语言中,本质上讲将数据类型分为两种:基本类型和引用数据类型。基本类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数。引用数据类型:java语言本身不支持c++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。返回值对于测试用例代码而言,可以用于验证被测试函数的准确性。

所述查找单元303用于从预设的规则文件中查找与所述每个输入参数类型变量对应的变量取值范围。

本实施例中,基本类型和引用数据类型分别包括多种类型变量,例如,输入类型参数变量包括整型变量、浮点型变量、逻辑型变量以及字符型变量等,并且每种变量均有自己的取值范围,例如,整型变量的取值范围为-2^31到2^31-1之间的任意整数。

代码生成单元304用于依据多个输入类型参数变量、每个输入类型参数变量的对应的取值范围、返回值以及所述代码数据包生成测试用例代码。

本实施例中,利用java反射机制将输入类型参数变量、每个输入类型参数变量的对应的取值范围、返回值以及所述代码数据包按照预设定的规则使用文本拼接的方式,创建出被测试函数的测试用例代码。

其中,java反射机制是指,java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

测试用例代码是指为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求的软件代码。

较佳地,考虑到利用对每个输入类型参数变量的对应的取值范围的每个取值生成的测试用例代码对被测试函数进行测试,覆盖率较高,但是耗费时间长,过程复杂,若对每个输入类型参数变量的对应的取值范围的其中一个取值测试用例代码对被测试函数进行测试,耗时短,过程简单,但是覆盖率低。

因此,较佳地,所述代码生成单元304用于依据多个输入类型参数变量、每个输入类型参数变量的对应的取值范围的最大正数值、零值以及最小负数值、返回值以及所述代码数据包生成测试用例代码。

利用每个输入类型参数变量的对应的取值范围的最大正数值、零值以及最小负数值、返回值以及所述代码数据包生成测试用例代码对被测试函数时,耗时相对较短及简短,并且覆盖率相对较高。

请参阅图4,本发明实施例还提供了一种测试用例代码自动生成方法,需要说明的是,本发明实施例所提供的测试用例代码自动生成方法,其基本原理及产生的技术效果和上述实施例相同,为简要描述,本实施例部分未提及之处,可参考上述的实施例中相应内容。所述测试用例代码自动生成方法包括:

步骤s401:接收一客户端100发送的待测试函数的名称信息。

可以理解地,步骤s401可以由信息接收单元305执行。

步骤s402:判断是否缓存有与所述待测试函数的名称信息关联的代码数据包,如果否,则执行步骤s403,如果是,则执行步骤s405。

可以理解地,步骤s402可以由判断单元306执行。

步骤s403:向一代理服务器400发送数据请求。

可以理解地,步骤s403可以由信息发送单元307执行。

步骤s404:接收所述代理服务器400依据所述数据请求反馈的与所述待测试函数的名称信息关联的代码数据包。

可以理解地,步骤s404可以由信息接收单元305执行。

步骤s405:在预存储的目标代码目录中读取待测试函数的代码数据包。

可以理解地,步骤s405可以由数据读取单元301执行。

本实施例中,代码数据包可采用java语言代码数据包或c++语言代码数据包或c语言代码数据包。

步骤s406:提取待测试函数中包含的多个输入类型参数变量及返回值。

可以理解地,步骤s406可以由参数提取单元302执行。

步骤s407:从预设的规则文件中查找与所述每个输入参数类型变量对应的变量取值范围。

可以理解地,步骤s407可以由查找单元303执行。

步骤s408:依据多个输入类型参数变量、每个输入类型参数变量的对应的取值范围、返回值以及所述代码数据包生成测试用例代码。

可以理解地,步骤s408可以由代码生成单元304执行。

具体地步骤s408可以包括依据多个输入类型参数变量、每个输入类型参数变量的对应的取值范围的最大正数值、零值以及最小负数值、返回值以及所述代码数据包生成测试用例代码。

综上所述,本发明提供的测试用例代码自动生成装置与方法,首先通过在预存储的目标代码目录中读取待测试函数的代码数据包;然后再提取待测试函数中包含的多个输入类型参数变量及返回值;接着从预设的规则文件中查找与所述每个输入参数类型变量对应的变量取值范围;最后依据多个输入类型参数变量、每个输入类型参数变量的对应的取值范围、返回值以及所述代码数据包生成测试用例代码。该测试用例代码自动生成装置与方法通过自动生成测试用例代码,从而无需测试人员自己编程大量的测试代码,大大节省了人力成本,并且生成测试用例代码覆盖率高。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

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

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1