首页> 中国专利> 一种自动生成数据库测试用例的方法及存储介质

一种自动生成数据库测试用例的方法及存储介质

摘要

本发明公开了一种自动生成数据库测试用例的方法及存储介质,本发明是以BNF形式来配置被测数据库所支持的DDL、DML、DCL和查询部分的语法规则,然后对配置为BNF形式的语法规则逐条进行词法分析和语法分析,自动排列组合出所有合法的SQL语句,最后按照DDL、DML、DCL和查询语句的顺序自动生成四类测试用例,也即本发明是以BNF形式来配置语法规则,并通过词法分析和语法分析来自动生成测试用例,以提高测试用例生成效率,从而有效解决了现有人工编写测试用例不能满足数据库的测试需求的问题。

著录项

  • 公开/公告号CN112925726A

    专利类型发明专利

  • 公开/公告日2021-06-08

    原文格式PDF

  • 申请/专利权人 瀚高基础软件股份有限公司;

    申请/专利号CN202110401830.5

  • 发明设计人 李鹏;陈莉;冯明冉;

    申请日2021-04-14

  • 分类号G06F11/36(20060101);G06F16/28(20190101);G06F40/253(20200101);G06F40/284(20200101);

  • 代理机构11010 工业和信息化部电子专利中心;

  • 代理人罗丹

  • 地址 250101 山东省济南市高新区新泺大街2117号铭盛大厦20层2001室

  • 入库时间 2023-06-19 11:19:16

说明书

技术领域

本发明涉及计算机技术领域,特别是涉及一种自动生成数据库测试用例的方法及存储介质。

背景技术

现有的关系型数据库需遵循标准的SQL语法,而SQL语法具有不同的版本,且不同的关系型数据库对于SQL标准的支持程度也不一样,互相之间有显著差异。所以对于不同的关系型数据库,需要有不同的测试用例。甚至对于同一个关系型数据库的不同版本,其支持的语法也会有差异,所需的测试用例也有区别,也就是说,现有需要生成大量的测试用例,而仅通过测试人员手动生成测试用例则需要花费大量的人力和时间,其并不能很好的满足数据库的测试需求。

发明内容

本发明提供了一种自动生成数据库测试用例的方法及存储介质,以解决现有技术中测试人员手动生成测试用例不能很好的地满足数据库对测试用例需求的问题。

第一方面,本发明提供了一种自动生成数据库测试用例的方法,该方法包括:以巴科斯范式BNF形式分别配置被测数据库所支持的数据定义语言DDL、数据操纵语言DML、数据控制语言DCL和查询部分的语法规则;对配置为BNF形式的语法规则逐条进行词法分析,识别出每条语法规则中的关键词;对每条语法规则的关键词进行语法分析,基于所述关键词自动排列组合出所有合法的SQL语句;按照所述DDL、所述DML、所述DCL和查询语句的顺序自动生成对应的测试用例。

可选地,所述对配置为BNF形式的语法规则逐条进行词法分析,还包括:

对每一条配置为BNF形式的语法规则,识别出每条语法规则中的预设用户自定义标识符,并基于所述预设用户自定义标识符来将对应的语法规则进行保存,以供后续调取使用;

其中,所述预设用户自定义标识符是预设的所述被测数据库的标识。

可选地,所述被测数据库是关系型数据库。

可选地,所述对每条语法规则的关键词进行语法分析,基于所述关键词自动排列组合出所有合法的SQL语句,包括:对每条语法规则的关键词进行语法分析,基于每条语法规则的关键词自动排列组合出每条语法规则所对应的所有合法的SQL语句。

可选地,所述对每条语法规则的关键词进行语法分析,基于每条语法规则的关键词自动排列组合出每条语法规则所对应的所有合法的SQL语句,包括:

对每条语法规则均执行以下语法分析:基于词法分析所识别出的本条语法规则的关键词,自动排列组合出本条语法规则中所有可能的且正确的SQL语句,其中,所排列组合出的所有SQL语句均使用了本条语法规则中的关键词,且包含了本条语法规则的预设用户自定义标识符。

可选地,所述识别出每条语法规则中的预设用户自定义标识符,并基于所述预设用户自定义标识符来将对应的语法规则进行保存,包括:

识别出每条语法规则中的预设用户自定义标识符,根据所述预设用户自定义标识符的类型生成测试用的预设字符串,以所述预设字符串对所述SQL语句中的预设用户自定义标识符进行替换,并将替换后的SQL语句进行保存。

可选地,所述预设字符串为随机生成的字符串。

可选地,所述将替换后的SQL语句进行保存,包括:将替换后的SQL语句保存到结果输出文件中。

可选地,所述预设用户自定义标识符包括以下中的一种或多种:表名、索引名,用户名和列名。

第二方面,本发明提供了一种计算机可读存储介质,所述计算机可读存储介质存储有信号映射的计算机程序,所述计算机程序被至少一个处理器执行时,以实现上述任一种所述的自动生成数据库测试用例的方法。

本发明有益效果如下:

