CN114610644A - 测试数据库的方法及装置 - Google Patents

测试数据库的方法及装置 Download PDF

Info

Publication number
CN114610644A
CN114610644A CN202210296904.8A CN202210296904A CN114610644A CN 114610644 A CN114610644 A CN 114610644A CN 202210296904 A CN202210296904 A CN 202210296904A CN 114610644 A CN114610644 A CN 114610644A
Authority
CN
China
Prior art keywords
data
rule
query result
transaction
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
Application number
CN202210296904.8A
Other languages
English (en)
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.)
Beijing Oceanbase Technology Co Ltd
Original Assignee
Beijing Oceanbase Technology 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 Beijing Oceanbase Technology Co Ltd filed Critical Beijing Oceanbase Technology Co Ltd
Priority to CN202210296904.8A priority Critical patent/CN114610644A/zh
Publication of CN114610644A publication Critical patent/CN114610644A/zh
Pending legal-status Critical Current

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
    • 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/3688Test 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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本公开披露了一种测试数据库的方法及装置,所述数据库包括第一数据表,所述第一数据表包括与事务关联的一个或多个第一数据组,所述第一数据组包括一行或多行数据,所述第一数据组中的数据满足第一数据规则,所述方法包括:执行一个或多个事务操作,以更新所述第一数据表中的数据,其中,所述事务操作为针对所述第一数据组内的数据的事务操作,且所述事务操作不改变所述第一数据组的所述第一数据规则;向更新后的所述第一数据表发送查询语言,得到查询结果;根据所述第一数据规则校验所述查询结果。

Description

