CN112286784A - 一种测试用例生成方法、装置、服务器及存储介质 - Google Patents

一种测试用例生成方法、装置、服务器及存储介质 Download PDF

Info

Publication number
CN112286784A
CN112286784A CN201910668177.1A CN201910668177A CN112286784A CN 112286784 A CN112286784 A CN 112286784A CN 201910668177 A CN201910668177 A CN 201910668177A CN 112286784 A CN112286784 A CN 112286784A
Authority
CN
China
Prior art keywords
test case
code
type
parameter
tested
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.)
Granted
Application number
CN201910668177.1A
Other languages
English (en)
Other versions
CN112286784B (zh
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201910668177.1A priority Critical patent/CN112286784B/zh
Publication of CN112286784A publication Critical patent/CN112286784A/zh
Application granted granted Critical
Publication of CN112286784B publication Critical patent/CN112286784B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases

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

一种测试用例生成方法、装置、服务器及存储介质
技术领域
本发明涉及测试用例生成技术,尤其涉及测试用例生成方法、装置、服务器及存储介质。
背景技术
相关技术在静态代码检查过程中仅通过分析或检查源程序的语法、结构等来对被测代码进行检查,找出被测代码中的错误。静态代码检查仅仅能够发现编译器不能发现的问题和自定义一些检查规范,来检查代码编写中不规范、存在安全隐患的代码,但相关技术仅适合底层库接口的测试,但是对复杂场景的业务逻辑,和多语言的编译环境,无法生成正常测试用例代码;同时分析被测代码生成的用例代码无法直接执行,需要人工添加测试数据,这一过程速度慢、成本高。
发明内容
有鉴于此,本发明实施例提供一种测试用例生成方法、装置、服务器及存储介质,能够自动生成针对目标代码的正常测试用例和异常测试用例,提升测试用例的生成效率,同时简化测试用例的生成难度。
本发明实施例的技术方案是这样实现的:
本发明实施例提供了一种测试用例生成方法,包括:
获取待分析的目标代码;
对所述目标代码进行词语级的解析,形成对应的词法单元;
响应于所形成的词法单元,对所述目标代码进行语句级的解析,形成相应的中间表现形式;
根据所形成的中间表现形式与相应的被测试函数生成参数,形成相应的正常测试用例;
获取所述被测试函数的返回值类型,并根据所述被测试函数的返回值类型和所述正常测试用例返回值的类型确定对应的断言代码;
根据所述被测试函数的参数类型以及返回值类型,确定相应的异常测试用例,其中,所述正常测试用例和异常测试用例用于对所述目标代码进行测试。
上述方案中,所述根据所述被测试函数的参数类型以及返回值类型,确定相应的异常测试用例,包括:
确定与所述目标代码相对应的接口的参数与相应的被测试函数;
确定所述被测试函数所包含的参数类型、数量和对应的返回值类型;
根据所述被测试函数所包含的参数类型和对应的返回值类型确定与所述参数数量相匹配的异常测试用例。
上述方案中,所述根据所述被测试函数所包含的参数类型和对应的返回值类型确定与所述参数数量相匹配的异常测试用例,包括:
当所述目标代码相对应的接口的参数数量为至少两个时,确定与每一个参数相对应的正常值和异常值;
根据所述与每一个参数相对应的正常值和异常值确定与至少一个参数相对应的正常测试用例,和与其他参数对应的异常测试用例。
本发明实施例还提供了一种测试用例生成装置,包括:
源代码解析模块,用于获取待分析的目标代码;
所述源代码解析模块,用于对所述目标代码进行词语级的解析,形成对应的词法单元;
所述源代码解析模块,用于响应于所形成的词法单元,对所述目标代码进行语句级的解析,形成相应的中间表现形式;
测试用例生成模块,用于根据所形成的中间表现形式与相应的被测试函数生成参数,形成相应的正常测试用例;
所述测试用例生成模块,用于获取所述被测试函数的返回值类型,并根据所述被测试函数的返回值类型和所述正常测试用例返回值的类型确定对应的断言代码;
所述测试用例生成模块,用于根据所述被测试函数的参数类型以及返回值类型,确定相应的异常测试用例,其中,所述正常测试用例和异常测试用例用于对所述目标代码进行测试。
上述方案中,
所述源代码解析模块,用于确定所述词法单元所对应的词法类型与所述词法单元的数据结构;
所述源代码解析模块,用于根据所述词法单元的数据结构与相应的词法类型,对所述待分析的目标代码词语级的解析,形成对应的词法单元。
上述方案中,
所述源代码解析模块,用于确定所述词法单元所对应的文法规则;
所述源代码解析模块,用于根据所述文法规则对所述目标代码所对应的词法单元进行解析;
所述源代码解析模块,用于将所述目标代码所对应的词法单元的解析结果保存在相应的数据结构中,形成与所述目标代码相对应的中间表现形式。
上述方案中,
所述测试用例生成模块,用于获取与所述目标代码相对应的接口的参数与相应的被测试函数;
所述测试用例生成模块,用于确定所述被测试函数所包含的参数类型;
所述测试用例生成模块,用于根据所述被测试函数所包含的参数类型对所述中间表现形式进行处理,形成与所述中间表现形式相对应的正常测试用例。
上述方案中,
所述测试用例生成模块,用于当所述被测试函数所包含的参数类型为块代码类型参数时,调用与所述块代码类型对应的定义信息,以实现在所述与所述中间表现形式相对应的正常测试用例中添加相应的块代码类型对应的定义信息。
上述方案中,
所述测试用例生成模块,用于当所述被测试函数所包含的参数类型为协议类型参数时,调用与所述协议类型参数相对应的监听代码,以实现对所述中间表现形式相对应的正常测试用例所包括的协议类型进行监听。
上述方案中,
所述测试用例生成模块,用于当所述被测试函数所包含的参数类型包括块代码类型参数和协议类型参数时,调用相应的异步等待代码,以在相应的异步正常测试用例中实现异步等待功能。
上述方案中,
所述测试用例生成模块,用于确定与所述目标代码相对应的接口的参数与相应的被测试函数;
所述测试用例生成模块,用于确定所述被测试函数所包含的参数类型、数量和对应的返回值类型;
所述测试用例生成模块,用于根据所述被测试函数所包含的参数类型和对应的返回值类型确定与所述参数数量相匹配的异常测试用例。
上述方案中,
所述测试用例生成模块,用于当所述目标代码相对应的接口的参数数量为至少两个时,确定与每一个参数相对应的正常值和异常值;
所述测试用例生成模块,用于根据所述与每一个参数相对应的正常值和异常值确定与至少一个参数相对应的正常测试用例,和与其他参数对应的异常测试用例。
本发明实施例还提供了一种服务器,所述服务器包括:
存储器,用于存储可执行指令;
处理器,用于运行所述存储器存储的可执行指令时,实现前序的的测试用例生成方法。
本发明实施例还提供了一种计算机可读存储介质,存储有可执行指令,其特征在于,所述可执行指令被处理器执行时实现前序的测试用例生成方法。
本发明实施例具有以下有益效果:
通过对目标代码进行解析,根据所形成的中间表现形式与相应的被测试函数生成参数,形成相应的正常测试用例;获取所述被测试函数的返回值类型,并根据所述被测试函数的返回值类型和所述正常测试用例返回值的类型确定对应的断言代码;根据所述被测试函数的参数类型以及返回值类型,确定相应的异常测试用例,实现了直接从接口源代码生成可以直接运行的异常测试用例和正常测试用例,节约了代码测试阶段的人力投入,提高了接口测试效率;同时降低了接口测试用例编写的难度。
附图说明
图1为本发明实施例提供的测试用例生成方法的使用场景示意图;
图2为本发明实施例提供的服务器的组成结构示意图;
图3为本发明实施例提供的测试用例生成方法一个可选的流程示意图;
图4为本发明实施例提供的测试用例生成方法一个可选的流程示意图;
图5为本发明实施例提供的测试用例生成方法一个可选的流程示意图;
图6为本发明实施例中表示词法单元的数据结构示意图;
图7为本发明实施例中语法解析单元处理流程示意图;
图8为本发明实施例中测试用例生成模块的数据结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,所描述的实施例不应视为对本发明的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
对本发明实施例进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。
1)响应于,用于表示所执行的操作所依赖的条件或者状态,当满足所依赖的条件或状态时,所执行的一个或多个操作可以是实时的,也可以具有设定的延迟;在没有特别说明的情况下,所执行的多个操作不存在执行先后顺序的限制。
2)测试用例(Test Case):用于执行一个测试功能,例如对于游戏而言,购买指定的装备,或者释放指定的技能,即可以作为一个测试用例。
3)测试脚本(Testing script):通过测试脚本可以自动执行全部测试过程或者部分测试过程,例如可以在测试脚本中编写好测试的逻辑顺序关系,在自动执行时,则会按照编写好的顺序来执行。
图1为本发明实施例提供的测试用例生成方法的使用场景示意图,参见图1,终端(包括终端10-1和终端10-2)上设置有能够执行不同功能相应客户端其中,所属客户端为终端(包括终端10-1和终端10-2)通过网络300从相应的服务器200中下载相应的目标代码实现,终端通过网络300连接服务器200,网络300可以是广域网或者局域网,又或者是二者的组合,使用无线链路实现数据传输,其中,软件源代码可以是由一种或多种编程语言编写的程序代码。软件源代码可以包括执行业务逻辑的程序文件和对执行业务逻辑的程序实体进行测试的测试程序文件。服务器200中可以从测试程序文件中提取需要测试的代码对象。另外,服务器200还可以执行业务逻辑的程序文件中提取代码对象的集合。这样,服务器200可以将需要测试的代码对象作为正样本,也可以将不需要测试的代码对象作为负样本。在本发明的一些实施例中,在进行软件测试之前,测试人员需要对软件代码中各个代码对象进行分析,以筛选出要测试的代码对象和不进行测试的代码对象。这里,一个代码对象是指软件中一个可测试的功能模块。在不同编程语言的软件代码中,代码对象可以是不同类型的代码实体。例如,在C语言的软件代码中,一个代码对象可以是一个函数。在JAVA语言的软件代码中,一个代码对象可以是一个类,IOS端OC语言中可以是一段目标代码。在C++语言的软件代码中,一个代码对象可以是一个类或一个函数。其中本申请中不再对代码(目标代码)对象的具体类型进行区分。
服务器200通过网络300向终端(终端10-1和/或终端10-2)发送相应的目标代码之前需要通过测试用例对目标代码进行相应的测试分析。作为一个事例,服务器200用于获取待分析的目标代码;对所述目标代码进行词语级的解析,形成对应的词法单元;响应于所形成的词法单元,对所述目标代码进行语句级的解析,形成相应的中间表现形式;根据所形成的中间表现形式与相应的被测试函数生成参数,形成相应的正常测试用例;获取所述被测试函数的返回值类型,并根据所述被测试函数的返回值类型和所述正常测试用例返回值的类型确定对应的断言代码;根据所述被测试函数的参数类型以及返回值类型,确定相应的异常测试用例,其中,所述正常测试用例和异常测试用例用于对所述目标代码进行测试。
下面对本发明实施例的服务器的结构做详细说明,服务器可以各种形式来实施,如带有多媒体信息处理功能的专用终端,也可以为带有多媒体信息处理功能的服务器,例如前述图1中的服务器200。图2为本发明实施例提供的服务器的组成结构示意图,可以理解,图2仅仅示出了服务器的示例性结构而非全部结构,根据需要可以实施图2示出的部分结构或全部结构。
本发明实施例提供的服务器包括:至少一个处理器201、存储器202、用户接口203和至少一个网络接口204。服务器200中的各个组件通过总线系统205耦合在一起。可以理解,总线系统205用于实现这些组件之间的连接通信。总线系统205除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统205。
其中,用户接口203可以包括显示器、键盘、鼠标、轨迹球、点击轮、按键、按钮、触感板或者触摸屏等。
可以理解,存储器202可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。本发明实施例中的存储器202能够存储数据以支持终端(如10-1)的操作。这些数据的示例包括:用于在终端(如10-1)上操作的任何计算机程序,如操作系统和应用程序。其中,操作系统包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。应用程序可以包含各种应用程序。
在一些实施例中,本发明实施例提供的测试用例生成装置可以采用软硬件结合的方式实现,作为示例,本发明实施例提供的测试用例生成装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本发明实施例提供的测试用例生成方法。例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application SpecificIntegrated Circuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
作为本发明实施例提供的测试用例生成装置采用软硬件结合实施的示例,本发明实施例所提供的测试用例生成装置可以直接体现为由处理器201执行的软件模块组合,软件模块可以位于存储介质中,存储介质位于存储器202,处理器201读取存储器202中软件模块包括的可执行指令,结合必要的硬件(例如,包括处理器201以及连接到总线205的其他组件)完成本发明实施例提供的测试用例生成方法。
作为示例,处理器201可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
作为本发明实施例提供的测试用例生成装置采用硬件实施的示例,本发明实施例所提供的装置可以直接采用硬件译码处理器形式的处理器201来执行完成,例如,被一个或多个应用专用集成电路(ASIC,Application Specific Integrated Circuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,ComplexProgrammable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable GateArray)或其他电子元件执行实现本发明实施例提供的测试用例生成方法。
本发明实施例中的存储器202用于存储各种类型的数据以支持服务器200的操作。这些数据的示例包括:用于在服务器200上操作的任何可执行指令,如可执行指令,实现本发明实施例的从测试用例生成方法的程序可以包含在可执行指令中。
在另一些实施例中,本发明实施例提供的测试用例生成装置可以采用软件方式实现,图2示出了存储在存储器202中的测试用例生成装置2020,其可以是程序和插件等形式的软件,并包括一系列的模块,作为存储器202中存储的程序的示例,可以包括测试用例生成装置2020,测试用例生成装置2020中包括以下的软件模块:源代码解析模块2081,测试用例生成模块2082。当测试用例生成装置2020中的软件模块被处理器201读取到RAM中并执行时,将实现本发明实施例提供的测试用例生成方法,下面对测试用例生成装置2020中各个软件模块的功能进行介绍:
源代码解析模块2081,用于获取待分析的目标代码;
所述源代码解析模块2081,用于对所述目标代码进行词语级的解析,形成对应的词法单元;
所述源代码解析模块2081,用于响应于所形成的词法单元,对所述目标代码进行语句级的解析,形成相应的中间表现形式;
测试用例生成模块2082,用于根据所形成的中间表现形式与相应的被测试函数生成参数,形成相应的正常测试用例;
所述测试用例生成模块2082,用于获取所述被测试函数的返回值类型,并根据所述被测试函数的返回值类型和所述正常测试用例返回值的类型确定对应的断言代码;
所述测试用例生成模块2082,用于根据所述被测试函数的参数类型以及返回值类型,确定相应的异常测试用例,其中,所述正常测试用例和异常测试用例用于对所述目标代码进行测试。
结合图2示出的服务器200说明本发明实施例提供的测试用例生成方法,参见图3,图3为本发明实施例提供的测试用例生成方法一个可选的流程示意图,可以理解地,图3所示的步骤可以由运行测试用例生成装置的各种服务器执行,例如可以是如带有测试用例生成功能的专用终端、服务器或者服务器集群。下面针对图3示出的步骤进行说明。
步骤301:服务器获取待分析的目标代码。
在本发明的一些实施例中,终端可以向服务器发出相应的下载请求,以获取不同的目标代码,其中,所述目标代码可以封装于不同的应用程序中,服务器根据终端对应的不同下载请求获取待分析的目标代码。
步骤302:对所述目标代码进行词语级的解析,形成对应的词法单元。
在本发明的一些实施例中,对所述目标代码进行词语级的解析,形成对应的词法单元,可以通过以下方式实现:
确定所述词法单元所对应的词法类型与所述词法单元的数据结构;根据所述词法单元的数据结构与相应的词法类型,对所述待分析的目标代码词语级的解析,形成对应的词法单元。其中,词法单元可以是一个具有特定含义的标记,是后续进行语法分析的最小分析单元。例如:目标代码对应的语句为:”Int x=7;”,通过步骤302所示的词法解析,形成相应的解析成词法单元列表:“Int”、“x”、“=”、“7”。
步骤303:响应于所形成的词法单元,对所述目标代码进行语句级的解析,形成相应的中间表现形式。
在本发明的一些实施例中,响应于所形成的词法单元,对所述目标代码进行语句级的解析,形成相应的中间表现形式,可以通过以下方式实现:
确定所述词法单元所对应的文法规则;根据所述文法规则对所述目标代码所对应的词法单元进行解析;将所述目标代码所对应的词法单元的解析结果保存在相应的数据结构中,形成与所述目标代码相对应的中间表现形式。其中,语法解析器可以根据语言的文法规则扫描所有词法单元,同时生成中间表示形式(IR),可选的所述中间表示形式(IR)的表现形式可以为一棵抽象语法树(AST,Abstract Syntax Tree),之后的语义分析阶段会基于这一步生成的AST进行分析。
上述过程中只需要部分源代码的信息,所以简化了语法分析流程,以OC语言为例,只需要根据OC语言的文法规则扫描相应的词法单元流,把生成测试用例的代码信息保存在相应的数据结构中,供生成接口测试用例使用。
步骤304:根据所形成的中间表现形式与相应的被测试函数生成参数,形成相应的正常测试用例。
在本发明的一些实施例中,据所形成的中间表现形式与相应的被测试函数生成参数,形成相应的正常测试用例,可以通过以下方式实现:
获取与目标代码相对应的接口的参数与相应的被测试函数;确定所述被测试函数所包含的参数类型;根据所述被测试函数所包含的参数类型对所述中间表现形式进行处理,形成与所述中间表现形式相对应的正常测试用例。其中,可以根据获取的接口代码数据,自动生成用例代码框架,其中,接口的参数包括:接口名称、返回值类型、参数列表、类名称等数据,其中,被测试函数的内容包括:引入依赖头文件,测试类定义,setup/teardown函数,用例注释信息,用例函数代码。
下面对形成与中间表现形式相对应的正常测试用例的过程进行说明。
参考图4,结合图2示出的服务器200说明本发明实施例提供的测试用例生成方法,参见图4,图4为本发明实施例提供的测试用例生成方法一个可选的流程示意图,可以理解地,图4所示的步骤可以由运行测试用例生成装置的各种服务器执行,例如可以是如带有测试用例生成功能的专用终端、服务器或者服务器集群。下面针对图4示出的步骤进行说明。其中步骤301-303如前所述不再赘述。
步骤3041:当所述被测试函数所包含的参数类型为块代码类型参数时,调用与所述块代码类型对应的定义信息。
通过所述步骤3041,可以实现在所述与所述中间表现形式相对应的正常测试用例中添加相应的块代码类型对应的定义信息。
步骤3042:当所述被测试函数所包含的参数类型为协议类型参数时,调用与所述协议类型参数相对应的监听代码。
通过所述步骤3042,可以实现对所述中间表现形式相对应的正常测试用例所包括的协议类型进行监听,以配合获取返回值生成相应的的断言代码。
步骤3043:当所述被测试函数所包含的参数类型包括块代码类型参数和协议类型参数时,调用相应的异步等待代码。
通过所述步骤3043,可以实现在相应的异步正常测试用例中实现异步等待功能。
步骤305:获取所述被测试函数的返回值类型,并根据所述被测试函数的返回值类型和所述正常测试用例返回值的类型确定对应的断言代码。
在本发明的一些实施例中,返回值类型与断言代码示例的映射关系如表1所示,其中,仅有生成正确的并且完整的的断言代码才能配合测试用例的对目标代码进行检测。
Figure BDA0002140781340000121
表1
步骤306:根据所述被测试函数的参数类型以及返回值类型,确定相应的异常测试用例。
其中,所述正常测试用例和异常测试用例用于对所述目标代码进行测试。
在本发明的一些实施例中,根据所述被测试函数的参数类型以及返回值类型,确定相应的异常测试用例,可以通过以下方式实现:
确定与所述目标代码相对应的接口的参数与相应的被测试函数;确定所述被测试函数所包含的参数类型、数量和对应的返回值类型;根据所述被测试函数所包含的参数类型和对应的返回值类型确定与所述参数数量相匹配的异常测试用例。其中,通过本实施例所示的技术方案,可以生成一定数量的异常用例,例如:函数有1个参数,类型是String,那么就会生成2种异常值:NULL和空字符串,从而生成2条异常用例。进一步地,如果有多个参数,首先生成对应参数的异常值和正常值,然后生成正常测试用例。
在本发明的一些实施例中,根据所述被测试函数所包含的参数类型和对应的返回值类型确定与所述参数数量相匹配的异常测试用例,可以通过以下方式实现:
当所述目标代码相对应的接口的参数数量为至少两个时,确定与每一个参数相对应的正常值和异常值;根据所述与每一个参数相对应的正常值和异常值确定与至少一个参数相对应的正常测试用例,和与其他参数对应的异常测试用例。其中,异常测试用例生成过程中参数类型与异常值的映射列表如表2所示。
类型 异常值列表
BOOL YES,NO
NSInteger -1,0
id nil
NSString nil,@””
表2
参考图5,结合图5示出的服务器200说明本发明实施例提供的测试用例生成方法,参见图5,图5为本发明实施例提供的测试用例生成方法一个可选的流程示意图,可以理解地,图5所示的步骤可以由运行测试用例生成装置的各种服务器执行,例如可以是如带有测试用例生成功能的专用终端、服务器或者服务器集群。下面针对图5示出的步骤进行说明。
步骤501:获取被测试源代码。
步骤502:调用源代码解析模块进行源代码解析。
其中,本发明中源码解析模块包括2个单元,即词法解析单元和语法解析单元。其中,
1)词法解析单元
词法解析是对被测源码解析的第一步,目的是将被测代码解析成一系列的词法单元,也是编译器解析代码的第一步。其中词法单元是一个具有特定含义的标记,是后续进行语法分析的最小单元。其中,词法单元可以是一个具有特定含义的标记,是后续进行语法分析的最小分析单元。例如:目标代码对应的语句为:”Int x=7;”,通过步骤302所示的词法解析,形成相应的解析成词法单元列表:“Int”、“x”、“=”、“7”。
其中,参考图6,图6为本发明实施例中表示词法单元的数据结构示意图,包括:
Figure BDA0002140781340000141
同时为了表示词法单元的类型,可以对枚举类型词法类型进行设置,其中定义了变量名称、符号(冒号、逗号等)、OC关键词(interface、typedef、enmu等)。
Figure BDA0002140781340000142
接下来,读取相应的目标代码,逐字符的解析代码行,进而将被测源代码解析成临时(Token)数组。
2)语法解析单元
在词法解析单元的基础上,进行语法解析。具体包括:语法解析器根据语言的文法规则扫描词法单元流,同时生成中间表示形式(IR),例如生成一棵抽象语法树(AST),之后的语义分析阶段会基于这一步生成的AST进行分析。
参考图7,图7为本发明实施例中语法解析单元处理流程示意图,具体包括以下步骤:
步骤701:确定相应的类的定义;
步骤702:确定目标函数的定义;
步骤703:对目标函数进行调用;
步骤704:确定类的成员变量及定义;
步骤705:确定协议定义和块代码的定义。
步骤706:获取枚举定义;
步骤707:对目标代码进行语句级的解析,形成相应的中间表现形式。
其中,通过本发明所示的实施例只需要部分源代码的信息,所以简化了语法分析流程,只根据OC语言的文法规则扫描词法单元流,把所需要的代码信息存入特定的数据结构中,供后续自动生成接口测试用例代码使用,并把获取的代码信息存入字典数据中。
步骤503:调用测试用例生成模块获得正常测试用例和异常测试用例。
步骤504:检测正常测试用例和异常测试用例。
步骤505:进行补充获得完整的测试用例代码。
其中,参考图8,图8为本发明实施例中测试用例生成模块的数据结构示意图;通过图8所示的测试用例生成模块,生成可执行的异常用例代码和正常用例代码。具体的,包括用例代码生成单元、断言生成单元、参数异常值生成单元和增量生成单元。下面分别介绍
1)用例代码生成单元
本发明首先根据获取的接口代码数据,包括接口名称、返回值类型、参数列表、类名称等数据,自动生成用例代码框架,其中包括引入依赖头文件,测试类定义,setup/teardown接口,用例注释信息,用例接口代码。
其中生成的用例接口代码基本结构如下所示:
-(void)test用例名称(){
被测接口返回类型result=[被测类对象被测接口];
}
例如使用如下代码示例:接口X定义如下
//block代码块定义,名称为b,返回值为void,有2个参数
Typedef void(^b)(NSArray*name,NSError*error);
//监听类协议定义,名称为p,有一个接口
@protocol p<NSObject>
-(void)methodX:(NSString*)name;
@end
//类A的定义
@interface A:NSObjct
//类A含有属性变量age,类型为Int
@property Int age;
@end
//接口X定义,返回值类型是类A,有2个参数,一个是block参数类型succ,一个//是协议类型fail
-(A)X:(b)succ:(p)fail;
为了达到生成的测试用例可以直接编译运行,在本发明在生成X被测接口测试用例代码的时候,有以下3中情况需要考虑:
A)接口的参数中含有Block块代码类型,需要从获取的代码数据中获取该Block定义,补充到接口调用代码中;
B)接口的参数中含有协议类型参数,需要从获取的代码数据中获取该监听类的定义,并且在代码中自动实现该监听类方法,以便获取返回值生成后续的断言代码;
C)针对以上2种类型的异步测试用例,需要实现异步等待代码;
其中,以上信息基本上都是通用的、重复的代码信息,自动生成可以有效地节约人工成本,提高测试效率。
2)断言生成单元
其中,正确的并且完善的断言代码才能达到测试用例的作用。本发明在被测源代码的基础上,根据被测接口的返回值类型,以及异步测试用例返回值的类型生成正确的断言代码;然后如果返回值类型是类对象,本发明就会从代码数据中获取类的成员变量,对成员变量进行断言代码,从而生成完善的断言代码。
本发明中为了自动生成正确的断言代码,使用了类型映射机制,具体对应关系前序表1所示,不在赘述。
3)参数异常值生成模块
在本发明的一些实施例中,可以根据接口的参数类型以及返回值类型,生成一定数量的异常用例,例如接口有1个参数,类型是String,那么就会生成2种异常值:NULL和空字符串,从而生成2条异常用例。如果有多个参数,首先生成对应参数的异常值和正常值,然后根据生成算法,生成测试用例,其中,生成算法如下所示:
首先取所有参数中的任意一个正常值,组成一条正常测试用例;然后一个参数取任意一个正常值,其余参数取任意一个异常值,组成异常测试用例,三个参数,会生成对应三条异常测试用例;最后取所有参数中的任意一个异常值,组成一条异常测试用例;其中异常生成映射表前序表2所示,不在赘述。
4)增量生成模块
如果被测代码文件中的接口有变动,那么之前自动生成的对应接口的测试用例就会报错,导致持续化集成失败,所以就需要工具具有增量生成的功能,解决类似的问题。
增量生成的处理过程包括:
A)扫描已生成的测试用例代码,取得被测接口与对应的测试用例列表A;
B)扫描最新的被测代码,取得最新的接口列表B;
C)比较A、B接口列表,获取增量信息,包括新增的接口列表以及删除的接口列表,其中部分修改的接口认为是新增的接口;
D)根据增量信息,对新增的接口列表,重新生成对应的测试用例,对删除的接口列表,将对应的旧测试用例注释掉。
至此完成了生成与待分析的目标代码对应的正常测试用例和异常测试用例。
本发明具有以下有益技术效果:
1)对于复杂场景的业务逻辑,和多语言的编译环境通过对目标代码进行解析,根据所形成的中间表现形式与相应的被测试函数生成参数,形成相应的正常测试用例;获取所述被测试函数的返回值类型,并根据所述被测试函数的返回值类型和所述正常测试用例返回值的类型确定对应的断言代码;根据所述被测试函数的参数类型以及返回值类型,确定相应的异常测试用例,实现了直接从接口源代码生成可以直接运行的异常测试用例和正常测试用例,节约了代码测试阶段的人力投入,提高了接口测试效率。
2)帮助对运行环境不熟悉的编译人员快速编写接口正常测试用例代码,同时降低了接口测试用例编写的难度。
以上所述,仅为本发明的实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种测试用例生成方法,其特征在于,所述方法包括:
获取待分析的目标代码;
对所述目标代码进行词语级的解析,形成对应的词法单元;
响应于所形成的词法单元,对所述目标代码进行语句级的解析,形成相应的中间表现形式;
根据所形成的中间表现形式与相应的被测试函数生成参数,形成相应的正常测试用例;
获取所述被测试函数的返回值类型,并根据所述被测试函数的返回值类型和所述正常测试用例返回值的类型确定对应的断言代码;
根据所述被测试函数的参数类型以及返回值类型,确定相应的异常测试用例,其中,所述正常测试用例和异常测试用例用于对所述目标代码进行测试。
2.根据权利要求1所述的方法,其特征在于,所述对所述目标代码进行词语级的解析,形成对应的词法单元,包括:
确定所述词法单元所对应的词法类型与所述词法单元的数据结构;
根据所述词法单元的数据结构与相应的词法类型,对所述待分析的目标代码词语级的解析,形成对应的词法单元。
3.根据权利要求1所述的方法,其特征在于,所述响应于所形成的词法单元,对所述目标代码进行语句级的解析,形成相应的中间表现形式,包括:
确定所述词法单元所对应的文法规则;
根据所述文法规则对所述目标代码所对应的词法单元进行解析;
将所述目标代码所对应的词法单元的解析结果保存在相应的数据结构中,形成与所述目标代码相对应的中间表现形式。
4.根据权利要求1所述的方法,其特征在于,所述根据所形成的中间表现形式与相应的被测试函数生成参数,形成相应的正常测试用例,包括:
获取与所述目标代码相对应的接口的参数与相应的被测试函数;
确定所述被测试函数所包含的参数类型;
根据所述被测试函数所包含的参数类型对所述中间表现形式进行处理,形成与所述中间表现形式相对应的正常测试用例。
5.根据权利要求4所述的方法,其特征在于,所述根据所述被测试函数所包含的参数类型对所述中间表现形式进行处理,形成与所述中间表现形式相对应的正常测试用例,包括:
当所述被测试函数所包含的参数类型为块代码类型参数时,调用与所述块代码类型对应的定义信息,以实现在所述与所述中间表现形式相对应的正常测试用例中添加相应的块代码类型对应的定义信息。
6.根据权利要求4所述的方法,其特征在于,所述根据所述被测试函数所包含的参数类型对所述中间表现形式进行处理,形成与所述中间表现形式相对应的正常测试用例,包括:
当所述被测试函数所包含的参数类型为协议类型参数时,调用与所述协议类型参数相对应的监听代码,以实现对所述中间表现形式相对应的正常测试用例所包括的协议类型进行监听。
7.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当所述被测试函数所包含的参数类型包括块代码类型参数和协议类型参数时,调用相应的异步等待代码,以在相应的异步正常测试用例中实现异步等待功能。
8.一种测试用例生成装置,其特征在于,所述装置包括:
源代码解析模块,用于获取待分析的目标代码;
所述源代码解析模块,用于对所述目标代码进行词语级的解析,形成对应的词法单元;
所述源代码解析模块,用于响应于所形成的词法单元,对所述目标代码进行语句级的解析,形成相应的中间表现形式;
测试用例生成模块,用于根据所形成的中间表现形式与相应的被测试函数生成参数,形成相应的正常测试用例;
所述测试用例生成模块,用于获取所述被测试函数的返回值类型,并根据所述被测试函数的返回值类型和所述正常测试用例返回值的类型确定对应的断言代码;
所述测试用例生成模块,用于根据所述被测试函数的参数类型以及返回值类型,确定相应的异常测试用例,其中,所述正常测试用例和异常测试用例用于对所述目标代码进行测试。
9.一种服务器,其特征在于,所述服务器包括:
存储器,用于存储可执行指令;
处理器,用于运行所述存储器存储的可执行指令时,实现权利要求1至7任一项所述的测试用例生成方法。
10.一种计算机可读存储介质,存储有可执行指令,其特征在于,所述可执行指令被处理器执行时实现权利要求1至7任一项所述的测试用例生成方法。
CN201910668177.1A 2019-07-23 2019-07-23 一种测试用例生成方法、装置、服务器及存储介质 Active CN112286784B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910668177.1A CN112286784B (zh) 2019-07-23 2019-07-23 一种测试用例生成方法、装置、服务器及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910668177.1A CN112286784B (zh) 2019-07-23 2019-07-23 一种测试用例生成方法、装置、服务器及存储介质