本发明是以BNF形式来配置被测数据库所支持的DDL、DML、DCL和查询部分的语法规则,然后对配置为BNF形式的语法规则逐条进行词法分析和语法分析,自动排列组合出所有合法的SQL语句,最后按照DDL、DML、DCL和查询语句的顺序自动生成四类测试用例,也即本发明是以BNF形式来配置语法规则,并通过词法分析和语法分析来自动生成测试用例,以提高测试用例生成效率,从而有效解决了现有人工编写测试用例不能满足数据库的测试需求的问题。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1是本发明第一实施例提供的一种自动生成数据库测试用例的方法的流程示意图;

图2是本发明第一实施例提供的一种词法分析方法的流程示意图;

图3是本发明第一实施例提供的一种语法分析方法的流程示意图;

图4是本发明第一实施例提供的一种生成测试用例的方法的流程示意图。

具体实施方式

本发明实施例针对现有人工手写测试用例非常低效并且容易出错,而SQL语法又是非常复杂度的,需要编写的测试用例数量巨大,人工编写测试用例很难能够实现全面覆盖,并且在数据库版本变化或者SQL标准升级时,人工维护测试用例就更加困难等问题,本发明是以BNF形式来配置语法规则,并通过词法分析和语法分析来自动生成测试用例,以提高测试用例生成效率,最终提高数据库的测试效率。以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。

本发明第一实施例提供了一种自动生成数据库测试用例的方法,参见图1,该方法包括:

S101、以巴科斯范式(Backus-Naur form,BNF)形式分别配置被测数据库所支持的数据定义语言(Data Definition Language,DDL)、数据操纵语言(DataManipulationLanguage,DML)、数据控制语言(Data Control Language,DCL)和查询部分的语法规则;

本发明实施例通过配置语法规则,使得自动化测试用例生成工具能够知晓具体所需要测试的SQL语法以及具体的语法规则。

具体实施时,本发明实施例是将语法规则写入到一个配置文件gram.conf中。该配置文件包括四个部分,分别是DDL部分,DML部分,DCL部分和查询部分。其中,DDL部分为对象定义和管理类语句,包括创建表,创建视图,创建索引等,DML部分是数据更改语句,包括插入数据,删除数据,修改数据等,DCL部分是数据库对象权限管理语句,用以设置用户以及数据库对象的访问权限,查询部分是数据查询语句。需要说明的是,上述仅是本发明实施例对各个部分所对应的功能的举例,具体实施时,本领域技术人员可以根据实际需要进行任意设置,本发明对此不作详细论述。

需要说明的是,本发明实施例所述的数据库是关系型数据库,众所周知,关系型数据所支持的SQL语法非常复杂,手工生成全面完善的测试用例需要极大的工作量,所以对关系型数据库的测试效率较低,但通过本发明则可实现自动生成测试用例,从而极大提高对关系型数据库的测试效率。

另外,需要特别说明的是,本发明仅是以关系型数据库来对本发明所述的方法进行说明的,在具体实施时,本领域技术人员可以根据需要来配置其他部分的语法规则,换句话来说,在具体实施时,本领域技术人员可以选择DDL、DML、DCL和查询语句中的某一个或几个部分进行语法规则配置,当然也可以对数据库测试所需的其他形式来配置语法规则。

S102、对配置为BNF形式的语法规则逐条进行词法分析,识别出每条语法规则中的关键词;

在具体实施时,本发明实施例在词法分析识别出每条语法规则中的关键词的基础上,还需要识别出每条语法规则中的预设用户自定义标识符,并基于所述预设用户自定义标识符来实现将对应的语法规则进行保存,以供后续调取使用;其中,本发明实施例所述预设用户自定义标识符是预设的所述被测数据库的标识。

具体地,本发明实施例所述预设用户自定义标识符可以是表名、索引名,用户名和列名,等等,具体本领域技术人员可以根据实际需要进行任意设置,本发明对此不作详细说明。

S103、对每条语法规则的关键词进行语法分析,基于所述关键词自动排列组合出所有合法的SQL语句;

具体来说,本发明实施例是对每条语法规则的关键词进行语法分析,基于每条语法规则的关键词自动排列组合出每条语法规则所对应的所有合法的SQL语句。

详细来说,本发明实施例是对每条语法规则均执行以下语法分析处理:

首先,基于词法分析所识别出的本条语法规则的关键词,然后再自动排列组合出本条语法规则中所有可能的且正确的SQL语句,其中,需要特别强调的是,本发明实施例所排列组合出的所有SQL语句均使用了本条语法规则中的关键词,且包含了本条语法规则的预设用户自定义标识符。

另外,在具体实施时,本发明实施例是通过识别出每条语法规则中的预设用户自定义标识符,然后根据所述预设用户自定义标识符的类型生成测试用的预设字符串,并以所述预设字符串对所述SQL语句中的预设用户自定义标识符进行替换,最终将替换后的SQL语句保存到结果输出文件中,以供后续测试使用。

S104、按照所述DDL、所述DML、所述DCL和查询语句的顺序自动生成对应的测试用例。

也即,本发明实施例是对上述词法分析和语法分析以后的SQL语句进行整合,来生成最终可执行的语句。