测试数据库的方法及装置
技术领域
本公开涉及数据库测试技术领域,具体涉及一种测试数据库的方法及装置
背景技术
对数据库进行测试是保障数据库质量的重要手段,然而,现有技术中,难以实现对数据库正确性测试,随着大数据时代的到来,亟需一种测试数据库正确性的方法。
发明内容
有鉴于此,本公开提供一种测试数据库的方法及装置,以解决现有技术难以实现对数据库正确性测试的问题。
第一方面,提供一种测试数据库的方法,所述数据库包括第一数据表,所述第一数据表包括与事务关联的一个或多个第一数据组,所述第一数据组包括一行或多行数据,所述第一数据组中的数据满足第一数据规则,所述方法包括:执行一个或多个事务操作,以更新所述第一数据表中的数据,其中,所述事务操作为针对所述第一数据组内的数据的事务操作,且所述事务操作不改变所述第一数据组的所述第一数据规则;向更新后的所述第一数据表发送查询语言,得到查询结果;根据所述第一数据规则校验所述查询结果。
可选地,所述事务操作包括针对同一第一数据组的并行事务操作。
可选地,所述第一数据表中与事务关联的一个或多个第一数据组构成第二数据组,所述第一数据表包括一个或多个第二数据组,所述第二数据组中的数据满足第二数据规则,所述根据所述第一数据规则校验所述查询结果,包括:
根据所述第一数据规则和/所述第二数据规则校验所述查询结果。
可选地,所述第一数据规则用于约束所述第一数据组中的数据类型、数据内容、列与列之间的数据关系及第一数据组中数据的行数中的一种或多种。
可选地,所述第二数据规则用于约束所述第二数据组中第一数据组的数量。
可选地,在执行所述执行一个或多个事务操作和/执行所述向更新后的所述第一数据表发送查询语言时,向所述第一数据表插入所述第一数据组。
可选地,所述向更新后的所述第一数据表发送查询语言,得到查询结果,包括:根据测试用例向所述更新后的所述第一数据表发送查询语言;所述根据所述第一数据规则校验所述查询结果,包括:根据测试用例中的预期查询结果校验所述查询结果,所述测试用例的预期查询结果符合所述第一数据规则。
可选地,所述根据所述第一数据规则和/所述第二数据规则校验所述查询结果,包括:根据测试用例中的预期查询结果校验所述查询结果,所述测试用例的预期查询结果符合所述第一数据规则和/所述第二数据规则。
第二方面提供一种测试数据库的装置,所述数据库包括第一数据表,所述第一数据表包括与事务关联的一个或多个第一数据组,所述第一数据组包括一行或多行数据,所述第一数据组中的数据满足第一数据规则,所述装置包括:更新单元,被配置为执行一个或多个事务操作,以更新所述第一数据表中的数据,其中,所述事务操作为针对所述第一数据组内的数据的事务操作,且所述事务操作不改变所述第一数据组的所述第一数据规则;查询单元,被配置为向更新后的所述第一数据表发送查询语言,得到查询结果;校验单元,被配置为根据所述第一数据规则校验所述查询结果。
可选地,所述事务操作包括针对同一第一数据组的并行事务操作。
可选地,所述第一数据表中与事务关联的一个或多个第一数据组构成第二数据组,所述第一数据表包括一个或多个第二数据组,所述第二数据组中的数据满足第二数据规则,所述根据所述第一数据规则校验所述查询结果,所述检验单元还被配置为根据所述第一数据规则和/所述第二数据规则校验所述查询结果。
可选地,所述第一数据规则用于约束所述第一数据组中的数据类型、数据内容、列与列之间的数据关系及第一数据组中数据的行数中的一种或多种。
可选地,所述第二数据规则用于约束所述第二数据组中第一数据组的数量。
可选地,所述装置还包括数据插入单元,被配置为在执行所述执行一个或多个事务操作和/执行所述向更新后的所述第一数据表发送查询语言时,向所述第一数据表插入所述第一数据组。
可选地,所述向更新后的所述第一数据表发送查询语言,得到查询结果,包括:根据测试用例向所述更新后的所述第一数据表发送查询语言;所述根据所述第一数据规则校验所述查询结果,包括:根据测试用例中的预期查询结果校验所述查询结果,所述测试用例的预期查询结果符合所述第一数据规则。
可选地,所述根据所述第一数据规则和/所述第二数据规则校验所述查询结果,包括:根据测试用例中的预期查询结果校验所述查询结果,所述测试用例的预期查询结果符合所述第一数据规则和/所述第二数据规则。
第三方面提供一种测试数据库的装置,包括存储器及处理器,所述存储器用于存储代码,所述处理器用于调用所述存储器中的代码,以执行如第一方面所述的方法。
第四方面,提供一种计算机可读存储介质,其上存储有可执行代码,当所述可执行代码被执行时,能够实现如第一方面所述的方法。
第五方面,提供一种计算机程序产品,包括可执行代码,当所述可执行代码被执行时,能够实现如第一方面所述的方法。
本公开实施例提供的提供的一种测试数据库的方法能够针对数据组进行事务操作,数据组内的数据满足固定的数据规则,事务操作不会改变该固定的数据规则,因此事务操作的结果是可预期的,通过对可预期的事务操作结果进行校验,实现对数据库正确性测试。
附图说明
图1为本公开实施例提供的一种测试数据库的方法的流程性示意图。
图2为本公开实施例提供的一种测试数据库的方法示意图。
图3为本公开实施例提供的一种测试数据库的装置的结构性示意图。
图4为本公开实施例提供的另一种测试数据库的装置的结构性示意图。
具体实施方式
下面对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本公开一部分实施例,而不是全部的实施例。
事务又称为数据库事务,事务可以是访问并可能更新数据库中各种数据项的一个执行单元,一个事务中可以包含对数据库进行读或写的一个操作序列,在一些实施例中,一个事务中可以包括一个或多个数据库查询语言,例如,一个事务中可以包括一条或多条结构化查询语言(structured query language,SQL)语句。为了保证数据库事务的正确执行,数据库事务应该具有原子性、一致性、隔离性及持久性。其中,事务的原子性可以表示事务的不可分割性,例如,事务中的操作要么全部执行要么全部不执行;事务的一致性可以表示事务必须是数据库从一个一致性状态变为另一个一致性状态;事务的隔离性可以表示事务之间的操作是相互隔离,互不干扰的;事务的持久性可以表示事务对数据库中的操作是永久的。
确保数据库的正确性是数据库设计时需要重点考虑的问题,数据库的正确性可以包括事务的正确性及数据库查询结果的正确性,其中,事务的正确性例如可以是执行事务之后数据库数据的正确性。可以通过测试数据库检查事务是否满足前文提到的原子性、一致性、隔离性及持久性,以检查事的正确性。数据库的正确性测试还可以包括事务隔离级别的检验以及数据库查询结果的正确性校验,也就是说,通过测试数据库还可以校验数据库中事务的隔离级别及查询结果的正确性。数据库查询结果的正确性例如可以是查询语言的结果的正确性,查询语言例如可以包括复杂SQL查询、大数据量查询,不同SQL功能查询等。
数据库正确性测试可以分为白盒测试及黑盒测试,白盒测试可以是在已知数据库内部结构和工作逻辑的情况下,验证数据库的正确性,黑盒测试可以不用关心数据库内部的结构,通过验证数据库输入及输出的方式验证数据库的正确性。在进行数据库正确性测试时可以使用预设的测试用例进行测试,该测试用例可以是在已知数据库结构下构建的,测试用例例如可以包括测试目标、测试语句及预期结果等,该测试语句例如可以是SQL语句。在一些实施例中,可以通过比对测试用例的测试结果与预设结果,判断数据库的正确性。
数据库系统中同一时刻可能存在多个并发执行的事务,例如,在分布式数据库中,多个用户并发的对数据库进行数据读写操作。多个并发事务例如可以是多个用户同时向数据库中写入数据,例如也可以是多个用户对数据库进行读数据及写数据的操作。并发事务可能导致数据库出现数据丢失、脏读、非重复读、幻读等数据错误。现有技术提供了多种并发事务控制机制以确保并发事务下数据库的正确性,在数据库测试阶段,针对并发事务下数据库正确性测试,以验证数据库设计的正确性是很有必要的。
然而,现有技术中,没有针对数据库的正确性的测试方法,尤其在并发事务下,目前业界的数据库测试工具软件及测试框架,没有针对数据库在并发读写情况下进行数据正确性校验的功能。例如,Jepsen测试框架可以针对分布式系统进行性能测试,但是不能针对数据库进行测试,而且,该测试框架主要是验证分布式设备故障的情况下,分布式系统的正确性。并且该测试框架无法支持在并发事务下,数据库正确性校验的功能,也不具备数据库查询功能的正确性校验,例如,该测试框架不支持并发读写情况下数据库及SQL功能的正确性校验。又例如,sysbench测试工具可以用于测试数据库的性能,可以具有并发读写数据库的功能,例如,可以在并发情况下,测试数据库试每秒读的次数、每秒写的次数、操作事务次数及耗时及响应时间等性能参数,但是该测试方法不具备数据库正确性测试的功能。又例如,BenchmarkSQL开源数据库测试工具,可以具有TPCC中的事务能力验证方法,可以通过主要通过模拟了一个仓储物流的业务场景,包括新建订单、付款、发货、订单查询、库存查询五个事务操作。该测试方法中,执行的事务都比较简单,且不具备数据库查询正确性测试,也不方便增加事务以及SQL场景。
这是因为,现有技术,通常是采用比对数据库事务的执行结果与预期结果是否一致的方法进行数据库正确性的测试,在一些实施中,可以在多个相同的数据库中执行相同的事务以验证数据库的正确性,在另一些实施例中,可以通过预先构建的测试用例,测试数据库的正确性,比对测试结果与预期结果的正确性以校验数据库的正确性。然而,现有技术中,事务操作的结果是不可预知的,尤其并发事务情况下,数据库中并发冲突的事务的执行顺序及事务的执行结果是未知的。同时,为了测试覆盖的更全,需要构建大量的满足不同数据库类型的测试用例,这需要消耗大量的人力及物力。在另一些实施例中,可以采用少量并发事务验证数据库的正确性,但是,测试的覆盖率较小,并不能模拟数据库真实的并发情况。
为了解决上述问题,本公开提供一种测试数据库的方法及装置,以解决现有技术中数据库正确性测试难以实现的问题。
本公开实施例提供的测试数据库中可以存储有第一数据表,该第一数据表可以包括与事务关联的一个或多个第一数据组,该一个或多个第一数据组中可以包括一行或多行数据,第一数据组中的数据满足第一数据规则。
第一数据表可以包括多个第一数据组,该第一数据组可以与事务相关联,一个第一数据组可以与一个或多个事务相关联,事务与第一数据组相关联可以理解为事务可以对第一数据组中的数据进行事务操作。第一数据组中可以包括一行或多行数据,事务对第一数据组中的事务进行事务操作时,可以对第一数据组中的一行或多行数据进行事务操作。
第一数据组中的数据满足第一数据规则,该第一数据规则可以用于约束第一数据组中的数据类型、数据内容、列与列之间的数据关系及第一数据组中数据的行数中的一种或多种。第一数据规则可以约束第一数据组中每列数据的数据类型,该数据类型例如可以是数字,例如还可以是随机字符串,例如还可以是随机字符串的校验值。第一数据规则可以约束第一数据组中每列数据的数据内容,该数据内容例如可以是单调递增的数字,例如还可以是长度随机内容随机的字符串,例如也可以是随机数字。第一数据规则可以约束列与列之间的数据关系,该列与列之间的数据关系例如可以是列与列数据之间和的关系,例如可以约束在一组第一数据组中两个随机数列与列的和为固定值。第一数据规则可以约束一组第一数据组中数据的行数,例如一组第一数据组中数据的行数可以是3行。下面结合表1对本公开实施例提供的第一数据表进行详细的介绍。
表1
row_id trx_grp v1 v1_check r1 r2
0 0 随机字符串 v1的校验值 10 11
1 0 随机字符串 v1的校验值 12 13
2 0 随机字符串 v1的校验值 14 -60
3 1 随机字符串 v1的校验值 100 101
4 1 随机字符串 v1的校验值 102 103
5 1 随机字符串 v1的校验值 104 -510
6 2 随机字符串 v1的校验值 20 21
7 2 随机字符串 v1的校验值 22 23
8 2 随机字符串 v1的校验值 24 -110
9 3 随机字符串 v1的校验值 300 301
10 3 随机字符串 v1的校验值 302 303
11 3 随机字符串 v1的校验值 304 -1510
12 4 随机字符串 v1的校验值 50 51
13 4 随机字符串 v1的校验值 52 53
14 4 随机字符串 v1的校验值 54 -260
15 5 随机字符串 v1的校验值 30 31
16 5 随机字符串 v1的校验值 32 33
17 5 随机字符串 v1的校验值 34 -160
表1所示第一数据表可以包括一个或多个第一数据组,该第一数据组与事务相关联,如表1中,该第一数据组可以为事务分组(trx_grp),第一数据表可以包括5个第一数据组。事务的执行是以第一数据组为单位的,一个第一数据组内的数据可以被一个或多个事务执行操作。例如,事务1可以对trx_grp=0的第一数据组中的数据进行操作,事务2可以对trx_grp=3的第一数据组中的数据进行操作,事务1及事务2也可以对trx_grp=0第一数据组的数据进行操作。一个第一数据组可以包括1行或多行数据,如表1所示,第一数据组中可以包括3行数据。
表1所示的第一数据表可以包括6列数据,这6列数据的分别为行号(row-id)、第一数据组号(trx_grp)、v1列、v1-check列、r1列、r2列,其中行号可以为单调递增的数字,如表1所述,行号为从0开始的单调递增的数字。第一数据组号可以为数字,该数字的值可以是单调递增的,在一些实施例中,第一数据组号的值为行号/第一数据组的行数。v1列可以是长度随机内容随机的字符串,v1-check列为v1的校验值,既v1-check列为v1中长度随机内容随机的字符串的校验值,在一些实施列中,该校验值可以是由checksum计算得来的v1字符串的总和检验码。一个第一数据组中的每一行的v1可以是随机生成的且该v1的校验值是一致的,例如,在第一数据组4中,3行数据中的v1都可以是随机生成的字符串,这3行的v1-check是通过checksum计算得来的v1字符串的总和检验码,且该总和校验码是相同的。R1列为随机数字,R2列为随机数字,且在一个第一数据分组中,R1列的随机数字与R2列的随机数字相加为固定值,在一些实施例中,该固定值可以为零。如表1所示,在第一数据组3中,R1列的数字加R2列的数字为300+301+302+303+304+(-1510)=0。
图1为本公开实施例提供的一种测试数据库的方法,该方法可以由测试程序执行,该测试程序可以存储在任意类型的电子设备中。
在步骤S100,执行一个或多个事务操作,以更新第一数据表中的数据。
事务操作可以是对待测数据库的数据进行访问并更新数据库中各种数据项的一个执行单元。该待测数据库例如可以是分布式数据库,该数据库包括第一数据表,该第一数据表例如可以是前文所示的表1。
事务操作可以对第一数据表中第一数据组中的数据进行更新,例如,事务操作可以对第一数据表中的第一数据组数据进行更新。可以执行一个事务对第一数据表中的第一数据组的数据进行更新,也可以执行多个事务对第一数据表中的第一数据组的数据进行更新,其中,当执行多个事务时,多个事务可以对不同第一数据组进行更新,也可以对同一数据组进行更新。多个事务操作并发执行可以是同时执行,也可以是间隔一段时间执行。在一些实施例中,可以同时对一个第一数据组进行并发事务更新。
事务操作例如可以是热点行更新、主键更新、大事务更新等,事务操作是针对第一数据表中的第一数据组执行的,具体的,事务操作可以对第一数据组中的数据进行单行数据的修改及多行数据的修改,例如可以对第一数据组进行热点更新,具体的,对第一数据组中的一行数据进行修改。继续以表1为例,事务操作可以对表1中trx_grp=3第一数据组进行热点行更新,具体可以对row_id=10的数据进行一千次更新操作;事务操作例如还可以是表1中trx_grp=6第一数据组进行单行删增改事务,具体的可以对row_id=19行数据进行先删除数据再插入数据最后更新数据的操作;事务操作例如也可以是对trx_grp=3第一数据组中的数据进行多行更新事务操作,对第一数据组3中所有行数据进行更新,具体的可以重新生成一个分组R1及R2的数据。
事务操作不会改变第一数据组内的第一数据规则,该数据规则例如可以是前文提到的用于约束第一数据组中数据类型、数据内容、列与列之间数据关系及第一数据组内数据的行数的数据规则。换句话说,事务操作无论是否执行成功提交或执行失败回滚,都不会打破设定的第一数据组的数据规则,例如事务操作为对一个第一数据组中一行或多行数据进行更新时,不会改变该第一数据组中数据的类型、数据内容、列与列之间的数据关系及数据组内数据的行数。
事务操作可以是测试框架中设置及添加的,可以根据数据库的性质,设置不同的事务操作,例如由数据的分布,可以测试到单机事务或分布式事务等不同场景,又例如可以根据数据库的分布,制造出跨机事务及分布式事务。事务操作可以根据测试需要进行设置,例如可以为第一数据表增加索引列,例如还可以为第一数据表增加新的数据规则列,例如还可以进行主表与索引表的事务覆盖等。
事务操作可以随机执行,换句话说,事务操作可以随机对第一数据组进行事务类型随机的更新操作,事务操作可以随机对一个第一数据组的某一行或多行进行操作。例如,事务操作可以随机对表1中trx_grp=3的第一数据组进行操做,随机的事务类型为单行删增改事务,随机到对row_id=19的这行数据进行先删除。
在步骤S110,向更新后的第一数据表发送查询语言,得到查询结果。
在进行数据库正确性测试时,可以通过数据接口向数据库中的第一数据表发送查询语言,并通过该数据接口得到查询结果。查询语言可以用来查询事务操作的更新结果,查询语言可以以第一数据组为单位进行查询。例如,查询语言可以对某个第一数据组的更新结果进行查询,又例如,查询语言可以对多个第一数据组的更新结果进行查询。查询语言不仅可以查询事务操作的更新结果,也可以对第一数据表中的未更新的数据进行查询。查询语言例如可以是SQL语言,该SQL语言例如可以用来查询一个第一数据组中R1+R2的和及查询一个第一数据组中数据的行数,该SQL语言例如还可以是查询内连接的算子的结果及查询第一数据组中数据的行数。
在步骤S120,根据第一数据规则校验查询结果。
如前文所说,对第一数据表进行事务操作不会改变第一数据组的第一数据规则,因此,可以根据第一数据规则校验查询结果的正确性。第一数据规则如前文提到的用于约束第一数据组中数据类型、数据内容、列与列之间数据关系及第一数据组内数据的行数中一个或多个的数据规则。也就是说,可以通过校验第一数据组中数据类型、数据内容、列与列之间的数据关系及组内数据的行数对查询结果的正确性进行校验。
由此可见,本公开提供的一种测试数据库的方法能够针对数据组进行事务操作,数据组内的数据满足固定的数据规则,事务操作不会改变该固定的数据规则,因此事务操作的结果是可预期的,通过对可预期的事务操作结果进行校验,实现对数据库事务正确性测试。
在进行数据库正确性测试时,可以将事务操作的执行语言通过数据接口发送给待测数据库,该事务执行语言例如可以是结构化查询语言(structured query language,SQL)。下面结合表1给出几种事务操作的执行语言的示例。
事务1随机对trx_grp=3的数据进行操作,随机执行的是热点行更新事务,随机到对row_id=10的这行数据进行一千次的更新操作,既,对row_id=10这行数据中的v1列的内容更新一千次,但不改变v1_check列中v1的校验值的数值,最后事务需要提交,具体事务操作的执行语言如下:
set autocommit=0;
update obright set v1=随机字符串1,v1_check=v1的校验值where row_id=10;
update obright set v1=随机字符串2,v1_check=v1的校验值where row_id=10;
update obright set v1=随机字符串3,v1_check=v1的校验值where row_id=10;
...重复一千次
commit
事务2随机对trx_grp=6的数据进行操作,随机执行的是单行删增改事务,随机到对row_id=19的这行数据进行先删除再插入最后更新的操作,最后事务需要回滚rollback。
具体事务操作的执行语言如下:
set autocommit=0;
delete from obright where row_id=19;在
insert into obright(row_id,trx_grp,v1,v1_check,r1,r2)values(3,19,6,随机字符串,v1的校验值,计算出的r1,计算出的r2)
update obright set v1=随机字符串2,v1_check=v1的校验值where row_id=19;
rollback
事务3随对trx_grp=3的数据进行操作,随机执行的是多行更新事务,对所有trx_grp=3的数据进行更新操作,具体是重新生成一个分组的r1及r2数据,更新trx_grp=3,最后事务提交commit。
具体事务如下
set autocommit=0;
update obright set r1=33,r2=34where row_id=9;
update obright set r1=35,r2=36where row_id=10;
update obright set r1=37,r2=-175where row_id=11;
commit
从上述事务操作可以看出,事务操作是以第一数据组为单位进行数据操作的,事务操作不会改变第一数据组的第一数据规则。例如,事务1是对trx_grp=3的第一数据组进行数据操作,事务2是对trx_grp=6的第一数据组进行单行增删该的数据操作,事务3是对trx_grp=3的第一数据组进行多行更新操作,上述事务操作都是以第一数据组为单位进行操作,同时,上述事务操作没有改变第一数据组的第一数据规则,具体的,上述事务操作没有改变第一数据组中数据类型、数据内容、列与列数据的关系及数据组中数据的行数。
事务操作可是并发执行的,可以并发执行多个事务操作,该多个事务操作可以对不同第一数据组的数据进行操作,该多个事务操作可以对同一数据组的数据进行并发操作。例如,事务1及事务3都对rx_grp=6的第一数据组中的row_id=10的这行数据由事务操作,该事务操作可以是同时操作的,也可以是间隔一定时间操作的。在并发事务的情况下,可以测试数据库在并发事务下的正确性。
因为事务操作不会第一数据组为单位进行数据操作的且事务操作不会改变第一数据组的第一数据规则,所以可以根据第一数据规则对查询到的事务执行结果进行检验。例如可以校验trx_grp=3的第一数据组中v1的数据类型及v1_check的校验值。例如还可以校验trx_grp=6的第一数据组中row_id、trx_grp、v1、v1_check、r1、r2的值,r1加r2的和及该第一数据组中数据的行数。例如还可以校验trx_grp=3的第一数据组中r1加r2的和及第一数据组中数据的行数。因为,第一数据组的第一数据规则是固定的,事务的操作不会改变第一数据规则,所以事务操作的结果是可预期的,因此可以将可预期的执行结果与事务执行的查询结果进行比对,以校验事务操作的正确性。
在一些实施例中,可以根据测试用例向更新后的第一数据表发送查询语言,得到查询结果,并根据测试用例校验该查询结果。测试用例可以是对测试任务的描述,测试用例可以包括4部分,这4部分例如可以是参数、SQL查询语言、预期查询结果及预期查询的数据行数。其中,参数(Parameter)例如可以是执行SQL查询语言需要携带的参数,该参数可以根据变量随机生成。SQL查询语言可以用于校验事务操作的结果,该查询语言可以包含SQL功能等。预期查询结果可以是根据第一数据组的第一数据规则预先定义的预期查询结果,该预期查询结果例如可以是一个测试用例中SQL查询语言的预期查询结果。预期查询的数据行数例如可以是测试用例查询第一数据组的数据行数的预期值。
根据测试用例向更新后的第一数据表发送查询语言时,可以将测试用例中查询语言发送至数据库中,以查询第一数据表。测试用例中的查询语言例如可以是SQL查询语言。可以根据测试用例中的预期查询结果对查询结果进行校验,该预期结果可以是符合第一数据规则的预期结果。检验查询结果与预期查询结果是否一致,当出现查询结果与预期结果不一致时,说明数据库正确性出现了错误,该数据库正确性错误例如可以是事务正确性错误,例如还可以是查询语言正确性出现了错误。
为了增加测试覆盖率,可以对第一数据分组进行分组得到第二数据分组,该第二数据分组可以包括一个或多个第一数据分组,并基于该第二数据分组进行事务操作及查询操作,以设置更多类型的事务操作及更多类型的查询操作,增加测试的覆盖率,提高测试的准确性。表2给出一种第一数据分组进行分组得到第二数据分组的示例。
表2
row_id grp_id trx_grp v1 v1_check r1 r2
0 0 0 随机字符串 v1的校验值 10 11
1 0 0 随机字符串 v1的校验值 12 13
2 0 0 随机字符串 v1的校验值 14 -60
3 0 1 随机字符串 v1的校验值 100 101
4 0 1 随机字符串 v1的校验值 102 103
5 0 1 随机字符串 v1的校验值 104 -510
6 1 2 随机字符串 v1的校验值 20 21
7 1 2 随机字符串 v1的校验值 22 23
8 1 2 随机字符串 v1的校验值 24 -110
9 1 3 随机字符串 v1的校验值 300 301
10 1 3 随机字符串 v1的校验值 302 303
11 1 3 随机字符串 v1的校验值 304 -1510
12 2 4 随机字符串 v1的校验值 50 51
13 2 4 随机字符串 v1的校验值 52 53
14 2 4 随机字符串 v1的校验值 54 -260
15 2 5 随机字符串 v1的校验值 30 31
16 2 5 随机字符串 v1的校验值 32 33
17 2 5 随机字符串 v1的校验值 34 -160
如表2所示,可以对第一数据分组进行分组得到第二数据组,trx_grp=0及trx_grp=1的第一数据组可以为一个grp_id=0的第二数据组,该第二数据组可以包括2个第一数据组。第二数据组中的数据满足第二数据规则,该第二数据规则用于约束第二数据组中第一数据组的个数,例如该第二数据规则例如可以是一个第二数据组中第一数据组的数量为2,则,每个第一数据分组中有3行数据时即TRX_ROW_NUM=3,每个第二数据组中有6行数据即GROUP_ROW_NUM=6。在一些实施例中,grp_id的值可以为行数/第二数据组中数据的行数,如表1中,第一个第二数据组的grp_id=0/6=0,第二个第二数据组的grp_id=6/6=1。
对第一数据表中的第一数据组进行二次分组得到第二数据组,可以增加事务操作的类型及测试用例,使得测试的覆盖更加全面。一些实施例中,可以执行一个或多个事务对第二数据组中的数据进行更新。以表2为例,例如可以执行一个事务随机对grp_id=0的第二数据组中的第一数据组中的数据进行更新。在检验查询结果时,可以根据第一数据规则及第二数据规则进行校验,例如可以校验grp_id=0的第二数据组中grp_id的值,第二数据组中数据的行数、第一数据组的行数、v1_check值等,以增加测试的覆盖率,适配不同的数据库场景。可以根据测试用例对第一数据表进行查询并验证,该测试用例中的预期查询结果时满足第一数据规则和第二数据规则的。
下面给出结果测试用例的例子。测试用例可以是文本化的,这样,便于增加测试用例。
测试用例1:验证一个第二数据组中R1及R2的和为零,以及第二数据组中数据行数的正确性。
[Parameter]
GRP_ID
[SQL]
select sum(r1+r2)from OBRight where grp_id=?group by trx_grp
[Result]
0
[RowCount]
GROUP_ROW_NUM/TRX_ROW_NUM
测试用例中参数和结果值可以带有有GRP_ID,TRX_GRP,ROW_ID,TRX_ROW_NUM,GRP_ROW_NUM等。在测试用例执行过程中会被自动替换成设定的值和随机到的值。下面结合表2对测试用例进行介绍,执行测试用例1随机一数据表发送SQL查询语言,例如该测试用例随机对GRP_ID=1的第二数据组进行操作,则该SQL查询语言为select sum(r1+r2)fromOBRight where grp_id=1group by trx_grp,待收到查询结果后,根据测试用例1中预设期望值与查询结果进行校验,根据测试用例1中预期返回的行数2与查询第二数据组中第一数据组的数量进行校验。执行测试用例以检验事务操作的正确性的过程中,可以顺序执行所有的测试用例,如果任一校验出现问题,例如预期行数结果不对,有例如预期的结果值不对等,可以立即停止执行测试用例,也可以停止所对数据库的任何操作,以保留环境方便排查问题。
测试用例2测试inner join算子的结果和行数正确性
[Parameter]
GRP_ID,P1*2,P1,P1*GROUP_ROW_NUM,
[SQL]
select t1.grp_id,t1.row_id,t2.v1 FROM(select grp_id,row_id fromobright where grp_id=?and trx_grp=?)as t1 INNER JOIN(select grp_id,v1 fromobright where grp_id=?and row_id=?)as t2 ON t1.grp_id=t2.grp_id ORDER BY1,2,3
[Result]
GRP_ID
GRP_ID*GROUP_ROW_NUM+i
Random
[RowCount]
TRX_ROW_NUM
下面结合表2对测试用例2进行介绍,执行测试用例2向第一数据表发送SQL查询语言,例如该测试用例随机对GRP_ID=2的第二数据组进行操作,该SQL查询语言为selectt1.grp_id,t1.row_id,t2.v1 FROM(select grp_id,row_id from obright where grp_id=6and trx_grp=12)as t1 INNER JOIN(select grp_id,v1from obright where grp_id=6and row_id=36)as t2 ON t1.grp_id=t2.grp_id ORDER BY 1,2,3,该测试用例的预期结果为grp_id=2,row_id=12(GRP_ID*GROUP_ROW_NUM+i=2*6),v1为随机字符串,第一数据组的行数为3。
测试用例的执行可以是并发执行,例如测试用例的执行是并发的,既多个测试用例可以同时执行,又例如执行测试用例及执行事务操作可以是并发的,即同时对数据库中的第一数据表执行事务操作及根据测试用例对数据库中的第一数据表执行查询操作。
本公开实施例提供的一种测试数据库的方法还可以向数据库中的第一数据表插入测试数据。向数据库中的第一数据表插入测试数据时可以数据组为单位,一组一组的向第一数据表中插入测试数据。该测试数据可以是满足第一数据规则的数据。
在一些实施例中,可以以第一数据组为单位向第一数据表中插入测试数据。该测试数据可以由测试程序生产,测试数据满足第一数据组的第一数据规则。可以在测试程序生成符合第一数据规则的测试数据组之后,用插入语句将测试数据组插入到第一数据表中,该插入语句例如可以是insert values语句。
向第一数据表中插入测试数据时可以是并发插入的,也就是说,可以同时向第一数据表插入多组测试数据组。在一些实施例中,测试程序可以配置4个生产线程,用于负责不断的向数据库中第一数据表中插入满足第一数据规则的测试数据。以第一数据表为表1为例,线程1可以进行trx_grp=0的数据插入,线程2可以进行trx_grp=1的数据插入,线程3可以进行trx_grp=2的数据插入,线程4可以进行trx_grp=3的数据插入。当线程2率先完成插入后,可以继续进行trx_grp=4的数据插入,之后线程3完成插入后,可以进行trx_grp=5的数据插入,线程1完成插入后,可以进行trx_grp=6的数据插入....以此不断向前推进trx_grp,往数据表中不断插入满足分组规则构造的数据。每个线程都会全局推进事务分组trx_grp,trx_grp值不断单向增长,不断往数据表里增添测试数据。
向第一数据表中插入测试数据时可以与执行事务操作和/向第一数据表发送查询语言的操作并发执行,也就是说,可以在执行事务操作以更新第一数据表中的数据的同时向第一数据表插入测试数据,也可以在执行向第一数据表发送查询语言的同时向第一数据表插入测试数据,还可以在执行事务操作以更新第一数据表中数据的同时执行向第一数据表发送查询语言及向第一数据表插入测试数据。
在一些实施例中,可以通过线程执行上述操作,线程可以包括生产线程、更新线程及校验线程,生产线程可以用于向第一数据表插入测试数据,更新线程可以于执行事务操作以更新第一数据表的数据,校验线程可以用于向第一数据表发送查询语言并校验查询结果的正确性。图2为本公开实施例提供的一种测试数据库的方法示意图,从图中可以看出,可以配置多个生产线程、更新线程及校验线程,以对第一数据表进行执行事务操作、发送查询语言及校验查询结果的操作,图中所示的生产线程、更新线程及校验线程可以是并发进行的,这样,在并发情景下,测试的覆盖率越高,可以通过控制并发线程的数量,控制并发读写数据库的压力。
本公开实施例提供的测试数据库的方法,对数据组进行事务操作,数据组内的数据满足固定的数据规则,事务操作不会改变该固定的数据规则,因此事务操作的结果是可预期的,通过对可预期的事务操作结果进行校验,实现对数据库事务正确性测试。同时,本公开实施例提供的测试数据库的方法,能够灵活增加事务操作及测试用例,能够按需制定并发事务的压力。
上文结合图1至图2,详细描述了本公开的方法实施例,下面结合图3至图4,详细描述本公开的装置实施例。应理解,方法实施例的描述与装置实施例的描述相互对应,因此,未详细描述的部分可以参见前面方法实施例。
图3是本公开一实施例提供的测试数据库的装置的示意性结构图。本公开实施例提供的数据库包括第一数据表,所述第一数据表包括与事务关联的一个或多个第一数据组,所述第一数据组包括一行或多行数据,所述第一数据组中的数据满足第一数据规则。图3所示的测试数据库的装置300可以包括:
更新单元310,被配置为执行一个或多个事务操作,以更新所述第一数据表中的数据,其中,所述事务操作为针对所述第一数据组内的数据的事务操作,且所述事务操作不改变所述第一数据组的所述第一数据规则;
查询单元320,被配置为向更新后的所述第一数据表发送查询语言,得到查询结果;
校验单元330,被配置为根据所述第一数据规则校验所述查询结果。
可选地,所述事务操作包括针对同一第一数据组的并行事务操作。
可选地,所述第一数据表中与事务关联的一个或多个第一数据组构成第二数据组,所述第一数据表包括一个或多个第二数据组,所述第二数据组中的数据满足第二数据规则,所述根据所述第一数据规则校验所述查询结果,所述检验单元还被配置为根据所述第一数据规则和/所述第二数据规则校验所述查询结果。
可选地,所述第一数据规则用于约束所述第一数据组中的数据类型、数据内容、列与列之间的数据关系及第一数据组中数据的行数中的一种或多种。
可选地,所述第二数据规则用于约束所述第二数据组中第一数据组的数量。
可选地,所述装置还包括数据插入单元,被配置为在执行所述执行一个或多个事务操作和/执行所述向更新后的所述第一数据表发送查询语言时,向所述第一数据表插入所述第一数据组。
可选地,所述向更新后的所述第一数据表发送查询语言,得到查询结果,包括:根据测试用例向所述更新后的所述第一数据表发送查询语言;所述根据所述第一数据规则校验所述查询结果,包括:根据测试用例中的预期查询结果校验所述查询结果,所述测试用例的预期查询结果符合所述第一数据规则。
可选地,所述根据所述第一数据规则和/所述第二数据规则校验所述查询结果,包括:根据测试用例中的预期查询结果校验所述查询结果,所述测试用例的预期查询结果符合所述第一数据规则和/所述第二数据规则。
图4是本公开一实施例提供的另一种测试数据库的装置的示意性结构图。图4所示装置400可以包括存储410和处理器420。存储器410可用于存储可执行代码。处理器420可用于执行所述存储器410中存储的可执行代码,以实现前文描述的各个方法中的步骤。在一些实施例中,该装置420还可以包括网络接口430,处理器420与外部设备的数据交换可以通过该网络接口430实现。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其他任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本公开实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(Digital Subscriber Line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如数字视频光盘(Digital Video Disc,DVD))、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。
本领域普通技术人员可以意识到,结合本公开实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开的范围。
在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所述权利要求的保护范围为准。

