CN112925720A - 一种软件sql测试方法、装置、存储介质及系统 - Google Patents
一种软件sql测试方法、装置、存储介质及系统 Download PDFInfo
- Publication number
- CN112925720A CN112925720A CN202110335561.7A CN202110335561A CN112925720A CN 112925720 A CN112925720 A CN 112925720A CN 202110335561 A CN202110335561 A CN 202110335561A CN 112925720 A CN112925720 A CN 112925720A
- Authority
- CN
- China
- Prior art keywords
- sql
- sql statement
- processed
- dynamic
- statement
- 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/3692—Test management for test results analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例公开了一种软件SQL测试方法、装置、存储介质及系统。本发明涉及软件开发技术领域。该方法包括:读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句;对所述待处理动态SQL语句进行扩展,得到扩展SQL语句,并将所述扩展SQL语句和所述待处理非动态SQL语句作为目标SQL语句;利用所述目标SQL语句,生成测试用例,并将所述测试用例作为输入对所述目标SQL语句进行测试。本技术方案,可以自动识别软件产品中的全部SQL语句,通过对SQL语句执行验证,可以发现有性能问题的SQL语句。能极大的方便SQL的测试,有效提高软件开发效率和软件质量。
Description
技术领域
本申请实施例涉及软件开发技术领域,尤其涉及一种软件SQL测试方法、装置、存储介质及系统。
背景技术
软件产品特别是应用于大规模的企业中的软件产品中,SQL(Structured QueryLanguage,结构化查询语言)在全部代码中占据着相当重要的比重。SQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
软件测试的过程包括利用自动化测试工具,对测试需求的分析,设计出自动化测试用例,从而搭建自动化测试的框架以及设计与编写自动化脚本。目前,对软件产品中的SQL测试都是伴随在功能测试及性能测试的过程中进行的,没有单独的SQL测试过程。功能测试是指从软件产品的界面、架构出发,按照需求编写出的测试用例,输入数据在预期结果和实际结果之间进行评测;性能测试是指验证软件的性能在正常环境和系统条件下重复使用是否还能满足性能指标。
功能测试及性能测试的覆盖范围有限,不能完全覆盖软件产品中的全部SQL语句。导致不能发现SQL语句的性能问题,致使软件开发效率低,软件质量低。
发明内容
本申请实施例提供一种软件SQL测试方法、装置、存储介质及系统,可以自动识别软件产品中的全部SQL语句,通过对SQL语句执行验证,可以发现有性能问题的SQL语句。能极大的方便SQL的测试,有效提高软件开发效率和软件质量。
第一方面,本申请实施例提供了一种软件SQL测试方法,该方法包括:
读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句;
对所述待处理动态SQL语句进行扩展,得到扩展SQL语句,并将所述扩展SQL语句和所述待处理非动态SQL语句作为目标SQL语句;
利用所述目标SQL语句,生成测试用例,并将所述测试用例作为输入对所述目标SQL语句进行测试。
第二方面,本申请实施例提供了一种软件SQL测试装置,该装置包括:
SQL语句获得模块,用于读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句;
目标SQL语句确定模块,用于对所述待处理动态SQL语句进行扩展,得到扩展SQL语句,并将所述扩展SQL语句和所述待处理非动态SQL语句作为目标SQL语句;
目标SQL语句测试模块,用于利用所述目标SQL语句,生成测试用例,并将所述测试用例作为输入对所述目标SQL语句进行测试。
第三方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请实施例所述的软件SQL测试方法。
第四方面,本申请实施例提供了一种系统,包括存储器,处理器及存储在存储器上并可在处理器运行的计算机程序,所述处理器执行所述计算机程序时实现如本申请实施例所述的软件SQL测试方法。
本申请实施例所提供的技术方案,读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句;对待处理动态SQL语句进行扩展,得到扩展SQL语句,并将扩展SQL语句和待处理非动态SQL语句作为目标SQL语句;利用目标SQL语句,生成测试用例,并将测试用例作为输入对目标SQL语句进行测试。本技术方案,可以自动识别软件产品中的全部SQL语句,通过对SQL语句执行验证,可以发现有性能问题的SQL语句。能极大的方便SQL的测试,有效提高软件开发效率和软件质量。
附图说明
图1是本申请实施例一提供的软件SQL测试方法的流程图;
图2是本申请实施例二提供的软件SQL测试过程的示意图;
图3是本申请实施例三提供的软件SQL测试装置的结构示意图;
图4是本申请实施例五提供的一种系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
实施例一
图1是本申请实施例一提供的软件SQL测试方法的流程图,本实施例可适用于对软件产品中全部SQL语句进行测试的情况,该方法可以由本申请实施例所提供的软件SQL测试装置执行,该装置可以由软件和/或硬件的方式来实现,并可集成于用于SQL语句测试的智能终端等设备中。
如图1所示,所述软件SQL测试方法包括:
S110、读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句。
在本方案中,SQL(Structured Query Language,结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。在软件产品中,SQL在全部代码中占据着相当重要的比重,对SQL语句进行测试可以有效提高软件开发效率和软件质量。
其中,非动态SQL语句可以是指主体结构已经明确,将该段SQL语句交给数据库管理系统去分析,数据库软件可以对这段SQL语句进行语法解析,生成数据库的可执行代码的SQL语句;动态SQL语句可以是指SQL语句没有明确给出,该SQL语句的值可能等于从文本框中读取的一个SQL或者从键盘输入的SQL,但具体是什么,在编译时无法确定,只有等到程序运行起来,在执行的过程中才能确定的种SQL语句。例如,每一种数据库软件都有能够执行SQL语句的界面,那个界面接收的SQL就是动态SQL。
在本实施例中,由软件SQL测试系统中的SQL发现模块对软件产品中的代码进行扫描,获得待处理动态SQL语句和待处理非动态SQL语句。获得待处理动态SQL语句和待处理非动态SQL语句后,由SQL发现模块对待处理动态SQL语句和待处理非动态SQL语句进行记录,记录格式为[SQL语句,SQL所属文件名,SQL所在行数]。
在本技术方案中,可选的,读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句,包括:
读取软件产品中的源代码,对所述源代码进行解析,得到所述源代码中的待处理动态SQL语句和待处理非动态SQL语句。
在本实施例中,源代码是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。软件产品中的SQL语句可能存储在源代码中,需要对源代码进行解析,得到源代码中的待处理动态SQL语句和待处理非动态SQL语句。
通过对源代码进行解析,可以获得源代码中的待处理动态SQL语句和待处理非动态SQL语句。
在本技术方案中,可选的,读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句,还包括:
获取软件产品中持久层框架的目标接口;
通过所述目标接口获取持久层框架的待处理动态SQL语句和待处理非动态SQL语句。
其中,目标接口可以是指API(Application Programming Interface,应用程序接口),是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。
在本方案中,持久层又称为数据访问层,是负责向(或者从)一个或者多个数据存储器中存储(或者获取)数据的一组类和组件。例如,MyBatis是一个优秀的持久层框架,它将操作数据库的过程进行了封装,使开发者只需要关注SQL本身。
在本实施例中,软件产品中的SQL语句可能存储在持久层框架的xml文件中,可以借助持久层框架本身的API获取待处理动态SQL语句和待处理非动态SQL语句。
通过对持久层框架进行分析,可以获得持久层框架中待处理动态SQL语句和待处理非动态SQL语句。
S120、对所述待处理动态SQL语句进行扩展,得到扩展SQL语句,并将所述扩展SQL语句和所述待处理非动态SQL语句作为目标SQL语句。
在本实施例中,获得待处理动态SQL语句后,可以穷举全部可能的条件,由SQL解析模块对待处理动态SQL语句进行扩展。
示例性的,有两个待处理动态SQL语句:
select name,uid from user where 1=1
<if test="name!=null and name!=″″>
and name=#{name}
</if>
<if test="email!=null and email!=″″>
and email=#{email}
</if>
穷举全部可能的条件,可以将待处理SQL语句扩展为如下4个语句:
select name,uid from user where 1=1
select name,uid from user where 1=1and name=#{name}
select name,uid from user where 1=1and email=#{email}
select name,uid from user where 1=1and name=#{name}and email=#{email}。
在本技术方案中,可选的,对所述待处理动态SQL语句进行扩展,得到扩展SQL语句,包括:
根据所述待处理动态SQL语句的动态条件对所述待处理动态SQL语句进行扩展,得到扩展SQL语句;其中,所述动态条件是指SQL语句中的判断标签。
其中,判断标签可以是指判断待处理动态SQL语句中的条件是否成立的判断条件。优选的,判断标签可以是if、choose、when、otherwise、trim、where、set以及foreach等标签,这些标签可以任意组合成非常灵活的SQL语句。可以根据动态条件将待处理动态SQL语句扩展成2的动态条件次方个扩展SQL语句。例如,有n个if判断标签,则将待处理动态SQL语句扩展成2n个扩展SQL语句。
通过对待处理动态SQL语句进行扩展,可以穷尽动态SQL语句组合能生成的全部SQL,能够及时发现有性能问题的SQL语句,有效的提高软件开发效率和软件质量。
在本技术方案中,可选的,在根据所述待处理动态SQL语句的动态条件对所述待处理动态SQL语句进行扩展,得到扩展SQL语句之后,所述方法还包括:
若检测到所述扩展SQL语句被持久层拦截器改写,则将改写后的扩展SQL语句作为最终的扩展SQL语句。
在本方案中,为了提高软件产品的开发效率,持久层框架通常都支持通过拦截器实现对SQL语句的改写。若持久层框架通过拦截器对SQL语句进行改写,则实际运行的SQL语句与开发人员编写的SQL语句是不一样的。
示例性的,扩展SQL语句是:select name,uid from user where 1=1;拦截器为分页拦截器,则被持久层拦截器改写后的最终的扩展SQL语句是:
Oracle:
SELECT*FROM
(SELECT TMP.*,ROWNUM ROW_ID FROM(select name,uid from user where 1=1AND tenant_id=‘001’)TMPWHERE ROWNUM<=?)
WHERE ROW_ID>?
MySQL:
select name,uid from user where 1=1AND tenant_id=‘001’LIMIT?,?
在本实施例中,拦截器对SQL语句进行改写后,可以自动生成改写后最终的扩展SQL语句。
通过对持久层拦截器进行分析,可以获取到被拦截器改写后的扩展SQL语句,能够及时对SQL语句进行验证,发现有语法错误的SQL语句。
在本技术方案中,可选的,将所述扩展SQL语句和所述待处理非动态SQL语句作为目标SQL语句,包括:
若检测到所述待处理非动态SQL语句被持久层拦截器改写,则将改写后的待处理非动态SQL语句作为最终的目标非动态SQL语句;
将所述扩展SQL语句和所述目标非动态SQL语句作为目标SQL语句。
可以理解的,在持久层框架中同样可能存在待处理非动态SQL语句,若待处理非动态SQL语句未使用持久层拦截器,原始SQL语句与最终SQL语句相同;若待处理非动态SQL语句使用了持久层拦截器,则需要获取被持久层拦截器改写后的目标非动态SQL语句。
通过对持久层拦截器进行分析,可以获取到被拦截器改写后的目标非动态SQL语句,能够及时对SQL语句进行验证,发现有语法错误的SQL语句。
S130、利用所述目标SQL语句,生成测试用例,并将所述测试用例作为输入对所述目标SQL语句进行测试。
在本方案中,自动化测试可以是利用自动化测试工具,经过对测试需求的分析,设计出自动化测试用例,从而搭建自动化测试的框架,设计与编写自动化脚本,测试脚本的编写。获得目标SQL语句后,可以根据目标SQL语句中的参数字段生成测试用例。以测试用例为输入,由SQL执行模块在数据库中执行对目标SQL语句的测试。
在本方案中,获得目标SQL语句后,对目标SQL语句的语法进行检查,若发现存在语法问题,则其信息输出到错误SQL文件;若不存在语法问题,则可以用于构建测试用例。
在本技术方案中,可选的,在利用所述目标SQL语句,生成测试用例,并将所述测试用例作为输入对所述目标SQL语句进行测试之后,所述方法还包括:
将所述测试用例的执行结果、执行时间和执行计划进行保存。
在本实施例中,执行结果可以是指测试用例返回的结果。例如,执行结果可以是查询结果或者更新结果等。执行时间可以是指执行测试用例所用的时间。执行计划可以是指执行一条SQL语句,以最快最低消耗获取出所需数据的一个执行过程。其中,获得执行时间后,需要对各SQL语句的执行时间进行取均值。
通过对执行结果、执行时间和执行计划进行保存,可以根据执行结果、执行时间和执行计划对SQL语句性能进行分析。
本申请实施例所提供的技术方案,读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句;对待处理动态SQL语句进行扩展,得到扩展SQL语句,并将扩展SQL语句和待处理非动态SQL语句作为目标SQL语句;利用目标SQL语句,生成测试用例,并将测试用例作为输入对目标SQL语句进行测试。通过执行本技术方案,可以自动识别软件产品中的全部SQL语句,通过对SQL语句执行验证,可以发现有性能问题的SQL语句。能极大的方便SQL的测试,有效提高软件开发效率和软件质量。
实施例二
图2是本申请实施例二提供的软件SQL测试过程的示意图,本实施例二在实施例一的基础上进行进一步地优化。具体优化为:利用所述目标SQL语句,生成测试用例,包括:通过所述目标SQL语句和预设查询条件,得到待测试SQL语句;读取所述待测试SQL语句中的内容,获得待处理SQL使用表;根据所述待处理SQL使用表中的参数字段和参数字段取值,生成测试用例。其中,未在本实施例中详尽描述的内容详见实施例一。如图2所示,该方法包括以下步骤:
S210、读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句。
S220、对所述待处理动态SQL语句进行扩展,得到扩展SQL语句,并将所述扩展SQL语句和所述待处理非动态SQL语句作为目标SQL语句。
S230、通过所述目标SQL语句和预设查询条件,得到待测试SQL语句。
在本实施例中,预设查询条件可以是对目标SQL语句进行筛选的条件。例如,筛选数据库中的前100条目标SQL语句;待测试SQL语句可以是指符合筛选条件的目标SQL语句。
在本方案中,获得目标SQL语句后,对目标SQL语句的语法进行检查,若不存在语法问题,则将各目标SQL语句统一保存到数据库管理模块中,并依据查询条件从数据库管理模块筛选出符合查询条件的待测试SQL语句。
在本技术方案中,可选的,通过所述目标SQL语句和预设查询条件,得到待测试SQL语句,包括:
通过所述目标SQL语句,得到获取SQL使用表、SQL执行条件以及SQL使用表的主键及全部索引;
根据所述获取SQL使用表、SQL执行条件以及SQL使用表的主键及全部索引生成数据表;
利用预设查询条件,确定所述数据表中的待测试SQL语句。
其中,SQL使用表中包括数据量、字段取值范围以及关键字段数据分布。SQL执行条件包括动态条件和非动态条件。
具体的,对目标SQL语句进行提取,可以获得获取SQL使用表、SQL执行条件以及SQL使用表的主键及全部索引,并根据SQL使用表、SQL执行条件以及SQL使用表的主键及全部索引创建数据表。数据表的形式可以是[SQL编号,原始SQL语句,最终SQL语句,SQL所属文件名,SQL所在行数,SQL语句是否存在语法问题,SQL使用表列表及对表进行的操作(增删改查),每个表的查询条件,每个表的主键及索引]。
通过对待测试SQL语句进行确定,可以基于待测试SQL语句构建测试用例,实现对SQL性能的验证。
在本技术方案中,可选的,在根据所述获取SQL使用表、SQL执行条件以及SQL使用表的主键及全部索引生成数据表之后,所述方法还包括:
将所述数据表保存到数据库中,用于数据表的备份。
通过对数据表进行备份,可以保证SQL自动化测试对数据库表的数据不产生影响。
S240、读取所述待测试SQL语句中的内容,获得待处理SQL使用表。
在本实施例中,待测试SQL语句中包含待处理SQL使用表,通过预设代码可以读取待测试SQL语句中的待处理SQL使用表。
S250、根据所述待处理SQL使用表中的参数字段和参数字段取值,生成测试用例。
在本方案中,参数字段可以是指SQL使用表中的列名。例如,参数字段可以是ID、名称以及年龄等。参数字段取值可以是指该参数字段对应的数据取值。
在本实施例中,可以将参数字段和参数字段取值进行组合,生成测试用例。优选的,假设有n个参数字段,第i个参数字段的全部取值数为ki,则该待处理SQL最少会生成个测试用例。其中,测试用例的生成规则用户可以根据需求任意修改或扩展。
在本方案中,若用户指定了数据量、字段取值范围、关键字段的数据分布,则获取相应数值,更改SQL使用表中的相应数值;若不指定,则采用SQL使用表中的默认数值。
在本技术方案中,可选的,根据所述待处理SQL使用表中的参数字段和参数字段取值,生成测试用例,包括:
利用预设的正交试验设计规则对所参数字段和参数字段取值进行处理,生成测试用例。
其中,正交试验设计规则可以是指从大量的试验点中挑选出适量的、有代表性的点,应用依据伽罗瓦理论导出的正交表,合理地安排试验的一种科学的试验设计方法,是研究多因素、多水平的一种设计规则。它是根据正交性从全面试验中挑选出部分有代表性的点进行试验,这些有代表性的点具备均匀分散、齐整可比的特点。
利用预设的正交试验设计规则对SQL使用表中的参数字段和参数字段取值进行处理,可以提高测试用例的质量。
在本技术方案中,可选的,在根据所述待处理SQL使用表中的参数字段和参数字段取值,生成测试用例之前,所述方法还包括
判断所述待处理SQL使用表中的实际数据量是否满足预设数据量约束条件;
若不满足,则根据所述待处理SQL使用表中字段类型、取值范围及数据分布生成新数据插入所述待处理SQL使用表,得到最终的待处理SQL使用表。
在本实施例中,预设数据量预设条件可以是实际数据量高于一定阈值,即待处理SQL使用表中的实际数据量需要大于或者等于测试需求的数据量。
可以理解的,若待处理SQL使用表中的实际数据量小于测试需求的数据量,则需要根据待处理SQL使用表中字段类型、取值范围及数据分布生成新数据插入待处理SQL使用表。若待处理SQL使用表中的实际数据量需要大于或者等于测试需求的数据量,则判断用户是否指定字段数据分布范围,若未指定,则无需额外操作;若指定,则需要修改特定字段的数据值,满足相应字段的数据分布范围。
通过对实际数据量进行判断,则可以获得满足测试需要的数据,能够实现对目标SQL语句的测试。
本申请实施例所提供的技术方案,读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句;对待处理动态SQL语句进行扩展,得到扩展SQL语句,并将扩展SQL语句和待处理非动态SQL语句作为目标SQL语句;通过目标SQL语句和预设查询条件,得到待测试SQL语句;读取待测试SQL语句中的内容,获得待处理SQL使用表;根据待处理SQL使用表中的参数字段和参数字段取值,生成测试用例。通过执行本技术方案,可以自动识别软件产品中的全部SQL语句,通过对SQL语句执行验证,可以发现有性能问题的SQL语句。能极大的方便SQL的测试,有效提高软件开发效率和软件质量。
实施例三
图3是本申请实施例三提供的软件SQL测试装置的结构示意图,如图3所示,软件SQL测试装置包括:
SQL语句获得单元310,用于读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句;
目标SQL语句确定单元320,用于对所述待处理动态SQL语句进行扩展,得到扩展SQL语句,并将所述扩展SQL语句和所述待处理非动态SQL语句作为目标SQL语句;
目标SQL语句测试单元330,用于利用所述目标SQL语句,生成测试用例,并将所述测试用例作为输入对所述目标SQL语句进行测试。
在本技术方案中,可选的,目标SQL语句确定单元320,具体用于:
根据所述待处理动态SQL语句的动态条件对所述待处理动态SQL语句进行扩展,得到扩展SQL语句;其中,所述动态条件是指SQL语句中的判断条件。
在本技术方案中,可选的,目标SQL语句确定单元320,包括:
扩展SQL语句改写子单元,用于若检测到所述扩展SQL语句被持久层拦截器改写,则将改写后的扩展SQL语句作为最终的扩展SQL语句。
在本技术方案中,可选的,目标SQL语句确定单元320,还包括:
目标非动态SQL语句确定子单元,用于若检测到所述待处理非动态SQL语句被持久层拦截器改写,则将改写后的待处理非动态SQL语句作为最终的目标非动态SQL语句;
目标SQL语句确定子单元,用于将所述扩展SQL语句和所述目标非动态SQL语句作为目标SQL语句。
在本技术方案中,可选的,SQL语句获得单元310,包括:
源代码SQL语句得到子单元,用于读取软件产品中的源代码,对所述源代码进行解析,得到所述源代码中的待处理动态SQL语句和待处理非动态SQL语句。
在本技术方案中,可选的,SQL语句获得单元310,还包括:
目标接口获取子单元,用于获取软件产品中持久层框架的目标接口;
持久层框架SQL语句得到子单元,用于通过所述目标接口获取持久层框架的待处理动态SQL语句和待处理非动态SQL语句。
在本技术方案中,可选的,目标SQL语句测试单元330,包括:
待测试SQL语句得到子单元,用于通过所述目标SQL语句和预设查询条件,得到待测试SQL语句;
待处理SQL使用表获取子单元,用于读取所述待测试SQL语句中的内容,获得待处理SQL使用表;
测试用例生成子单元,用于根据所述待处理SQL使用表中的参数字段和参数字段取值,生成测试用例。
在本技术方案中,可选的,测试用例生成子单元,具体用于:
利用预设的正交试验设计规则对所参数字段和参数字段取值进行处理,生成测试用例。
在本技术方案中,可选的,待测试SQL语句得到子单元,具体用于:
通过所述目标SQL语句,得到获取SQL使用表、SQL执行条件以及SQL使用表的主键及全部索引;
根据所述获取SQL使用表、SQL执行条件以及SQL使用表的主键及全部索引生成数据表;
利用预设查询条件,确定所述数据表中的待测试SQL语句。
在本技术方案中,可选的,待测试SQL语句得到子单元,还用于:
将所述数据表保存到数据库中,用于数据表的备份。
在本技术方案中,可选的,目标SQL语句测试单元330,还包括:
实际数据量判断子单元,用于判断所述待处理SQL使用表中的实际数据量是否满足预设数据量约束条件;
待处理SQL使用表插入子单元,用于若不满足,则根据所述待处理SQL使用表中字段类型、取值范围及数据分布生成新数据插入所述待处理SQL使用表,得到最终的待处理SQL使用表。
在本技术方案中,可选的,所述装置还包括:
测试用例执行信息保存单元,用于将所述测试用例的执行结果、执行时间和执行计划进行保存。
上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果。
实施例四
本申请实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种软件SQL测试方法,该方法包括:
读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句;
对所述待处理动态SQL语句进行扩展,得到扩展SQL语句,并将所述扩展SQL语句和所述待处理非动态SQL语句作为目标SQL语句;
利用所述目标SQL语句,生成测试用例,并将所述测试用例作为输入对所述目标SQL语句进行测试。
存储介质——任何的各种类型的存储器设备或存储设备。术语“存储介质”旨在包括:安装介质,例如CD-ROM、软盘或磁带装置;计算机系统存储器或随机存取存储器,诸如DRAM、DDR RAM、SRAM、EDO RAM,兰巴斯(Rambus)RAM等;非易失性存储器,诸如闪存、磁介质(例如硬盘或光存储);寄存器或其它相似类型的存储器元件等。存储介质可以还包括其它类型的存储器或其组合。另外,存储介质可以位于程序在其中被执行的计算机系统中,或者可以位于不同的第二计算机系统中,第二计算机系统通过网络(诸如因特网)连接到计算机系统。第二计算机系统可以提供程序指令给计算机用于执行。术语“存储介质”可以包括可以驻留在不同位置中(例如在通过网络连接的不同计算机系统中)的两个或更多存储介质。存储介质可以存储可由一个或多个处理器执行的程序指令(例如具体实现为计算机程序)。
当然,本申请实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的软件SQL测试操作,还可以执行本申请任意实施例所提供的软件SQL测试方法中的相关操作。
实施例五
本申请实施例提供了一种软件SQL测试系统,所述系统包括:SQL发现模块410、SQL解析模块420、数据库管理模块430、SQL执行模块440以及SQL性能分析模块450;
所述SQL发现模块410,与所述SQL解析模块420连接,读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句,并将所述待处理动态SQL语句和待处理非动态SQL语句传输至所述SQL解析模块420;
所述SQL解析模块420,与所述数据库管理模块430连接,对所述待处理动态SQL语句进行扩展,得到扩展SQL语句,将所述扩展SQL语句和所述待处理非动态SQL语句作为目标SQL语句,通过所述目标SQL语句生成数据表,将所述数据表发送到所述数据库管理模块430;
所述数据库管理模块430,与所述SQL执行模块440连接,对所述数据表进行处理,生成测试用例,并将所述测试用例传输至所述SQL执行模块440;
所述SQL执行模块440,与所述SQL性能分析模块450连接,将所述测试用例作为输入对所述目标SQL语句进行测试,得到执行结果、执行时间和执行计划,并将所述执行计划传输至所述SQL性能分析模块450;
所述SQL性能分析模块450,用于对所述执行计划进行分析。
其中,SQL发现模块410包括源码扫描子模块411和XML扫描子模块412。源码扫描子模块411,读取软件产品中的源代码,对所述源代码进行解析,得到源代码中的待处理动态SQL语句和待处理非动态SQL语句。XML扫描子模块412,用于获取软件产品中持久层框架的目标接口;通过目标接口获取持久层框架的待处理动态SQL语句和待处理非动态SQL语句。
在本实施例中,SQL解析模块420包括SQL动态语句分析子模块421、SQL拦截器改写子模块422和SQL语法分析子模块423。其中,SQL动态语句分析子模块421,根据待处理动态SQL语句的动态条件对待处理动态SQL语句进行扩展,得到扩展SQL语句;SQL拦截器改写子模块422,用于检测到扩展SQL语句是否被持久层拦截器改写,若是,则将改写后的扩展SQL语句作为最终的扩展SQL语句;以及检测到待处理非动态SQL语句是否被持久层拦截器改写,若是,则将改写后的待处理非动态SQL语句作为最终的目标非动态SQL语句;并将扩展SQL语句和目标非动态SQL语句作为目标SQL语句;SQL语法分析子模块423,用于对目标SQL语句的语法进行分析,判断目标SQL语句是否存在语法错误。
其中,SQL解析模块420可以与数据库管理模块430连接,也可以与SQL执行模块440连接,直接将目标SQL语句传输至SQL执行模块440,生成测试用例,并将测试用例作为输入对目标SQL语句进行测试。
在本方案中,数据库管理模块430包括表备份管理子模块431和测试数据生成管理子模块432。其中,表备份管理子模块431,用于对目标SQL语句使用的数据表进行备份;测试数据生成管理子模块432,用于根据通过目标SQL语句和预设查询条件,得到待测试SQL语句;读取待测试SQL语句中的内容,获得待处理SQL使用表;并根据待处理SQL使用表中的参数字段和参数字段取值,生成测试用例。
可选的,SQL执行模块440包括SQL执行结果保存子模块441和SQL执行时间统计子模块442。其中,SQL执行结果保存子模块441用于对测试用例的执行结果进行保存;SQL执行时间统计子模块442用于对测试用例的执行时间进行统计,并汇总计算各测试用例的平均执行时间。
在本实施例中,SQL性能分析模块450包括执行计划保存子模块451和问题收集SQL子模块452。执行计划保存子模块451用于对执行计划进行保存;问题收集SQL子模块452用于根据执行计划对各类有问题的目标SQL语句进行收集分析。
本申请实施例所提供的技术方案,该系统包括:SQL发现模块、SQL解析模块、数据库管理模块、SQL执行模块以及SQL性能分析模块。通过执行本技术方案,可以自动识别软件产品中的全部SQL语句,通过对SQL语句的进行测试,能够发现有性能问题的SQL语句,能有效提高软件开发效率和软件质量。
上述实施例中提供的软件SQL测试装置、存储介质及系统可执行本申请任意实施例所提供的软件SQL测试方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本申请任意实施例所提供的软件SQL测试方法。
注意,上述仅为本申请的较佳实施例及所运用技术原理。本领域技术人员会理解,本申请不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本申请的保护范围。因此,虽然通过以上实施例对本申请进行了较为详细的说明,但是本申请不仅仅限于以上实施例,在不脱离本申请构思的情况下,还可以包括更多其他等效实施例,而本申请的范围由所附的权利要求范围决定。
Claims (15)
1.一种软件SQL测试方法,其特征在于,包括:
读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句;
对所述待处理动态SQL语句进行扩展,得到扩展SQL语句,并将所述扩展SQL语句和所述待处理非动态SQL语句作为目标SQL语句;
利用所述目标SQL语句,生成测试用例,并将所述测试用例作为输入对所述目标SQL语句进行测试。
2.根据权利要求1所述的方法,其特征在于,对所述待处理动态SQL语句进行扩展,得到扩展SQL语句,包括:
根据所述待处理动态SQL语句的动态条件对所述待处理动态SQL语句进行扩展,得到扩展SQL语句;其中,所述动态条件是指SQL语句中的判断标签。
3.根据权利要求2所述的方法,其特征在于,在根据所述待处理动态SQL语句的动态条件对所述待处理动态SQL语句进行扩展,得到扩展SQL语句之后,所述方法还包括:
若检测到所述扩展SQL语句被持久层拦截器改写,则将改写后的扩展SQL语句作为最终的扩展SQL语句。
4.根据权利要求1所述的方法,其特征在于,将所述扩展SQL语句和所述待处理非动态SQL语句作为目标SQL语句,包括:
若检测到所述待处理非动态SQL语句被持久层拦截器改写,则将改写后的待处理非动态SQL语句作为最终的目标非动态SQL语句;
将所述扩展SQL语句和所述目标非动态SQL语句作为目标SQL语句。
5.根据权利要求1所述的方法,其特征在于,读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句,包括:
读取软件产品中的源代码,对所述源代码进行解析,得到所述源代码中的待处理动态SQL语句和待处理非动态SQL语句。
6.根据权利要求1所述的方法,其特征在于,读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句,还包括:
获取软件产品中持久层框架的目标接口;
通过所述目标接口获取持久层框架的待处理动态SQL语句和待处理非动态SQL语句。
7.根据权利要求1所述的方法,其特征在于,利用所述目标SQL语句,生成测试用例,包括:
通过所述目标SQL语句和预设查询条件,得到待测试SQL语句;
读取所述待测试SQL语句中的内容,获得待处理SQL使用表;
根据所述待处理SQL使用表中的参数字段和参数字段取值,生成测试用例。
8.根据权利要求7所述的方法,其特征在于,根据所述待处理SQL使用表中的参数字段和参数字段取值,生成测试用例,包括:
利用预设的正交试验设计规则对所参数字段和参数字段取值进行处理,生成测试用例。
9.根据权利要求7所述的方法,其特征在于,通过所述目标SQL语句和预设查询条件,得到待测试SQL语句,包括:
通过所述目标SQL语句,得到获取SQL使用表、SQL执行条件以及SQL使用表的主键及全部索引;
根据所述获取SQL使用表、SQL执行条件以及SQL使用表的主键及全部索引生成数据表;
利用预设查询条件,确定所述数据表中的待测试SQL语句。
10.根据权利要求9所述的方法,其特征在于,在根据所述获取SQL使用表、SQL执行条件以及SQL使用表的主键及全部索引生成数据表之后,所述方法还包括:
将所述数据表保存到数据库中,用于数据表的备份。
11.根据权利要求7所述的方法,其特征在于,在根据所述待处理SQL使用表中的参数字段和参数字段取值,生成测试用例之前,所述方法还包括:
判断所述待处理SQL使用表中的实际数据量是否满足预设数据量约束条件;
若不满足,则根据所述待处理SQL使用表中字段类型、取值范围及数据分布生成新数据插入所述待处理SQL使用表,得到最终的待处理SQL使用表。
12.根据权利要求1所述的方法,其特征在于,在利用所述目标SQL语句,生成测试用例,并将所述测试用例作为输入对所述目标SQL语句进行测试之后,所述方法还包括:
将所述测试用例的执行结果、执行时间和执行计划进行保存。
13.一种软件SQL测试装置,其特征在于,包括:
SQL语句获得单元,用于读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句;
目标SQL语句确定单元,用于对所述待处理动态SQL语句进行扩展,得到扩展SQL语句,并将所述扩展SQL语句和所述待处理非动态SQL语句作为目标SQL语句;
目标SQL语句测试单元,用于利用所述目标SQL语句,生成测试用例,并将所述测试用例作为输入对所述目标SQL语句进行测试。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-12中任一项所述的软件SQL测试方法。
15.一种软件SQL测试系统,其特征在于,所述系统包括:SQL发现模块、SQL解析模块、数据库管理模块、SQL执行模块以及SQL性能分析模块;
所述SQL发现模块,与所述SQL解析模块连接,读取软件产品中的代码,获得待处理动态SQL语句和待处理非动态SQL语句,并将所述待处理动态SQL语句和待处理非动态SQL语句传输至所述SQL解析模块;
所述SQL解析模块,与所述数据库管理模块连接,对所述待处理动态SQL语句进行扩展,得到扩展SQL语句,将所述扩展SQL语句和所述待处理非动态SQL语句作为目标SQL语句,通过所述目标SQL语句生成数据表,将所述数据表发送到所述数据库管理模块;
所述数据库管理模块,与所述SQL执行模块连接,对所述数据表进行处理,生成测试用例,并将所述测试用例传输至所述SQL执行模块;
所述SQL执行模块,与所述SQL性能分析模块连接,将所述测试用例作为输入对所述目标SQL语句进行测试,得到执行结果、执行时间和执行计划,并将所述执行计划传输至所述SQL性能分析模块;
所述SQL性能分析模块,用于对所述执行计划进行分析。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110335561.7A CN112925720A (zh) | 2021-03-29 | 2021-03-29 | 一种软件sql测试方法、装置、存储介质及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110335561.7A CN112925720A (zh) | 2021-03-29 | 2021-03-29 | 一种软件sql测试方法、装置、存储介质及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112925720A true CN112925720A (zh) | 2021-06-08 |
Family
ID=76176460
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110335561.7A Pending CN112925720A (zh) | 2021-03-29 | 2021-03-29 | 一种软件sql测试方法、装置、存储介质及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112925720A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113886392A (zh) * | 2021-10-11 | 2022-01-04 | 四川新网银行股份有限公司 | 分布式链路跟踪TraceID写入数据库的方法及系统 |
CN113987511A (zh) * | 2021-10-28 | 2022-01-28 | 中国平安人寿保险股份有限公司 | Sql注入漏洞的检测方法、装置、计算机设备及存储介质 |
CN114490390A (zh) * | 2022-01-25 | 2022-05-13 | 中国农业银行股份有限公司 | 测试数据生成方法、装置、设备及存储介质 |
-
2021
- 2021-03-29 CN CN202110335561.7A patent/CN112925720A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113886392A (zh) * | 2021-10-11 | 2022-01-04 | 四川新网银行股份有限公司 | 分布式链路跟踪TraceID写入数据库的方法及系统 |
CN113987511A (zh) * | 2021-10-28 | 2022-01-28 | 中国平安人寿保险股份有限公司 | Sql注入漏洞的检测方法、装置、计算机设备及存储介质 |
CN114490390A (zh) * | 2022-01-25 | 2022-05-13 | 中国农业银行股份有限公司 | 测试数据生成方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10509804B2 (en) | Method and apparatus for storing sparse graph data as multi-dimensional cluster | |
US20200019494A1 (en) | Method and apparatus for performing test by using test case | |
CN110795455B (zh) | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 | |
US8145655B2 (en) | Generating information on database queries in source code into object code compiled from the source code | |
US7743066B2 (en) | Anonymous types for statically typed queries | |
US10394694B2 (en) | Unexplored branch search in hybrid fuzz testing of software binaries | |
US8972460B2 (en) | Data model optimization using multi-level entity dependencies | |
US20090287729A1 (en) | Source code coverage testing | |
US10803061B2 (en) | Software vulnerability graph database | |
US20070214104A1 (en) | Method and system for locking execution plan during database migration | |
CN112988782B (zh) | Hive支持交互式查询的方法、装置及存储介质 | |
US20060236156A1 (en) | Methods and apparatus for handling code coverage data | |
US9195730B2 (en) | Verifying correctness of a database system via extended access paths | |
US11487742B2 (en) | Consistency checks between database systems | |
CN112925720A (zh) | 一种软件sql测试方法、装置、存储介质及系统 | |
US20190235999A1 (en) | Automated Unit Testing In A Mainframe Environment | |
Ledvinka et al. | A comparison of object-triple mapping libraries | |
CN110580170B (zh) | 软件性能风险的识别方法及装置 | |
Almeida et al. | Performance analysis and optimization techniques for oracle relational databases | |
US7155432B2 (en) | Method and system decoding user defined functions | |
US20200301922A1 (en) | Multiform persistence abstraction | |
CN114238467A (zh) | 一种结构化数据分析方法及系统 | |
CN112579705B (zh) | 元数据采集方法、装置、计算机设备和存储介质 | |
CN114547083A (zh) | 数据处理方法、装置及电子设备 | |
CN113885970A (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 |