总体来说,本发明实施例以BNF形式来配置语法规则,并通过词法分析和语法分析来自动生成测试用例,以提高测试用例生成效率,最终提高数据库的测试效率。

下面将结合图2-图4对本发明实施例所述的方法进行详细的解释和说明:

首先,本发明实施例中配置语法规则的步骤具体包括:

本发明实施例是将语法规则写入到一个配置文件gram.conf中。

该配置文件包括四个部分,分别是DDL部分,DML部分,DCL部分和查询部分。其中,DDL部分为对象定义和管理类语句,包括创建表,创建视图,创建索引等,DML部分是数据更改语句,包括插入数据,删除数据,修改数据等,DCL部分是数据库对象权限管理语句,可以设置用户以及数据库对象的访问权限,查询部分是数据查询语句。

在具体实施时,本发明实施例是将上述的每个部分的语法需要按照BNF的形式写入。以下是本发明实施例提供的一个具体配置BNF形式的语法规则的例子,包括:

CREATE[[GLOBAL|LOCAL]{TEMPORARY|TEMP}|UNLOGGED]TABLE[IF NOT EXISTS]table_name([

{column_namedata_type[COLLATE collation][column_constraint[...]]

|table_constraint

|LIKEsource_table[like_option...]}

[,...]

])

[INHERITS(parent_table[,...])]

[PARTITIONBY{RANGE|LIST}({column_name|(expression)}[COLLATEcollation][opclass][,...])]

[WITH(storage_parameter[=value][,...])|WITH OIDS|WITHOUTOIDS]

[ON COMMIT{PRESERVEROWS|DELETEROWS|DROP}]

[TABLESPACE tablespace_name]

其中[]中内容为可选的,{}中内容为可以重复0到无数次的,竖线(|)表示在其左右两边任选一项。具体的BNF规则不在此赘述。

如图2所示,本发明实施例词法分析的过程具体包括:

初始化,获取字符编码等信息;

读取gram.conf文件;

按序读取每一条语法进行词法分析,即,对配置为BNF形式的语法规则逐条进行词法分析,识别出每条语法规则中的关键词和用户自定义标识符(如表名,索引名等);

将分析结果输出给语法分析模块;

重新执行上述过程,直到结束。

需要说明的是,为了便于理解,本发明实施例是将词法分析部分的功能设置为通过词法分析模块进行执行,而将语法分析部分的功能设置为通过语法分析模块执行。

如图3所示,本发明实施例的语法分析的过程具体包括:

步骤1.将一条SQL语法的完整词法分析结果输入到语法分析模块;

步骤2.对于其中的关键词(如CREATE、SELECT等)维持原样,对于其中用户自定义标识符进行类型识别,根据识别出的类型,生成随机的字符串作为对象的名称。例如,table_name为用户自定义标识符,它的类型为表名,根据表名的命名规则,生成随机的表名用于后边的测试使用;

简而言之,本发明实施例是基于用户自定义标识符的类型来生成的随机字符串去给表、索引名以及视图等进行命名,以便于后续调取使用。

步骤3.所有生成的随机对象名,该随机对象名即为上述所随机生成的字符串,按照其用户自定义标识的类型存入内存中,在后面的步骤中使用;

步骤4.对输入的这一条语法进行语法规则分析,因为其中含有可选的和可重复的关键词,所以需排列组合出本条语法规则所有可能的SQL语句,每一条SQL语句中的用户自定义标识符用$n($1、$2、$3……)来代替,并将生成的所有SQL语句存入内存,在后面的步骤中使用;

步骤5.取下一条语法的词法分析结果,进行上述的语法分析处理,直到对所有语法均分析完毕为止。

最后在生成测试语句时,本发明实施例是按照DDL,DML,DCL和查询语句的顺序,依次生成。每一个部分的生成逻辑均是相同的,下面将结合图4,以DDL为例,对本发明实施例的测试语句生成过程进行详细说明:

从内存中读取一条DDL语法的所有语句,在测试语句生成的过程中,需要将其中的$n符号替换为对应的对象名,该对象名即是在语法分析模块中,针对每一个用户自定义标识符所生成的并保存到内存中的对象名。在测试语句生成阶段取出并替换获取即可。最终生成的测试语句,被写入到结果文件中。

总体来说,本发明实施例是基于关系型数据库所支持的SQL语法非常复杂,如果用常规的方式开发自动化生成测试用例的工具,开发难度大,逻辑复杂,且难以维护的问题,创新性的提出将词法语法分析加入到自动化测试用例生成工具里,通过对语法的自动化分析,自动生成合适的测试用例,且该测试用例是灵活可配置的,只需要将要测试的语法以BNF的格式写入到配置文件中,即可自动生成用例,从而极大提高了测试效率,并且本发明的工具本身无需维护,所以本发明生成测试用例的成本较现有人工生成测试用例的成本更低。

本发明第二实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有信号映射的计算机程序,所述计算机程序被至少一个处理器执行时,以实现本发明第一实施例中任一种所述的自动生成数据库测试用例的方法。

本发明实施例的相关内容可参见本发明第一实施例进行理解,在此不做详细论述。

尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号