Publications (2)

Publication Number Publication Date
CN112286784A true CN112286784A (zh) 2021-01-29
CN112286784B CN112286784B (zh) 2024-05-10

Family

ID=74418704

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910668177.1A Active CN112286784B (zh) 2019-07-23 2019-07-23 一种测试用例生成方法、装置、服务器及存储介质

Country Status (1)

Country Link
CN (1) CN112286784B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113138937A (zh) * 2021-05-18 2021-07-20 中国建设银行股份有限公司 测试方法和装置
CN114328060A (zh) * 2022-03-14 2022-04-12 江苏清微智能科技有限公司 一种可复用测试用例框架、构建方法及电子设备
CN116010285A (zh) * 2023-02-27 2023-04-25 北京安盟信息技术股份有限公司 云密码服务产品sdk自动化测试方法、系统、介质及设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103530223A (zh) * 2012-07-06 2014-01-22 百度在线网络技术(北京)有限公司 一种自动生成单元测试用例的方法及装置
KR20160044305A (ko) * 2014-10-15 2016-04-25 삼성에스디에스 주식회사 코드의 단위 테스트를 위한 장치 및 방법
CN105760292A (zh) * 2014-12-18 2016-07-13 阿里巴巴集团控股有限公司 一种用于单元测试的断言验证方法和装置
CN106354638A (zh) * 2016-08-29 2017-01-25 广州唯品会信息科技有限公司 基于词法分析的自动测试方法及装置
CN107133174A (zh) * 2017-05-04 2017-09-05 浙江路港互通信息技术有限公司 测试用例代码自动生成装置与方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103530223A (zh) * 2012-07-06 2014-01-22 百度在线网络技术(北京)有限公司 一种自动生成单元测试用例的方法及装置
KR20160044305A (ko) * 2014-10-15 2016-04-25 삼성에스디에스 주식회사 코드의 단위 테스트를 위한 장치 및 방법
CN105760292A (zh) * 2014-12-18 2016-07-13 阿里巴巴集团控股有限公司 一种用于单元测试的断言验证方法和装置
CN106354638A (zh) * 2016-08-29 2017-01-25 广州唯品会信息科技有限公司 基于词法分析的自动测试方法及装置
CN107133174A (zh) * 2017-05-04 2017-09-05 浙江路港互通信息技术有限公司 测试用例代码自动生成装置与方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113138937A (zh) * 2021-05-18 2021-07-20 中国建设银行股份有限公司 测试方法和装置
CN114328060A (zh) * 2022-03-14 2022-04-12 江苏清微智能科技有限公司 一种可复用测试用例框架、构建方法及电子设备
CN116010285A (zh) * 2023-02-27 2023-04-25 北京安盟信息技术股份有限公司 云密码服务产品sdk自动化测试方法、系统、介质及设备