Claims (17)

1.一种测试数据库的方法,所述数据库包括第一数据表,所述第一数据表包括与事务关联的一个或多个第一数据组,所述第一数据组包括一行或多行数据,所述第一数据组中的数据满足第一数据规则,
所述方法包括:
执行一个或多个事务操作,以更新所述第一数据表中的数据,其中,所述事务操作为针对所述第一数据组内的数据的事务操作,且所述事务操作不改变所述第一数据组的所述第一数据规则;
向更新后的所述第一数据表发送查询语言,得到查询结果;
根据所述第一数据规则校验所述查询结果。
2.根据权利要求1所述的方法,所述事务操作包括针对同一第一数据组的并行事务操作。
3.根据权利要求1所述的方法,所述第一数据表中与事务关联的一个或多个第一数据组构成第二数据组,所述第一数据表包括一个或多个第二数据组,所述第二数据组中的数据满足第二数据规则,所述根据所述第一数据规则校验所述查询结果,包括:
根据所述第一数据规则和/所述第二数据规则校验所述查询结果。
4.根据权利要求1所述的方法,所述第一数据规则用于约束所述第一数据组中的数据类型、数据内容、列与列之间的数据关系及第一数据组中数据的行数中的一种或多种。
5.根据权利要求3所述的方法,所述第二数据规则用于约束所述第二数据组中第一数据组的数量。
6.根据权利要求1所述的方法,在执行所述执行一个或多个事务操作和/执行所述向更新后的所述第一数据表发送查询语言时,向所述第一数据表插入所述第一数据组。
7.根据权利要求1所述的方法,所述向更新后的所述第一数据表发送查询语言,得到查询结果,包括:
根据测试用例向所述更新后的所述第一数据表发送查询语言;
所述根据所述第一数据规则校验所述查询结果,包括:
根据测试用例中的预期查询结果校验所述查询结果,所述测试用例的预期查询结果符合所述第一数据规则。
8.根据权利要求3所述的方法,所述根据所述第一数据规则和/所述第二数据规则校验所述查询结果,包括:
根据测试用例中的预期查询结果校验所述查询结果,所述测试用例的预期查询结果符合所述第一数据规则和/所述第二数据规则。
9.一种测试数据库的装置,所述数据库包括第一数据表,所述第一数据表包括与事务关联的一个或多个第一数据组,所述第一数据组包括一行或多行数据,所述第一数据组中的数据满足第一数据规则,
所述装置包括:
更新单元,被配置为执行一个或多个事务操作,以更新所述第一数据表中的数据,其中,所述事务操作为针对所述第一数据组内的数据的事务操作,且所述事务操作不改变所述第一数据组的所述第一数据规则;
查询单元,被配置为向更新后的所述第一数据表发送查询语言,得到查询结果;
校验单元,被配置为根据所述第一数据规则校验所述查询结果。
10.根据权利要求9所述的装置,所述事务操作包括针对同一第一数据组的并行事务操作。
11.根据权利要求9所述的装置,所述第一数据表中与事务关联的一个或多个第一数据组构成第二数据组,所述第一数据表包括一个或多个第二数据组,所述第二数据组中的数据满足第二数据规则,所述根据所述第一数据规则校验所述查询结果,所述检验单元还被配置为根据所述第一数据规则和/所述第二数据规则校验所述查询结果。
12.根据权利要求9所述的装置,所述第一数据规则用于约束所述第一数据组中的数据类型、数据内容、列与列之间的数据关系及第一数据组中数据的行数中的一种或多种。
13.根据权利要求11所述的装置,所述第二数据规则用于约束所述第二数据组中第一数据组的数量。
14.根据权利要求9所述的装置,所述装置还包括数据插入单元,被配置为在执行所述执行一个或多个事务操作和/执行所述向更新后的所述第一数据表发送查询语言时,向所述第一数据表插入所述第一数据组。
15.根据权利要求9所述的装置,所述向更新后的所述第一数据表发送查询语言,得到查询结果,包括:
根据测试用例向所述更新后的所述第一数据表发送查询语言;
所述根据所述第一数据规则校验所述查询结果,包括:
根据测试用例中的预期查询结果校验所述查询结果,所述测试用例的预期查询结果符合所述第一数据规则。
16.根据权利要求11所述的方法,所述根据所述第一数据规则和/所述第二数据规则校验所述查询结果,包括:
根据测试用例中的预期查询结果校验所述查询结果,所述测试用例的预期查询结果符合所述第一数据规则和/所述第二数据规则。
17.一种测试数据库的装置,包括存储器及处理器,所述存储器用于存储代码,所述处理器用于调用所述存储器中的代码,以执行如权利要求1-8中任一项所述的方法。
CN202210296904.8A 2022-03-24 2022-03-24 测试数据库的方法及装置 Pending CN114610644A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210296904.8A CN114610644A (zh) 2022-03-24 2022-03-24 测试数据库的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210296904.8A CN114610644A (zh) 2022-03-24 2022-03-24 测试数据库的方法及装置

