CN114924966A - 基于数据库pl语言的测试用例生成方法以及装置 - Google Patents
基于数据库pl语言的测试用例生成方法以及装置 Download PDFInfo
- Publication number
- CN114924966A CN114924966A CN202210577502.5A CN202210577502A CN114924966A CN 114924966 A CN114924966 A CN 114924966A CN 202210577502 A CN202210577502 A CN 202210577502A CN 114924966 A CN114924966 A CN 114924966A
- Authority
- CN
- China
- Prior art keywords
- tested
- statement
- test case
- target
- database
- 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
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/3676—Test management for coverage analysis
-
- 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
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
本说明书实施例提供基于数据库PL语言的测试用例生成方法以及装置,其中所述基于数据库PL语言的测试用例生成方法包括:确定待测试结构文件中的至少一个待测试执行部分;在每个待测试执行部分中随机选择待测试语句类型;基于所述待测试语句类型随机选择待测试语句标识,并基于所述待测试语句标识在所述每个待测试执行部分中确定目标测试语句;基于所述每个待测试执行部分中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例,不仅能够自动生成各种复杂的PL语句的测试用例,增加测试覆盖面,还可以代替手动构造测试用例,以减少数据库的测试耗时。
Description
技术领域
本说明书实施例涉及数据库技术领域,特别涉及一种基于数据库PL语言的测试用例生成方法。
背景技术
PL语言,又称PL/SQL(Procedural Language/SQL)语言,是一种程序语言,即过程化SQL语言。PL/SQL是数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。对此,由于PL语句的语法比较复杂,开发人员在对数据库的PL/SQL语句进行测试时,通过手动编写针对PL语句的测试用例,该种方式不仅会占用大量的时间和精力,并且对于复杂的测试用例也很难通过手动编写的方式实现,进而,使得数据库的测试消耗时长过长,且测试覆盖面也较窄。
发明内容
有鉴于此,本说明书实施例提供了一种基于数据库PL语言的测试用例生成方法。本说明书一个或者多个实施例同时涉及一种基于数据库PL语言的测试用例生成装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,以解决现有技术中存在的技术缺陷。
根据本说明书实施例的第一方面,提供了一种基于数据库PL语言的测试用例生成方法,包括:
确定待测试结构文件中的至少一个待测试执行部分;
在每个待测试执行部分中随机选择待测试语句类型;
基于所述待测试语句类型随机选择待测试语句标识,并基于所述待测试语句标识在所述每个待测试执行部分中确定目标测试语句;
基于所述每个待测试执行部分中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例。
根据本说明书实施例的第二方面,提供了一种基于数据库PL语言的测试用例生成装置,包括:
确定模块,被配置为确定待测试结构文件中的至少一个待测试执行部分;
第一随机选择模块,被配置为在每个待测试执行部分中随机选择待测试语句类型;
第二随机选择模块,被配置为基于所述待测试语句类型随机选择待测试语句标识,并基于所述待测试语句标识在所述每个待测试执行部分中确定目标测试语句;
测试用例生成模块,被配置为基于所述每个待测试执行部分中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例。
根据本说明书实施例的第三方面,提供了一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现上述基于数据库PL语言的测试用例生成方法的步骤。
根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现上述基于数据库PL语言的测试用例生成方法的步骤。
根据本说明书实施例的第五方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述基于数据库PL语言的测试用例生成方法的步骤。
本说明书一个实施例提供的基于数据库PL语言的测试用例生成方法,确定待测试结构文件中的至少一个待测试执行部分;在每个待测试执行部分中随机选择待测试语句类型;基于所述待测试语句类型随机选择待测试语句标识,并基于所述待测试语句标识在所述每个待测试执行部分中确定目标测试语句;基于所述每个待测试执行部分中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例。
具体的,通过在数据库中的待测试结构文件中确定待测试执行部分,并根据语句类型随机选择待测试的语句类型,进而,再从每个语句类型中随机选择语句标识对应的目标测试语句,按照语法规则自动生成目标测试用例,该种方式是通过随机组合各种PL语句,实现自动生成可执行的PL语句的测试用例,不仅能够自动生成各种复杂的PL语句的测试用例,增加测试覆盖面,还可以代替手动构造测试用例,以减少数据库的测试耗时。
附图说明
图1是本说明书一个实施例提供的一种基于数据库PL语言的测试用例生成方法的示意图;
图2是本说明书一个实施例提供的一种基于数据库PL语言的测试用例生成方法的流程图;
图3是本说明书一个实施例提供的一种基于数据库PL语言的测试用例生成方法应用于匿名块随机生成测试用例示意图;
图4是本说明书一个实施例提供的一种基于数据库PL语言的测试用例生成装置的结构示意图;
图5是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
PL/SQL(Procedural Language/SQL,一种过程化语言):用来实现比较复杂的业务逻辑。PL/SQL程序都是以块(block)为基本单位,整个PL/SQL块分三部分:声明部分(用declare开头)、执行部分(以begin开头)和异常处理部分(以exception开头)。其中执行部分是必须的,其他两个部分可选。PL/SQL主要用于数据库编程,所以其所有的数据类型跟Oracle数据库里的字段类型是一一对应的,大体分为数字型、布尔型、字符型和日期型。
结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单地调用相应语句来直接取得结果即可。
游标:用游标来指代一个DML SQL操作返回的结果集。即当一个对数据库的查询操作返回一组结果集时,用游标来标注这组结果集,以后通过对游标的操作来获取结果集中的数据信息。
模块化:是一种处理复杂系统分解为更好的可管理模块的方式。即解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程,有多种属性,分别反映其内部特性。
测试用例(Test Case):是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。其内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,最终形成文档。简单地认为,测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,用于核实是否满足某个特定软件需求。
PL是一种过程化程序语言(Procedural Language,PL)。它是对SQL的扩展,在普通SQL语句的基础上增加了编程语言的特点,把数据操作和查询语句组织在PL代码的过程化代码中,通过逻辑判断、循环等操作实现复杂的功能。由于PL语句的语法比较复杂,通过手动编写PL case(PL语句测试用例)的方式会占据大量时间和精力,并且一些复杂的case可能难以通过手动编写的方式实现。
基于此,本说明书实施例提供的一种基于数据库PL语言的测试用例生成方法,这种测试方法的目标是通过随机组合各种语句,自动形成一条可执行的PL case,也即是,通过随机生成的方式能自动生成各种复杂的PL语句,可以替代手动构造case,减少测试耗时,增加测试覆盖面。
在本说明书中,提供了一种基于数据库PL语言的测试用例生成方法,本说明书同时涉及一种基于数据库PL语言的测试用例生成装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,在下面的实施例中逐一进行详细说明。
参见图1,图1示出了根据本说明书一个实施例提供的一种基于数据库PL语言的测试用例生成方法的示意图。
需要说明的是,本说明书实施例提及的数据库包括但不限于Oracle数据库、OceanBase数据库,对此数据库的类型则不做任何限定,即利用PL语言创建的数据库,可使用本方案中提出的测试用例生成方法,以代替手动构造测试用例对数据库的测试过程。
图1中包括数据库的PL语句102的示意图结构、以及测试用例104的示意图结构;其中,两者之间的关系是根据数据库的PL语句102中的PL执行语句,可自动生成测试用例104。
实际应用中,图1中的数据库的PL语句102部分,以数据库中的匿名块为例展示数据库中PL执行语句,其中,匿名块包括DECLARE(声明部分)以及BEGIN-END(执行部分);进一步地,服务器自动生成测试用例104中,同样也包括DECLARE(声明部分)以及BEGIN-END(执行部分)这两个部分。具体的,服务器先确定数据库的PL语句中包括几个执行部分,并对每个执行部分执行随机选取PL语句的操作,比如,针对DECLARE部分(声明部分),原数据库中的PL语句包括S1和S2,通过随机选择操作,从S1和S2中随机选择一个PL语句,例如S2;针对BEGIN-END部分(执行部分),原数据库中PL语句包括Z1、Z2以及Z3,通过随机选择操作,从Z1、Z2以及Z3中随机选择一个PL语句,例如Z2;进一步地,在上述对每一个PL语句的执行部分进行随机选择之后,即可按照匿名块的语法结构自动生成测试用例,如图1中的测试用例104所示。
通过上述对数据库中的语法结构,对所有的PL执行语句随机选择每个部分的PL执行语句,进而服务器可自动生成测试用例,该种方式一方面不仅能够自动生成各种复杂的PL测试用例,另一方面还可替代手动构造数据库PL语句的测试用例,减少测试耗时问题,增加测试覆盖面。
参见图2,图2示出了根据本说明书一个实施例提供的一种基于数据库PL语言的测试用例生成方法的流程图,具体包括以下步骤。
步骤202:确定待测试结构文件中的至少一个待测试执行部分。
其中,待测试结构文件可以理解为数据库中所包含的各种语法结构对应的代码文件,比如数据库中包括匿名块、程序包、函数、存储过程和触发器等语法结构,待测试结构文件即可理解为上述语法结构中的一个结构文件。
待测试执行部分可以理解为各个语法结构中根据语法规则所划分的代码执行部分,比如,以匿名块为例,该匿名块中所包含的待测试执行部分可包括声明部分、执行部分以及异常处理部分,其中,该异常处理部分为可选部分。
实际应用中,服务器可确定数据库中的各个语法结构,从各个语法结构中确定出待测试结构文件,比如匿名块,那么,服务器可针对该匿名块的PL语句执行部分,自动生成测试用例,具体的,先从该匿名块中确定出至少一个待测试执行部分,比如声明部分、执行部分以及异常处理部分。
进一步地,服务器可根据每个待测试结构文件中的语法规则,确定出至少一个待测执行部分,便于后续从每个待测试执行部分分别随机选择出相应的PL语句;具体的,所述确定待测试结构文件中的至少一个待测试执行部分,包括:
确定待测试结构文件中的语法规则;
基于所述语法规则在所述待测试结构文件中,确定至少一个待测试执行部分。
其中,语法规则可以理解为待测试结构文件对应的PL语言的执行规则,不同的待测试结构文件可对应不同的语法规则,这是PL语言应用于数据库中的自身的语法规则。
实际应用中,服务器在确定各个待测试结构文件中的待测试执行部分时,可根据待测试结构文件本身的语法规则,确定出至少一个待测试执行部分;由于每个待测试结构文件对应的语法规则可能并不相同,那么确定出的待测试执行部分也并不相同。
本说明书实施例提供的测试用例生成方法,可根据语法规则,从待测试结构文件中确定出多个待测试执行部分,便于后续从确定好的待测试执行部分随机选取测试用例的组成部分。
步骤204:在每个待测试执行部分中随机选择待测试语句类型。
其中,待测试语句类型可以理解为数据库中的待测试执行部分所包括的PL语句的类型,比如匿名块中的声明部分,可包括变量定义、复合类型定义、Table类型定义、游标定义等。
实际应用中,服务器可从数据库的PL执行语句中确定的待测试执行部分,随机选择出待测试语句类型,其中,该待测试语句类型的数量不作任何限定,可根据定义语句之间的关系,随机选择待测试语句类型。
服务器针对随机选择的操作步骤,可通过设置随机数,随机选择其中一种PL语句,进而组成针对该待测试执行部分的测试用例的组成部分;具体的,所述在每个待测试执行部分中随机选择待测试语句类型,包括:
在每个待测试执行部分中,确定至少一个初始语句类型;
为每个初始语句类型分别设置第一随机数,并基于所述第一随机数,在所述至少一个初始语句类型中随机选择待测试语句类型。
其中,初始语句类型可以理解为针对具体项目场景下的数据库中所包括的待测试语句类型。
第一随机数可以理解为为PL语句设置的标识,比如可为阿拉伯数据,0、1、2、3等,本实施例对此不作具体限定。
实际应用中,服务器在确定了各个待测试结构文件中的待测试执行部分之后,还可确定待测试执行部分中的初始语句类型,比如,在匿名块的声明部分,具有6个初始语句类型的定义,分别可包括变量定义语句、复合类型定义语句、Table类型定义语句、游标定义语句、函数定义语句以及存储过程定义语句,那么,服务器可从上述6个初始语句类型中随机选择一个初始语句类型,作为待测试语句类型;具体的,可为每个初始语句类型设置一个随机数,后续可根据设置好的随机数,随机选择出待测试语句类型,将作为后续生成测试用例的匿名块的声明部分所执行的PL语句。
需要说明的是,根据随机数进行随机选择的操作可依赖于随机选择器,或者其他能够实现随机选择操作的方式,本说明书实施例对此不作任何限定。
本说明书实施例提供的测试用例生成方法,可通过设置随机数的方式,实现对待测试执行部分中的至少一个初始语句类型进行随机选择,便于后续自动生成测试用例。
步骤206:基于所述待测试语句类型随机选择待测试语句标识,并基于所述待测试语句标识在所述每个待测试执行部分中确定目标测试语句。
其中,待测试语句标识可以理解为每个待测试语句类型中所具体定义PL语句的标识,比如在匿名块中的变量定义中,可包括基本类型变量的语句标识、复合类型变量的语句标识、Table类型变量的语句标识。
目标测试语句可以理解为根据待测试语句标识最终选择出的PL执行语句,比如基本类型变量所对应的PL执行语句。
实际应用中,服务器可从待测试语句类型中,随机选择待测试语句标识,比如为基本类型变量标识;该基本类型变量标识所对应的PL执行语句为基本类型变量所定义的PL语句。比如本次测试用例的生成,对于匿名块的声明部分,是由基本类型变量所定义的PL语句所组成的。
另外,服务器对于待测试语句标识的选择,也同样是基于随机选择的操作而实现的,具体的执行方式可参考上述第一次随机选择的具体过程;具体的,所述基于所述待测试语句类型随机选择待测试语句标识,包括:
在所述待测试语句类型中,确定至少一个初始语句标识;
为每个初始语句标识分别设置第二随机数,并基于所述第二随机数,在所述至少一个初始语句标识中随机选择待测试语句标识。
其中,第二随机数与第一随机数的含义相同,均是为了随机选择一个待测试语句标识而设定,具体的形式对此不作任何限定。
实际应用中,服务器可为每个待测试语句类型中的初始语句标识进行设置随机数,便于后续可基于设置好的随机数,能够随机选择出待测试语句标识,目的是,从该待测试语句标识中确定出该待测试语句类型对应的PL执行语句。随机选择的过程可参考上述随机选择的方式,在此不做过多赘述。
本说明书实施例提供的测试用例生成方法,可通过设置随机数的方式,实现对待测试执行部分中的至少一个待测试语句标识进行随机选择,便于后续自动生成测试用例。
步骤208:基于所述每个待测试执行部分中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例。
其中,目标测试用例可以理解为对数据库的PL语句执行测试操作的用例,以测试数据库中PL语句是否能够实现测试目的。
实际应用中,服务器在从每个待测试执行部分中随机选择出目标测试语句之后,将所有的目标测试语句可按照每个待测试结构文件的语法规则,自动生成出目标测试用例。需要说明的是,测试用例是对数据库进行测试任务的描述,一般包括测试目标、测试环境、输入数据、测试步骤、预期结果等,最终可形成文档;本说明书实施例提供的测试用例生成方法,针对测试用例的文档中所需要的部分可自动生成,尤其是测试步骤的部分,是由上述步骤202至步骤208所描述的步骤自动生成。
进一步地,本说明书实施例提供的测试用例生成方法中,还可对每种目标测试语句进行模块化定义,便于对目标测试语句的扩展和维护;具体的,所述基于所述每个待测试执行部分中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例,包括:
确定所述每个待测试执行部分中的目标测试语句所包含的至少一个语句单元类型;
基于所述至少一个语句单元类型对所述目标测试语句进行模块化处理,获得每个语句单元类型对应的目标单元语句;
基于每个待测试执行部分中的目标测试语句对应的目标单元语句,按照所述待测试结构文件的语法规则生成目标测试用例。
其中,语句单元类型可以理解为针对目标测试语句中所包含的函数类型,比如,在select语句中,内部可拆分为4个主要的函数类型,即fromClause()、selectedList()、whereClause()、orderByClause()。
目标单元语句可以理解为对每个语句单元类型下的函数执行语句,执行了模块化定义之后的PL语句。沿用上例,fromClause()可以理解为:随机从所有的table中选择一个或多个表,也可以是一个子查询;selectedList()可以理解为:随机选择是select*还是select columns,如选择某几个列,则由tableView()进行生成,tableView()会从fromClause()中的tables中,生成一个column形式的表达式,并在记录中添加对应的表和列名,生成的列数由外部参数控制;whereClause()可以理解为:根据选择的fromCaluse()中的tables,由表达式生成的模块,随机生成一个条件表达式,左值是tables的任何一列,右边可以是具体的value值、定义的变量、子查询等;orderByClause()可以理解为:随机选择升序、降序。
实际应用中,服务器可确定每个目标测试语句中所包括的至少一个内部可拆分的PL执行语句模块,对每个PL执行语句模块进行模块化处理,便于后续对该目标测试语句继续进行函数类型的扩展和维护。进一步地,服务器根据每个目标测试语句对应的目标单元语句,按照匿名块对应的语法规则生成相应的目标测试用例。
本说明书实施例提供的测试用例生成方法,可对每个随机选择出的PL语句进行模块化处理,该种方式便于后续对语句的扩展和维护,有利于对数据库的测试用例的自动生成。
上述为本说明书实施例提供的测试用例生成方法中一个测试用例生成的详细介绍,那么对此,为了准确地检测到数据库的各种性能,需要针对数据库执行多次测试用例的生成操作;具体的,所述基于所述每个待测试执行部分中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例之后,还包括:
确定所述每个待测试执行部分中初始语句类型的类型数量;
确定所述初始语句类型中初始语句标识的标识数量;
基于所述类型数量以及所述标识数量设置测试用例生成次数;
基于所述测试用例生成次数,循环执行在所述每个待测试执行部分中随机选择待测试语句类型的步骤。
实际应用中,为了增加测试覆盖面,可执行循环执行上述生成测试用例的步骤,以实现针对某一待测试结构文件,能够生成多个测试用例,尽可能地增大测试的覆盖面;具体的,可通过确定每个待测试执行部分中的待测试语句类型的类型数量,比如匿名块中的声明部分定义了6个初始语句类型;再可确定每个初始语句类型下的初始语句标识的标识数量,若6个初始语句类型下的初始语句标识的标识数量总数为30种PL执行语句,那么,设置测试用例生成次数可大于等于30,后续,便可循环执行上述自动生成测试用例的步骤,共循环30次。需要说明的是,测试用例生成次数本实施例中对此不作具体限定。
相对于整个数据库而言,若数据库中可包含多个待测试结构文件,那么,每个待测试结构文件所对应生成测试用例的次数也不作具体限定,还有种方式为可提前设置出针对该数据库所生成的测试用例的总次数,进而可随机生成每个待测试结构文件对应的测试用例;具体的,所述数据库中包括多个待测试结构文件;
相应地,所述方法,还包括:
设置所述数据库的测试用例数量;
基于所述多个待测试结构文件随机生成与所述测试用例数量相同的目标测试用例。
其中,测试用例数量可以理解为针对整个数据库下,可生成的所有测试用例的数量。
实际应用中,服务器可提前设置出数据库的测试用例数量,且数据库中的多个待测试结构文件,每个待测试结构文件均可生成若干测试用例,但具体数量可随机,本实施例对此不作具体限定;最后,服务器可针对多个待测试结构文件,随机生成与提前设置的测试用例数量相一致的目标测试用例即可。
本说明书实施例提供的测试用例生成方法,可预先根据不同数据库应用的场景,设置的不同的测试标准,以实现自动生成测试用例的过程。
此外,本说明书实施例提供的测试用例生成方法中,对于目标测试语句为目标函数定义语句为例,可通过记录函数的参数以及返回值类型等,方便调用时使用;具体的,所述目标测试语句为目标函数定义语句,
相应地,所述基于所述每个待测试执行部分中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例,包括:
记录所述目标函数定义语句对应的目标参数类型以及目标返回值类型;
基于所述目标参数类型、所述目标返回值类型以及所述每个待测试执行部分中的目标函数定义语句,按照所述待测试结构文件的语法规则生成目标测试用例。
实际应用中,在确定目标测试语句为目标函数定义语句时,还可通过FuntionRecorder来记录函数的参数、返回值类型等信息,便于后续可直接调用出来使用;进一步地,再可根据记录的目标参数类型、目标返回值类型以及目标函数定义语句等,按照确认的语法规则自动生成目标测试用例。
需要说明的是,由于自动生成测试用例的方式存在随机性,对于如何解决完全随机存在的局限性,本实施例中可提出一种对变量名进行操作的方式,即如果不考虑上下文的逻辑性,生成的PL语句有很大概率存在语法错误,如局部变量的作用范围问题等问题,这种测试方法通过对变量名增加index的方式来避免变量名冲突,如:变量V_1、cursor C_1、函数Func_1,并通过全局map来保存生成的变量,游标、函数等,并控制其作用范围,如函数的参数、内部定义的变量及复合类型等,只能在这个函数的内部使用,函数结束时,会在map中remove掉。
本说明书实施例提供的测试用例生成方法,通过对函数定义语句进行进一步地限定,尽可能地避免测试用例出现执行错误的情况发生,以减少测试耗时。
此外,在服务器建立了针对数据库的测试用例之后,便可执行该测试用例,由于该测试用例是通过随机选择测试语句的方式自动生成的,且对应的PL语句的复杂度较高,就会出现测试用例执行失败的情况发生,对此,服务器还可根据执行结果进一步地调整相应的测试用例;具体的,所述基于所述每个待测试语句模块中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例之后,还包括:
执行所述目标测试用例对数据库进行测试;
在确定所述目标测试用例执行失败的情况下,基于执行结果确定所述目标测试用例的程序修改策略,并基于所述程序修改策略调整所述目标测试用例。
其中,程序修改策略可以理解为是针对测试用例执行过程中的程序修改策略;需要说明的是,针对不同的测试用例内容将会对应着不同的修改策略,在本实施例中将对此不作具体限定。
实际应用中,服务器在对目标测试用例开始执行之后,若确定该目标测试用例执行失败的情况下,即可根据执行失败的结果确定该目标测试用例所对应的程序修改策略,以实现利用该程序修改策略,完整对目标测试用例的调整。
进一步地,在目标测试用例执行结束之后,从执行结果来看,并非是测试用例本身程序出错,而是数据库中的PL语句程序本身存在问题,那么,还可继续修改数据库本身存在的漏洞;具体的,所述执行所述目标测试用例之后,还包括:
在接收到针对数据库的执行报错的情况下,基于执行结果确定所述数据库的修复策略;
基于所述修复策略调整所述数据库的执行程序。
实际应用中,服务器如果接收到数据库本身程序的执行报错之后,即可根据该目标测试用例最后的执行结果,确定针对数据库的具体修复策略,根据确定好的修复策略完成对数据库的执行程序的漏洞修复。
本说明书实施例提供的测试用例生成方法,一方面通过随机选择相应的PL语句完成自动生成测试用例的目的,另一方面,还可根据生成的测试用例,以完善数据库本身的PL语句,提高数据库对性能方面的要求。
综上,本说明书实施例提供的基于数据库PL语言的测试用例生成方法,通过随机生成的方式能自动生成各种复杂的PL,可以替代手动构造case,减少测试耗时,增加测试覆盖面。
下述结合附图3,以本说明书提供的基于数据库PL语言的测试用例生成方法以数据库中的匿名块为例,对所述基于数据库PL语言的测试用例生成方法进行进一步说明。其中,图3示出了本说明书一个实施例提供的一种基于数据库PL语言的测试用例生成方法应用于匿名块随机生成测试用例示意图。
图3中示意了在待测试结构文件为匿名块时,自动生成测试用例中所涉及的随机选择操作的流程示意。具体的,匿名块可分为三个部分,分别为声明部分、执行部分以及异常处理部分,那么,如图3所示,在声明部分可包括变量定义、复合类型定义、Table类型定义、游标定义、函数定义、存储过程定义,即可从该6个部分中随机选择一个待测试语句类型;同样地,执行部分还包括SQL语句、变量赋值、函数调用、存储过程调用、游标语句、循环语句、条件控制语句以及块语句,即可从8个部分中随机选择一个待测试语句类型;异常处理部分并非是匿名块中所必要存在的,所以在该图3中对异常处理部分并不做任何限定。
进一步地,图3中对几个待测试语句类型下的待测试语句标识进行示意,如声明部分的变量定义,可包括基本类型变量、复合类型变量、Table类型变量;如声明部分的游标定义,可包括普通游标、带参数的游标、带返回值的游标等等;针对每种待测试语句类型,都可随机再选择一个待测试语句标识,便于后续从PL执行语句中随机选择一个PL语句作为该测试用例的声明部分内容;同样地,执行部分中的SQL语句还包括Insert语句、Select语句、Delete语句以及Update语句,即可从上述4个语句标识中随机选择其中一个;执行部分中的游标语句还包括For语句、Loop语句以及While语句,还可从该3个语句标识中随机选择其中一个;执行部分中的条件控制语句还可包括IF语句、Case语句,同样也可随机从中选择一个,作为整个匿名块执行部分中,测试用例所构成的PL执行语句。
基于此,通过对PL执行语句中,每一种类型下的PL执行语句进行随机选择,即可共同组成各种复杂的PL语句用例,以代替手动构造测试用例,不仅能够减少测试过程的耗时问题,还能进一步增加测试覆盖面。
与上述方法实施例相对应,本说明书还提供了基于数据库PL语言的测试用例生成装置实施例,图4示出了本说明书一个实施例提供的一种基于数据库PL语言的测试用例生成装置的结构示意图。如图4所示,该装置包括:
确定模块402,被配置为确定待测试结构文件中的至少一个待测试执行部分;
第一随机选择模块404,被配置为在每个待测试执行部分中随机选择待测试语句类型;
第二随机选择模块406,被配置为基于所述待测试语句类型随机选择待测试语句标识,并基于所述待测试语句标识在所述每个待测试执行部分中确定目标测试语句;
测试用例生成模块408,被配置为基于所述每个待测试执行部分中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例。
可选地,所述装置,还包括:
第一调整模块,被配置为执行所述目标测试用例对数据库进行测试;
在确定所述目标测试用例执行失败的情况下,基于执行结果确定所述目标测试用例的程序修改策略,并基于所述程序修改策略调整所述目标测试用例。
可选地,所述装置,还包括:
第二调整模块,被配置为在接收到针对数据库的执行报错的情况下,基于执行结果确定所述数据库的修复策略;
基于所述修复策略调整所述数据库的执行程序。
可选地,所述确定模块402,进一步被配置为:
确定待测试结构文件中的语法规则;
基于所述语法规则在所述待测试结构文件中,确定至少一个待测试执行部分。
可选地,所述第一随机选择模块404,进一步被配置为:
在每个待测试执行部分中,确定至少一个初始语句类型;
为每个初始语句类型分别设置第一随机数,并基于所述第一随机数,在所述至少一个初始语句类型中随机选择待测试语句类型。
可选地,所述第二随机选择模块406,进一步被配置为:
在所述待测试语句类型中,确定至少一个初始语句标识;
为每个初始语句标识分别设置第二随机数,并基于所述第二随机数,在所述至少一个初始语句标识中随机选择待测试语句标识。
可选地,所述测试用例生成模块408,进一步被配置为:
确定所述每个待测试执行部分中的目标测试语句所包含的至少一个语句单元类型;
基于所述至少一个语句单元类型对所述目标测试语句进行模块化处理,获得每个语句单元类型对应的目标单元语句;
基于每个待测试执行部分中的目标测试语句对应的目标单元语句,按照所述待测试结构文件的语法规则生成目标测试用例。
可选地,所述装置,还包括:
循环执行模块,被配置为确定所述每个待测试执行部分中初始语句类型的类型数量;
确定所述初始语句类型中初始语句标识的标识数量;
基于所述类型数量以及所述标识数量设置测试用例生成次数;
基于所述测试用例生成次数,循环执行在所述每个待测试执行部分中随机选择待测试语句类型的步骤。
可选地,所述目标测试语句为目标函数定义语句,
可选地,所述测试用例生成模块408,进一步被配置为:
记录所述目标函数定义语句对应的目标参数类型以及目标返回值类型;
基于所述目标参数类型、所述目标返回值类型以及所述每个待测试执行部分中的目标函数定义语句,按照所述待测试结构文件的语法规则生成目标测试用例。
可选地,所述数据库中包括多个待测试结构文件;
可选地,所述装置,还包括:
随机生成模块,被配置为设置所述数据库的测试用例数量;
基于所述多个待测试结构文件随机生成与所述测试用例数量相同的目标测试用例。
本说明书实施例提供的基于数据库PL语言的测试用例生成装置,通过在数据库中的待测试结构文件中确定待测试执行部分,并根据语句类型随机选择待测试的语句类型,进而,再从每个语句类型中随机选择语句标识对应的目标测试语句,按照语法规则自动生成目标测试用例,该种方式是通过随机组合各种PL语句,实现自动生成可执行的PL语句的测试用例,不仅能够自动生成各种复杂的PL语句的测试用例,增加测试覆盖面,还可以代替手动构造测试用例,以减少数据库的测试耗时。
上述为本实施例的一种基于数据库PL语言的测试用例生成装置的示意性方案。需要说明的是,该基于数据库PL语言的测试用例生成装置的技术方案与上述的基于数据库PL语言的测试用例生成方法的技术方案属于同一构思,基于数据库PL语言的测试用例生成装置的技术方案未详细描述的细节内容,均可以参见上述基于数据库PL语言的测试用例生成方法的技术方案的描述。
图5示出了根据本说明书一个实施例提供的一种计算设备500的结构框图。该计算设备500的部件包括但不限于存储器510和处理器520。处理器520与存储器510通过总线530相连接,数据库550用于保存数据。
计算设备500还包括接入设备540,接入设备540使得计算设备500能够经由一个或多个网络560通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备540可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本说明书的一个实施例中,计算设备500的上述部件以及图5中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图5所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备500可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备500还可以是移动式或静止式的服务器。
其中,处理器520用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述基于数据库PL语言的测试用例生成方法的步骤。
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的基于数据库PL语言的测试用例生成方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述基于数据库PL语言的测试用例生成方法的技术方案的描述。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述基于数据库PL语言的测试用例生成方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的基于数据库PL语言的测试用例生成方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述基于数据库PL语言的测试用例生成方法的技术方案的描述。
本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述基于数据库PL语言的测试用例生成方法的步骤。
上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的基于数据库PL语言的测试用例生成方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述基于数据库PL语言的测试用例生成方法的技术方案的描述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
Claims (13)
1.一种基于数据库PL语言的测试用例生成方法,包括:
确定待测试结构文件中的至少一个待测试执行部分;
在每个待测试执行部分中随机选择待测试语句类型;
基于所述待测试语句类型随机选择待测试语句标识,并基于所述待测试语句标识在所述每个待测试执行部分中确定目标测试语句;
基于所述每个待测试执行部分中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例。
2.根据权利要求1所述的基于数据库PL语言的测试用例生成方法,所述基于所述每个待测试语句模块中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例之后,还包括:
执行所述目标测试用例对数据库进行测试;
在确定所述目标测试用例执行失败的情况下,基于执行结果确定所述目标测试用例的程序修改策略,并基于所述程序修改策略调整所述目标测试用例。
3.根据权利要求2所述的基于数据库PL语言的测试用例生成方法,所述执行所述目标测试用例之后,还包括:
在接收到针对数据库的执行报错的情况下,基于执行结果确定所述数据库的修复策略;
基于所述修复策略调整所述数据库的执行程序。
4.根据权利要求1所述的基于数据库PL语言的测试用例生成方法,所述确定待测试结构文件中的至少一个待测试执行部分,包括:
确定待测试结构文件中的语法规则;
基于所述语法规则在所述待测试结构文件中,确定至少一个待测试执行部分。
5.根据权利要求1所述的基于数据库PL语言的测试用例生成方法,所述在每个待测试执行部分中随机选择待测试语句类型,包括:
在每个待测试执行部分中,确定至少一个初始语句类型;
为每个初始语句类型分别设置第一随机数,并基于所述第一随机数,在所述至少一个初始语句类型中随机选择待测试语句类型。
6.根据权利要求5所述的基于数据库PL语言的测试用例生成方法,所述基于所述待测试语句类型随机选择待测试语句标识,包括:
在所述待测试语句类型中,确定至少一个初始语句标识;
为每个初始语句标识分别设置第二随机数,并基于所述第二随机数,在所述至少一个初始语句标识中随机选择待测试语句标识。
7.根据权利要求1所述的基于数据库PL语言的测试用例生成方法,所述基于所述每个待测试执行部分中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例,包括:
确定所述每个待测试执行部分中的目标测试语句所包含的至少一个语句单元类型;
基于所述至少一个语句单元类型对所述目标测试语句进行模块化处理,获得每个语句单元类型对应的目标单元语句;
基于每个待测试执行部分中的目标测试语句对应的目标单元语句,按照所述待测试结构文件的语法规则生成目标测试用例。
8.根据权利要求6所述的基于数据库PL语言的测试用例生成方法,所述基于所述每个待测试执行部分中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例之后,还包括:
确定所述每个待测试执行部分中初始语句类型的类型数量;
确定所述初始语句类型中初始语句标识的标识数量;
基于所述类型数量以及所述标识数量设置测试用例生成次数;
基于所述测试用例生成次数,循环执行在所述每个待测试执行部分中随机选择待测试语句类型的步骤。
9.根据权利要求1所述的基于数据库PL语言的测试用例生成方法,所述目标测试语句为目标函数定义语句,
相应地,所述基于所述每个待测试执行部分中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例,包括:
记录所述目标函数定义语句对应的目标参数类型以及目标返回值类型;
基于所述目标参数类型、所述目标返回值类型以及所述每个待测试执行部分中的目标函数定义语句,按照所述待测试结构文件的语法规则生成目标测试用例。
10.根据权利要求2所述的基于数据库PL语言的测试用例生成方法,所述数据库中包括多个待测试结构文件;
相应地,所述方法,还包括:
设置所述数据库的测试用例数量;
基于所述多个待测试结构文件随机生成与所述测试用例数量相同的目标测试用例。
11.一种基于数据库PL语言的测试用例生成装置,包括:
确定模块,被配置为确定待测试结构文件中的至少一个待测试执行部分;
第一随机选择模块,被配置为在每个待测试执行部分中随机选择待测试语句类型;
第二随机选择模块,被配置为基于所述待测试语句类型随机选择待测试语句标识,并基于所述待测试语句标识在所述每个待测试执行部分中确定目标测试语句;
测试用例生成模块,被配置为基于所述每个待测试执行部分中的目标测试语句,按照所述待测试结构文件的语法规则生成目标测试用例。
12.一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至10任意一项所述测试用例生成方法的步骤。
13.一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至10任意一项所述测试用例生成方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210577502.5A CN114924966A (zh) | 2022-05-25 | 2022-05-25 | 基于数据库pl语言的测试用例生成方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210577502.5A CN114924966A (zh) | 2022-05-25 | 2022-05-25 | 基于数据库pl语言的测试用例生成方法以及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114924966A true CN114924966A (zh) | 2022-08-19 |
Family
ID=82810085
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210577502.5A Pending CN114924966A (zh) | 2022-05-25 | 2022-05-25 | 基于数据库pl语言的测试用例生成方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114924966A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117891748A (zh) * | 2024-03-15 | 2024-04-16 | 腾讯科技(深圳)有限公司 | 数据库的测试方法、装置、计算机设备和存储介质 |
-
2022
- 2022-05-25 CN CN202210577502.5A patent/CN114924966A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117891748A (zh) * | 2024-03-15 | 2024-04-16 | 腾讯科技(深圳)有限公司 | 数据库的测试方法、装置、计算机设备和存储介质 |
CN117891748B (zh) * | 2024-03-15 | 2024-07-23 | 腾讯科技(深圳)有限公司 | 数据库的测试方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111061757B (zh) | 数据库的语言转换方法、装置、电子设备及存储介质 | |
CN112650766B (zh) | 数据库数据操作的方法、系统及服务器 | |
CN111400338B (zh) | Sql优化方法、装置、存储介质及计算机设备 | |
US10901990B1 (en) | Elimination of common subexpressions in complex database queries | |
CN110908997A (zh) | 数据血缘构建方法、装置、服务器及可读存储介质 | |
US9892143B2 (en) | Association index linking child and parent tables | |
CN111475588B (zh) | 数据处理方法及装置 | |
CN107330014B (zh) | 一种数据表的创建方法与设备 | |
CN114064601B (zh) | 存储过程转换方法、装置、设备和存储介质 | |
CN111367893A (zh) | 数据库版本迭代的方法及装置 | |
CN114924966A (zh) | 基于数据库pl语言的测试用例生成方法以及装置 | |
CN113407514A (zh) | 一种数据库迁移的方法、装置、设备及可读介质 | |
US8396858B2 (en) | Adding entries to an index based on use of the index | |
CN106980617B (zh) | 一种基于json语句操作数据库的方法和系统 | |
CN112181951B (zh) | 一种异构数据库数据迁移方法、装置及设备 | |
WO2021262283A1 (en) | Reduced processing loads via selective validation specifications | |
WO2023030461A1 (zh) | 一种分布式数据库检测方法及装置 | |
CN108304219B (zh) | 二次开发平台及方法 | |
US20220171785A1 (en) | Systems and methods of automating data processing and movement | |
CN114547083A (zh) | 数据处理方法、装置及电子设备 | |
JP2018535495A (ja) | アプリケーションユーザーインターフェース自動テスト方法、電子装置、システム及び記憶媒体 | |
CN113934748A (zh) | 混合型sql脚本文件生成方法、执行方法及装置 | |
CN112699129A (zh) | 一种数据处理系统、方法及装置 | |
CN113190236A (zh) | Hql脚本校验方法及装置 | |
CN114780175B (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 |