Also Published As

Publication number Publication date
CN112286784B (zh) 2024-05-10

Similar Documents

Publication Publication Date Title
US7937692B2 (en) Methods and systems for complete static analysis of software for building a system
US8527965B2 (en) Layered static program analysis framework for software testing
US8875110B2 (en) Code inspection executing system for performing a code inspection of ABAP source codes
US8099721B2 (en) Parsing of declarations in all branches of preprocessor conditionals
US10229042B2 (en) Detection of meaningful changes in content
US20130125098A1 (en) Transformation of Computer Programs
CN112286784B (zh) 一种测试用例生成方法、装置、服务器及存储介质
US20070050704A1 (en) XML compiler that will generate an application specific XML parser
CN101751281A (zh) 编译器生成系统和方法
CN112100072B (zh) 应用程序代码的静态检测方法、装置、设备及介质
US9311077B2 (en) Identification of code changes using language syntax and changeset data
US6763360B2 (en) Automated language and interface independent software testing tool
CN113901083A (zh) 基于多解析器的异构数据源操作资源解析定位方法和设备
US10839124B1 (en) Interactive compilation of software to a hardware language to satisfy formal verification constraints
Chen et al. Hopper: Interpretative fuzzing for libraries
CN109471637B (zh) 电路图的审查脚本调试方法
US6957419B2 (en) Facilitating the use of aliases during the debugging of applications
JP2010140407A (ja) ソースコード検査装置
CN110737431B (zh) 软件开发方法、开发平台、终端设备及存储介质
CN111399842B (zh) 一种代码编译方法及装置
CN114691197A (zh) 代码分析方法、装置、电子设备和存储介质
US11119740B2 (en) Parsability of code snippets
CN112988578A (zh) 一种自动化测试方法和装置
Joshi et al. Automatic generation of fault trees from AADL models
CN112162738B (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