Publications (1)

Publication Number Publication Date
CN114610644A true CN114610644A (zh) 2022-06-10

Family

ID=81864616

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210296904.8A Pending CN114610644A (zh) 2022-03-24 2022-03-24 测试数据库的方法及装置

Country Status (1)

Country Link
CN (1) CN114610644A (zh)

Similar Documents

Publication Publication Date Title
US10437795B2 (en) Upgrading systems with changing constraints
US7788241B2 (en) Method for reducing overhead of validating constraints in a database
US8484638B2 (en) Infrastructure for the automation of the assembly of schema maintenance scripts
US20190286621A1 (en) Systems and methods for assessing data quality
US8756196B2 (en) Propagating tables while preserving cyclic foreign key relationships
CN111259004B (zh) 一种存储引擎中数据索引的方法以及相关装置
US7313572B2 (en) Attribute partitioning for user extensibility
US8782631B2 (en) Copy management of process versions over lifecycle
CN104572920A (zh) 一种数据整理方法和装置
US11487742B2 (en) Consistency checks between database systems
CN115509694B (zh) 一种事务处理方法、装置、电子设备及存储介质
CN111159040A (zh) 一种测试数据生成方法、装置、设备及存储介质
CN112199391B (zh) 一种数据加锁检测方法、设备及计算机可读存储介质
US7801921B2 (en) Deletion of data from child tables with multiple parents
CN110399386B (zh) 一种基于Presto的SQL UPDATE方法及控制系统
US9697239B1 (en) Token-based database system and method of interfacing with the token-based database system
CN109710629B (zh) 数据访问方法、装置、服务器和存储介质
CN111124883A (zh) 一种基于树形表格的测试用例库引入方法、系统及设备
CN114610644A (zh) 测试数据库的方法及装置
KR102214697B1 (ko) 데이터베이스 관리 시스템에서 데이터 저장을 위한 공간 관리를 제공하는 컴퓨터 프로그램
US11100131B2 (en) Simulation of a synchronization of records
US11948024B2 (en) Automated dynamic payload testing of OData APIs
CN116204354A (zh) 数据库的数据写入错误的处理方法、存储介质与设备
CN116414848A (zh) 数据库主备复制一致性验证方法、装置和计算机设备
CN115544003A (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