CN108319711B - 数据库的事务一致性测试方法、装置、存储介质及设备 - Google Patents
数据库的事务一致性测试方法、装置、存储介质及设备 Download PDFInfo
- Publication number
- CN108319711B CN108319711B CN201810124776.2A CN201810124776A CN108319711B CN 108319711 B CN108319711 B CN 108319711B CN 201810124776 A CN201810124776 A CN 201810124776A CN 108319711 B CN108319711 B CN 108319711B
- Authority
- CN
- China
- Prior art keywords
- sql
- transaction
- database
- tested
- sql 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.)
- Active
Links
Images
Classifications
-
- 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/23—Updating
- G06F16/2358—Change logging, detection, and notification
-
- 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/23—Updating
- G06F16/2308—Concurrency control
-
- 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/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
Abstract
本发明公开了一种数据库的事务一致性测试方法、装置、存储介质及设备,属于数据库技术领域。方法包括:获取待测试数据库存在的异常现象;获取待测试数据库的SQL测试脚本文件的注释内容;根据注释内容,确定SQL测试脚本文件中与异常现象对应的至少一个事务包含的SQL语句;获取每一条SQL语句的执行顺序,按照每一条SQL语句的执行顺序,启动预设数目线程并发执行至少一个事务的SQL语句;获取至少一个事务的SQL语句的执行结果,并根据执行结果对待测试数据库进行事务一致性测试。由于对数据库的事务一致性测试是基于注释解析自动完成,无需人工实现,所以测试效率较高、节省了大量的人力物力、测试成本较低、且准确性较高,该种方法的效果较佳、且智能化。
Description
技术领域
本发明涉及数据库技术领域,特别涉及一种数据库的事务一致性测试方法、装置、存储介质及设备。
背景技术
事务(Transaction)又称为数据库事务,是指访问并可能更新数据库中各种数据项的一个执行单元,通常一个事务中包含对数据库进行读或写的一个操作序列。而事务一致性则是指:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。其中,一致状态的含义是数据库中的数据应满足完整性约束。以转账为例,假设用户A和用户B的存款加起来一共是5000,则无论用户A和用户B之间如何转账,转账结束后总的存款数目加起来应该还是5000,这即为事务一致性。
相关技术在对数据库进行事务一致性测试时是基于人工实现,大体过程为:对于待测试数据库,由测试人员人工确定进行测试需要执行的事务,并人工确定这些事务包含的SQL(Structured Query Language,结构化查询语言)语句以及每一条SQL语句的执行顺序,最终再由测试人员人工根据SQL语句的执行结果来判断待测试数据库是否通过事务一致性测试。
在实现本发明的过程中,发明人发现相关技术至少存在以下问题:
由于对数据库的事务一致性测试是基于人工实现,所以会存在测试效率低、耗时耗力、测试成本较高等一系列问题,所以该种测试方法的效果不佳、不够智能化。
发明内容
本发明实施例提供了一种数据库的事务一致性测试方法、装置、存储介质及设备,解决了相关技术测试效率低、耗时耗力、测试成本较高等一系列的问题。所述技术方案如下:
一方面,提供了一种数据库的事务一致性测试方法,所述方法包括:
获取待测试数据库存在的异常现象;
获取所述待测试数据库的SQL测试脚本文件的注释内容;
根据所述注释内容,确定所述SQL测试脚本文件中与所述异常现象对应的至少一个事务包含的SQL语句;
获取每一条SQL语句的执行顺序,按照所述每一条SQL语句的执行顺序,启动预设数目线程并发执行所述至少一个事务的SQL语句;
获取所述至少一个事务的SQL语句的执行结果,并根据所述执行结果对所述待测试数据库进行事务一致性测试。
另一方面,提供了一种数据库的事务一致性测试装置,所述装置包括:
第一获取模块,用于获取待测试数据库存在的异常现象;
所述第一获取模块,还用于获取所述待测试数据库的SQL测试脚本文件的注释内容;
确定模块,用于根据所述注释内容,确定所述SQL测试脚本文件中与所述异常现象对应的至少一个事务包含的SQL语句;
第二获取模块,用于获取每一条SQL语句的执行顺序;
处理模块,用于按照所述每一条SQL语句的执行顺序,启动预设数目线程并发执行所述至少一个事务的SQL语句;
所述第二获取模块,还用于获取所述至少一个事务的SQL语句的执行结果;
所述处理模块,还用于根据所述执行结果对所述待测试数据库进行事务一致性测试。
另一方面,提供了一种存储介质,所述存储介质中存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现上述的数据库的事务一致性测试方法。
另一方面,提供了一种用于进行事务一致性测试的设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述至少一条指令由所述处理器加载并执行以实现上述的数据库的事务一致性测试方法。
本发明实施例提供的技术方案带来的有益效果是:
由于对数据库的事务一致性测试是基于对注释内容解析自动完成,无需人工实现,所以测试效率较高、节省了大量的人力物力、测试成本较低、且准确性较高,所以该种测试方法的效果较佳、且智能化。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种任务执行系统的结构示意图;
图2是本发明实施例提供的一种数据库的事务一致性测试方法的流程图;
图3是本发明实施例提供的一种SQL测试脚本文件的示意图;
图4是本发明实施例提供的一种数据库的事务一致性测试方法的整理流程示意图;
图5是本发明实施例提供的一种数据库的事务一致性测试装置的结构示意图;
图6是本发明实施例提供的一种用于进行事务一致性测试的设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
在对本发明实施例进行详细地解释说明之前,先对本发明实施例可能涉及到的一些名词进行一下解释说明。
SQL:是专为数据库建立的操作命令集,其用来访问和操作数据库。而SQL语句用于取回和更新数据库中的数据。
其中,SQL是一种功能齐全的数据库语言。在使用SQL时,仅需用户要发出“做什么”的命令,而具体“怎么做”是无需用户考虑的。另外,由于SQL功能强大、简单易学以及使用方便,目前已经成为了数据库操作的基础,时下几乎所有类型的数据库均支持SQL。
事务:又称为数据库事务,是指访问并可能更新数据库中各种数据项的一个执行单元,通常一个事务中包含对数据库进行读或写的一个操作序列。其中,事务的存在通常有以下两个目的:
1、为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
2、当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。
其中,当一个事务被提交给了数据库管理系统后,则数据库管理系统需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中。如果该事务中有的操作没有成功完成,则该事务中的所有操作都需要被回滚,回到该事务执行前的状态;此外需要说明的是,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。
数据库注释:将特定的字符标识作为注释开始标志,从注释开始标志以后的内容即为注释内容。其中,注释内容可用于解释改行或者解释SQL语句。
以单行注释为例,比如可采用字符标识“--”作为注释开始标志。
其中,注释格式为“--注释内容”。需要说明的是,在注释开始标识“--”之后通常存在一个空格。
ACID:指代在数据库管理系统中事务所具有的四个特性。其中,四个特性分别为原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。
原子性:是指事务包含的所有操作要么全部成功,要么全部失败回滚。即,事务的操作如果成功则需完全应用到数据库,如果操作失败则不能对数据库有任何影响。
一致性:即事务不能破坏数据库的一些约束。详细来说,事务应确保数据库的状态从一个一致状态转变为另一个一致状态。其中,一致状态的含义是数据库中的数据应满足完整性约束。
隔离性:指代并发事务执行时,如何看到其他事务的执行结果。
详细来说,隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。即要达到这样一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前便已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
持久性:宕机重启后,数据库状态还能恢复。
详细来说,持久性是指一个事务一旦被提交,那么对数据库中数据的改变便是永久性的,即便是在数据库遇到故障的情况下也不会丢失提交事务的操作。
下面对本发明实施例提供的数据库的事务一致性测试方法所涉及的实施环境进行介绍。
如图1所示,执行上述事务一致性测试方法的任务执行系统主要包括注释解析模块101、任务调度模块102、结果对比模块103以及报告输出模块104。
其中,注释解析模块101用于:针对待测试数据库的异常场景,根据自定义的注释解析,确定针对异常场景的至少一个事物需要执行的SQL语句,以及确定每一个SQL语句的执行顺序。
任务调度模块102用于:根据需要执行的事物,启动对应数量的线程并发执行每个事物需要执行的SQL语句。需要说明的是,执行每条SQL语句的前提是它的前一条SQL语句已经执行完成。
结果对比模块103用于:对得到的执行结果同预期结果进行对比,判断事物执行用例是否通过;通过,则确定待测试数据库通过事务一致性测试。
报告输出模块104:基于得到的对比结果,按照规定输出报告。
即,本发明实施例提供了一种基于注释解析的事物一致性测试方法,该方法通过对自定义的注释内容进行解析,并启动大量线程来并发执行注释内容标识的事物的SQL语句,且在执行SQL语句时具体是按照每一条SQL语句的先后执行顺序来顺序执行的,之后将执行结果作为文本输出,进而根据输出文本来验证待测试数据库的执行结果的正确性,以完成事务一致性测试。
其中,该种事务一致性测试方法具有以下优势:能够快速运行大量并发事物的SQL语句,实现了通过跨数据库平台运行SQL,来判断待测数据库系统的执行结果是否正确;此外通过该种事务一致性测试方法,极大地提高了测试效率以及测试结果的准确性。
下面通过以下实施例来对本发明实施例提供的事务一致性测试方法进行详细地解释说明。
图2是本发明实施例提供的一种数据库的事务一致性测试方法的流程图。其中,该方法的执行主体为图1所示的任务执行系统。参见图2,本发明实施例提供的方法流程包括:
201、获取待测试数据库存在的异常现象。
其中,异常现象指代会导致待测试数据库出现运行不正常的现象,比如为导致待测试数据库出现读写异常的现象。每一种异常现象可能会引起待测试数据库出现一种异常场景。在本发明实施例中,任务执行系统可通过读取待测试数据库的异常场景文本list,来获取待测试数据库存在的异常现象,本发明实施例对此不进行具体限定。
在本发明实施例中,上述异常现象包括但不限于脏读、不可重复读、幻读、数据库删除异常等,本发明实施例对此不进行具体限定。
其中,脏读:在一个事务处理过程中读取了另一个未提交的事务中的数据。比如,当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,便会造成两个事务得到的数据不一致。
不可重复读:对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,而造成这种异常现象出现的原因是由于在查询间隔内该数据被另一个事务修改并提交了。比如,事务T1在读取某一数据,而事务T2立马修改了这个数据并且提交事务给数据库,此后事务T1再次读取该数据便会得便会得到不同的结果。其中,不可重复读和脏读的区别在于,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。
幻读:事务非独立执行时发生的一种现象。比如事务T1对一个表中所有行的某个数据项做了从a修改为b的操作,这时事务T2又在这个表中插入了一行数据项,而这个数据项的数值还是为a并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这即为幻读现象。
202、获取待测试数据库的SQL测试脚本文件的注释内容,并根据该注释内容,确定该SQL测试脚本文件中与该异常现象对应的至少一个事务包含的SQL语句。
本步骤由任务执行系统中的注释解析模块完成。
其中,待测试数据库的SQL测试脚本文件中指示了该异常现象对应的至少一个事务。在本发明实施例中,通过对SQL测试脚本文件中的注释内容进行解析,来确定进行事务一致性测试需要执行的至少一个事务以及每一个执行的事务所包含的SQL语句。
由于注释内容是按照一定规则添加在SQL测试脚本文件中的,所以本发明实施例还需按照下述规则来解析注释内容:按行顺序读取待测试数据库的SQL测试脚本文件,对于该SQL测试脚本文件中的至少一行SQL语句,在至少一行SQL语句的结尾位置获取注释内容。
其中,SQL测试脚本文件可形如图3所示,包括多行可执行的SQL语句。在本发明实施例中,注释解析模块按行顺序读取SQL测试脚本文件中所有的SQL语句,并在SQL语句的结尾位置处来获取执行SQL语句的事务。
在本发明实施例中,注释解析模块在具体获取一行SQL语句的注释内容时,通常是先在该行SQL语句的结尾位置处确定注释开始标志,之后在距离注释开始标志目标数目个空格的位置处获取注释内容。
需要说明的第一点是,由于一行SQL语句一般以分号结束,所以上述结尾位置一般指代一行SQL语句的分号位置之后。在本发明实施例中,注释开始标志包括但不限于“--”。以注释开始标志为单行注释符“--”为例,则目标数目的取值通常为1,即在“--”之后必须存在一个空格。
需要说明的第二点是,注释内容中至少包括执行该行SQL语句的事务的标识信息。其中,标识信息可由字母和数字混合组成,本发明实施例对比不进行具体限定。举例来说,假设注释内容为“--T1”,则空格后面紧跟的大写字母“T”和数字“1”便为事务的标识信息。其中,这一注释内容表示该行SQL语句由事物T1执行。
需要说明的第三点是,在注释解析模块依次读完所有的SQL语句后,可通过一个数组来记录需执行的所有的事物数并标记每个事物需要执行的SQL语句,本发明实施例对此不进行具体限定。
以图3为例,SQL测试脚本文件中一共标记了T1和T2两个事物。其中,如图3所示,事务T1需执行行号分别为1、2、3、5、7、9以及12的7行SQL语句,而事物T2则需执行行号分别为4、6、8、10以及11的5行SQL语句。
203、获取每一条SQL语句的执行顺序,按照每一条SQL语句的执行顺序,启动预设数目线程并发执行至少一个事务的SQL语句。
本步骤由任务执行系统中的任务调度模块完成。
在本发明实施例中,一条SQL语句即指代图3中所示的一行SQL语句。
其中,当前一行SQL语句执行的前提是位于其前一行的SQL语句已经被执行。即,本发明实施例根据每一条SQL语句的行号来确定每一条SQL语句的执行顺序。
换一种表达方式,本发明实施例中所有SQL语句执行的顺序按照行号依赖。比如,在图3中第2行SQL语句被执行的前提是第1行SQL语句已经被执行,第3行SQL语句被执行的前提是第2行SQL语句已经被执行,依次类推。
另外,如果SQL测试脚本文件中存在没有注释内容的SQL语句,即无法通过注释内容来确定执行这些SQL语句的事务,则任务调度模块可随机为这些SQL语句分配事务。继续以图3为例,假设第1行、第2行以及第12行SQL语句没有注释内容对其进行标记,则可将第1行、第2行以及第12行SQL语句分配给事务T1执行,本发明实施例对此不进行具体限定。
在另一个实施例中,为了提高测试效率,任务调度模块会开启大量线程来并发执行事务。其中,任务调度模块开启的线程数量与需要执行的事务数量正相关。比如,预设数目的大小与需要执行的事务数量一致。
即,若注释解析模块统计出需要执行的事务数量为2个,则任务调度模块会开启2个线程来处理这2个事务。其中,线程的名称标识可与相应的事务的标识信息一致,本发明实施例对此不进行具体限定。
继续以图3为例,由于需要执行的事务数量为2个,所以任务调度模块开启2个线程来执行事务T1和T2。其中,执行事务T1的线程可称之为线程T1,执行事务T2的线程可称之为线程T2。而线程T1负责执行第1、2、3、5、7、9以及12行的SQL语句,而线程T2负责执行第6、8、10以及11行的SQL语句。
204、获取至少一个事务的SQL语句的执行结果,并根据得到的执行结果对待测试数据库进行事务一致性测试。
本步骤由任务执行系统中的结果对比模块完成。
在本发明实施例中,结果对比模块将得到的执行结果保存为文本形式,在本发明实施例中可将其称之为执行结果文本。之后,结果对比模块将该执行结果文本与预先设置的基准文本进行MD5(Message Digest Algorithm,消息摘要算法第五版)比对;若最终该执行结果文本的MD5值与上述基准文本的MD5值一致,则确定事务执行用例通过,待测试数据库通过事务一致性测试。
若最终该执行结果文本的MD5值与上述基准文本的MD5值不一致,则确定事务执行用例未通过,待测试数据库未通过事务一致性测试,待测试数据库存在bug。
205、输出得到的事务一致性测试结果。
本步骤由任务执行系统的报告输出模块完成。
其中,报告输出模块可预先定义输出的报告形式,这样在得到结果对比模块输出的事务一致性测试结果后,便可按照定义的报告形式来输出报告,本发明实施例对比不进行具体限定。
下面以待测试数据库出现多个异常场景为例,对本发明实施提供的事务一致性测试方法的整体流程进行梳理。参见图4,包括下述方法流程:
(a)、读取待测试数据库的异常场景文本list。
其中,异常场景文本list中记录了待测试数据库存在的全部异常现象。
(b)、一次获取全部的异常现象,对于每一个异常现象,根据定义的注释内容解析需要执行的事务以及每一个事务需执行的SQL语句。
(c)、启动相应数目的线程来并发执行事务的SQL语句。
其中,启动的线程数和需要执行的事物数量一致,启动的线程的名称标识也可与相应的事务的标识信息一致。需要说明的是,SQL语句的执行顺序按照行号顺序依赖。
(d)、每对应执行完成一个异常场景,便将得到的执行结果保存在文本中。
其中,这个文本在本文中可称之为执行结果文本。其中,上述执行完成一个异常场景的含义是与该异常场景对应的事务已经执行完成。
(e)、依次执行完所有的异常场景。
(f)、将执行结果文本和已经存在的基准文本进行MD5对比;若二者的MD5值一致,则说明执行结果正确,待测试数据库满足事务一致性需求;否则,则表明执行结果不准确,待测试数据库不满足事务一致性需求,待测数据库存在bug。
(g)、以报告形式输出事务一致性测试结果。
其中,输出的报告中可包括执行的异常场景总数、成功数、失败数、执行失败的异常场景的结果输出等,本发明实施例对此不进行具体限定。
本发明实施例提供的方法,由于对数据库的事务一致性测试是基于对注释内容解析自动完成,无需人工实现,所以测试效率较高、节省了大量的人力物力、测试成本较低、且准确性较高,所以该种测试方法的效果较佳、且智能化。另外,由于通过启动多线程并发执行SQL语句,所以进一步地确保了测试效率。
图5是本发明实施例提供的一种数据库的事务一致性测试装置的结构示意图。参见图5,该装置包括:
第一获取模块501,用于获取待测试数据库存在的异常现象;
第一获取模块501,还用于获取所述待测试数据库的SQL测试脚本文件的注释内容;
确定模块502,用于根据所述注释内容,确定所述SQL测试脚本文件中与所述异常现象对应的至少一个事务包含的SQL语句;
第二获取模块503,用于获取每一条SQL语句的执行顺序;
处理模块504,用于按照所述每一条SQL语句的执行顺序,启动预设数目线程并发执行所述至少一个事务的SQL语句;
第二获取模块503,还用于获取所述至少一个事务的SQL语句的执行结果;
处理模块504,还用于根据所述执行结果对所述待测试数据库进行事务一致性测试。
本发明实施例提供的装置,由于对数据库的事务一致性测试是基于注释解析自动完成,无需人工实现,所以测试效率较高、节省了大量的人力物力、测试成本较低、且准确性较高,所以该种测试方法的效果较佳、且智能化。
在另一个实施例中,所述第一获取模块,还用于按行顺序读取所述待测试数据库的SQL测试脚本文件;对于所述SQL测试脚本文件中包含的至少一条SQL语句,在所述至少一条SQL语句的结尾位置获取所述注释内容;其中,所述注释内容中至少包括执行所述SQL语句的事务的标识信息。
在另一个实施例中,所述第一获取模块,还用于对于任意一条SQL语句,在所述任意一条SQL语句的结尾位置处确定注释开始标志;在距离所述注释开始标志目标数目个空格的位置处获取所述注释内容。
在另一个实施例中,所述第二获取模块,还用于在所述SQL测试脚本文件中获取所述每一条SQL语句的行号;根据所述每一条SQL语句的行号,确定所述每一条SQL语句的执行顺序。
在另一个实施例中,所述处理模块,还用于将所述执行结果保存为文本形式,得到执行结果文本;将所述执行结果文本与预先设置的基准文本进行消息摘要算法第五版MD5比对;若所述执行结果文本的MD5值与所述基准文本的MD5值一致,则确定所述待测试数据库通过事务一致性测试。
在另一个实施例中,所述预设数目的大小与所述至少一个事务中包含的事务数量一致。
上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再一一赘述。
需要说明的是:上述实施例提供的数据库的事务一致性测试装置在进行事务一致性测试时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据库的事务一致性测试装置与数据库的事务一致性测试方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图6是本发明实施例提供的一种用于进行数据库事务一致性测试的设备的结构示意图,该设备600可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)601和一个或一个以上的存储器602,其中,所述存储器602中存储有至少一条指令,所述至少一条指令由所述处理器601加载并执行以实现上述各个方法实施例提供的数据库的事务一致性测试方法。当然,该设备还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该设备还可以包括其他用于实现设备功能的部件,在此不做赘述。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括指令的存储器,上述指令可由终端中的处理器执行以完成上述实施例中的数据库的事务一致性测试方法。例如,所述计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种数据库的事务一致性测试方法,其特征在于,所述方法包括:
获取待测试数据库存在的异常现象,所述异常现象指代导致所述待测试数据库出现运行不正常的现象;
获取所述待测试数据库的结构化查询语言SQL测试脚本文件的注释内容,所述SQL测试脚本文件中指示了所述异常现象对应的至少一个事务;所述注释内容中至少包括所述至少一个事务的标识信息;
根据所述注释内容,确定所述SQL测试脚本文件中与所述异常现象对应的至少一个事务包含的SQL语句;其中,对于所述SQL测试脚本文件中没有注释内容的SQL语句,执行所述没有注释内容的SQL语句的事务是随机分配的;通过数组记录所述至少一个事务的事务数并标记每个事务需要执行的SQL语句;
获取每一条SQL语句的执行顺序,按照所述每一条SQL语句的执行顺序,启动预设数目线程并发执行所述至少一个事务的SQL语句;
获取所述至少一个事务的SQL语句的执行结果,并根据所述执行结果对所述待测试数据库进行事务一致性测试。
2.根据权利要求1所述的方法,其特征在于,所述获取所述待测试数据库的结构化查询语言SQL测试脚本文件的注释内容,包括:
按行顺序读取所述待测试数据库的SQL测试脚本文件;
对于所述SQL测试脚本文件中包含的至少一条SQL语句,在所述至少一条SQL语句的结尾位置获取所述注释内容。
3.根据权利要求2所述的方法,其特征在于,所述在所述至少一条SQL语句的结尾位置获取所述注释内容,包括:
对于任意一条SQL语句,在所述任意一条SQL语句的结尾位置处确定注释开始标志;
在距离所述注释开始标志目标数目个空格的位置处获取所述注释内容。
4.根据权利要求1所述的方法,其特征在于,所述获取每一条SQL语句的执行顺序,包括:
在所述SQL测试脚本文件中获取所述每一条SQL语句的行号;
根据所述每一条SQL语句的行号,确定所述每一条SQL语句的执行顺序。
5.根据权利要求1所述的方法,其特征在于,所述根据所述执行结果对所述待测试数据库进行事务一致性测试,包括:
将所述执行结果保存为文本形式,得到执行结果文本;
将所述执行结果文本与预先设置的基准文本进行消息摘要算法第五版MD5比对;
若所述执行结果文本的MD5值与所述基准文本的MD5值一致,则确定所述待测试数据库通过事务一致性测试。
6.根据权利要求1至5中任一权利要求所述的方法,其特征在于,所述预设数目的大小与所述至少一个事务中包含的事务数量一致。
7.一种数据库的事务一致性测试装置,其特征在于,所述装置包括:
第一获取模块,用于获取待测试数据库存在的异常现象,所述异常现象指代导致所述待测试数据库出现运行不正常的现象;
所述第一获取模块,还用于获取所述待测试数据库的结构化查询语言SQL测试脚本文件的注释内容,所述SQL测试脚本文件中指示了所述异常现象对应的至少一个事务;所述注释内容中至少包括所述至少一个事务的标识信息;
确定模块,用于根据所述注释内容,确定所述SQL测试脚本文件中与所述异常现象对应的至少一个事务包含的SQL语句;其中,对于所述SQL测试脚本文件中没有注释内容的SQL语句,执行所述没有注释内容的SQL语句的事务是随机分配的;通过数组记录所述至少一个事务的事务数并标记每个事务需要执行的SQL语句;
第二获取模块,用于获取每一条SQL语句的执行顺序;
处理模块,用于按照所述每一条SQL语句的执行顺序,启动预设数目线程并发执行所述至少一个事务的SQL语句;
所述第二获取模块,还用于获取所述至少一个事务的SQL语句的执行结果;
所述处理模块,还用于根据所述执行结果对所述待测试数据库进行事务一致性测试。
8.根据权利要求7所述的装置,其特征在于,所述第一获取模块,还用于按行顺序读取所述待测试数据库的SQL测试脚本文件;对于所述SQL测试脚本文件中包含的至少一条SQL语句,在所述至少一条SQL语句的结尾位置获取所述注释内容。
9.一种存储介质,其特征在于,所述存储介质中存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现如权利要求1至6中任一权利要求所述的数据库的事务一致性测试方法。
10.一种用于进行事务一致性测试的设备,其特征在于,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述至少一条指令由所述处理器加载并执行以实现如权利要求1至6中任一权利要求所述的数据库的事务一致性测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810124776.2A CN108319711B (zh) | 2018-02-07 | 2018-02-07 | 数据库的事务一致性测试方法、装置、存储介质及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810124776.2A CN108319711B (zh) | 2018-02-07 | 2018-02-07 | 数据库的事务一致性测试方法、装置、存储介质及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108319711A CN108319711A (zh) | 2018-07-24 |
CN108319711B true CN108319711B (zh) | 2021-07-27 |
Family
ID=62903056
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810124776.2A Active CN108319711B (zh) | 2018-02-07 | 2018-02-07 | 数据库的事务一致性测试方法、装置、存储介质及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108319711B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110780920B (zh) * | 2019-11-01 | 2023-11-03 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种数据处理方法、装置、客户端及介质 |
CN111090658B (zh) * | 2019-11-08 | 2021-03-02 | 网联清算有限公司 | 异常事务处理方法、系统及其设备 |
CN113127501B (zh) * | 2019-12-30 | 2024-04-30 | 深圳市华胜软件技术有限公司 | 执行多条sql语句的方法、装置、智能终端及存储介质 |
CN112632105B (zh) * | 2020-01-17 | 2021-09-10 | 华东师范大学 | 大规模事务负载生成与数据库隔离级别正确性验证系统及方法 |
CN111782721B (zh) * | 2020-05-09 | 2024-03-01 | 浙江小遛信息科技有限公司 | 一种数据同步方法、装置、电子设备及存储介质 |
CN112363932B (zh) * | 2020-11-11 | 2024-03-22 | 网易(杭州)网络有限公司 | 待测试业务对象的测试方法及装置、电子装置 |
CN115632877B (zh) * | 2022-12-01 | 2023-04-07 | 成都九洲电子信息系统股份有限公司 | 一种大规模pcap数据正确性验证方法、系统及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729361A (zh) * | 2012-10-12 | 2014-04-16 | 百度在线网络技术(北京)有限公司 | 一种数据库性能测试方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102323945B (zh) * | 2011-09-02 | 2013-05-01 | 南京中兴力维软件有限公司 | 一种基于sql的数据库管理方法和装置 |
US9697227B2 (en) * | 2014-10-27 | 2017-07-04 | Cohesity, Inc. | Concurrent access and transactions in a distributed file system |
CN105183641B (zh) * | 2015-08-13 | 2017-12-12 | 浪潮(北京)电子信息产业有限公司 | 一种内核模块的数据一致性校验方法及系统 |
CN107315668B (zh) * | 2017-06-26 | 2021-06-29 | 郑州云海信息技术有限公司 | 分布式存储系统数据一致性自动化快速检测方法及装置 |
-
2018
- 2018-02-07 CN CN201810124776.2A patent/CN108319711B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729361A (zh) * | 2012-10-12 | 2014-04-16 | 百度在线网络技术(北京)有限公司 | 一种数据库性能测试方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108319711A (zh) | 2018-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108319711B (zh) | 数据库的事务一致性测试方法、装置、存储介质及设备 | |
US9953051B2 (en) | Multi-version concurrency control method in database and database system | |
US9207933B2 (en) | Identifying authors of changes between multiple versions of a file | |
US7917895B2 (en) | Automated software testing and validation system | |
US10509693B2 (en) | Method for identifying a cause for a failure of a test | |
CN111259004B (zh) | 一种存储引擎中数据索引的方法以及相关装置 | |
US10990515B2 (en) | Automated unit testing in a mainframe environment | |
US11436133B2 (en) | Comparable user interface object identifications | |
US9390111B2 (en) | Database insert with deferred materialization | |
US8738569B1 (en) | Systematic verification of database metadata upgrade | |
CN110837471B (zh) | 一种测试方法、装置、服务器及存储介质 | |
US10592400B2 (en) | System and method for creating variants in a test database during various test stages | |
CN112685312A (zh) | 一种未覆盖代码的测试用例推荐方法及装置 | |
US20190354468A1 (en) | Code coverage module with testing function identifier | |
US8589734B2 (en) | Verifying correctness of processor transactions | |
CN113268470A (zh) | 一种高效的数据库回滚方案验证方法 | |
CN111159020B (zh) | 一种应用于同步软件测试的方法和装置 | |
CN110750457B (zh) | 一种基于内存数据库的自动化单元测试方法及装置 | |
CN115422180A (zh) | 数据校验方法及系统 | |
CN113792026A (zh) | 数据库脚本的部署方法、装置及计算机可读存储介质 | |
US8326808B2 (en) | Information processing apparatus, and information processing method, program, and recording medium | |
CN111767222A (zh) | 数据模型的验证方法、装置、电子设备、存储介质 | |
CN113778997B (zh) | 一种数据库版本管理方法、系统及设备 | |
CN111444082B (zh) | 基于Petri网的并发错误检测方法及系统 | |
CN108509328B (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 |