一种基于日志的测试用例生成方法和装置
【技术领域】
本发明涉及数据库技术领域,特别是涉及一种基于日志的测试用例生成方法和装置。
【背景技术】
在数据同步软件测试中,由于需要测试源端数据库的各类数据定义语言 (DataDefinition Language,简写为:DDL)和数据操纵语言(Data Manipulation Language,简写为:DML)语句操作是否均能正常同步至目的端,因此需要编写大量的DDL SQL和DML SQL测试语句,并将结构化查询语言(Structured Query Language,简写为:SQL)语句作为测试用例在源端执行。生成SQL测试语句的方法测试效率低下,劳动强度大,且因为人为原因容易造成测试用例集覆盖不完全的情况发生。尽管当前有部分方法可以实现SQL测试语句的自动化生成,如:某专利实现了一种从表示文法的BNF文件生成SQL测试用例集合的自动化过程(该专利具体信息:《一种自动生成SQL语句的系统和方法》——天津南大通用),但这些自动化方法并不能很好的解决测试用例覆盖不完全的问题,因为在实际的数据同步环境中,用户在源端会进行各种各样的操作,尽管有方法能够实现SQL测试用例的自动化生成,但无法覆盖到各类场景下实际用户的操作,例如:用户可能会创建多张表,有的表有主键,有的表有索引,有的表包含10 个字段,有的表包含8个字段,每个字段又有可能是不同的数据类型(如int, char,clob等),在这种情况下,测试用例很难覆盖到所有实际场景。
鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。
【发明内容】
本发明要解决的技术问题是目前测试用例无法完全覆盖用户实际操作的不足。
本发明进一步要解决的技术问题是现有的基于日志生成的测试用例都是普适性的,并没有专项测试用例生成的先例和途径。
本发明采用如下技术方案:
第一方面,本发明提出了一种基于日志的测试用例生成方法,网络中的各服务器周期性的梳理本地记录的日志文件,对于日志文件中记录的各数据表格对象、各软件对象、数据库环境类型和/或各关联数据库交互数据进行标定,所述生成方法包括:
获取待测试服务器的待生成的测试用例所包含的测试要素;其中,所述测试要素包括所述数据表格对象、各软件对象、数据库环境类型和各关联数据库交互中的一项或者多项;
向所述网络中的各服务器发送携带所述测试要素的日志请求;
接收各服务器在分析所述测试要素和自身存储的标定信息后返回的日志文件片段;
根据所述目标日志文件片段生成测试用例。
优选的,所述对于日志文件中记录的各数据表格对象、各软件对象、数据库环境类型和/或各关联数据库交互数据进行标定,具体包括:
对于数据表格对象的生成和/或删除动作所在时间节点进行标定;和/或,
对于软件对象在服务器中的数据访问量进行统计,并根据预设时间段内数据访问量的大小,按照相应分级进行标定;和/或,
对于数据库环境类型,按照特定数据库所适用的环境类型进行标定,包括:备份类型数据库的工作时间节点的标定、金融类型数据库的按照金融环境进行标定、企业类型数据库的按照企业规模进行标定;和/或,
对于关联数据库交互数据的标定,包括数据库之间交互数据量和耗时的标定。
优选的,所述标定具体包括:
根据数据库的系统表确定事务中数据表变更的行信息所对应的索引信息,并将所述事务中数据表变更的行信息和其对应的索引信息,确定为事务的变更数据信息;
根据所述事务的标记信息和事务的变更数据信息,得到用于表示日志文件里对应的事务的变化数据的事务逻辑信息,并依据所述事物逻辑信息生成所述标定信息。
优选的,测试平台中存储有网络中的各服务器的标定信息,所述向所述网络中的各服务器发送携带所述测试要素的日志请求,具体包括:
测试平台确定所述待测试服务器中对应待测试内容的测试要素,并根据所述测试要素,筛选所述存储的网络中的各服务器的标定信息类型,确定一个或者多个相似度超过预设阈值的目标服务器;
测试平台向所述一个或者多个目标服务器发送日志请求;其中,对应于不同的目标服务器,相应日志请求中携带所述筛选后的与各目标服务器相匹配的测试要素。
优选的,所述确定一个或者多个相似度超过预设阈值的目标服务器,具体包括:
所述测试平台在根据所述测试要素,筛选所述存储的网络中的各服务器的标定信息类型后,匹配各服务器与所述待测服务器之间的配置参数,进行配置参数的第二轮筛选,得到所述一个或者多个相似度超过预设阈值的目标服务器。
优选的,所述各服务器在分析所述测试要素和自身存储的标定信息后返回的日志文件片段,具体包括:
各服务器确定所接收的日志请求中携带的所述测试要素中包含的对象标识、数据规模、时间信息和操作类型中的一项或者多项;
依据所述对象标识、数据规模和操作类型中的一项或者多项,筛选各服务器中对应日志文件记录的标定信息,截取筛选结果生成日志文件片段。
优选的,所述根据所述目标日志文件片段生成测试用例,具体包括:
按照测试要素的编排顺序,组织所述目标日志文件片段,生成测试用例。
优选的,所述各服务器对应所述标定信息,还生成有标定环境下的服务器数据承载状态描述信息;则所述按照测试要素的编排顺序,组织所述目标日志文件片段,生成测试用例之前,所述方法还包括:
测试平台按照待测服务器和生成所述目标日志文件片段的所在一个或者多个服务器之间的配置参数关系,按比例调整所述目标日志文件片段。
第二方面,本发明还提供了一种基于日志的测试用例生成装置,用于实现第一方面所述的基于日志的测试用例生成方法,所述装置包括:
至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行第一方面所述的基于日志的测试用例生成方法。
第三方面,本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的基于日志的测试用例生成方法。
本发明在自动化生成SQL语句的前提下,提供一种基于数据库日志解析的方法,该方法直接解析数据库日志,从日志中抽取出用户的实际操作(例如:基于日志文件获取事务逻辑信息,该事务逻辑信息表示数据库中每次事务的数据新增、更新、删除等变化情况)并将其转化为对应的SQL语句,这样既可以自动的生成SQL测试用例,又能够完全覆盖用户的各类操作,从而可以有效地减少测试人员的工作量,提高测试的完整性(覆盖面)和效率。
进一步的,本发明还提出了针对特定应用场景下的差异化的测试用例的生成,通过对表格对象、各软件对象、数据库环境类型和/或各关联数据库交互数据进行标定,从而能够为特定应用场景下的待测服务器提供了专属测试用例生成的可能。
【附图说明】
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种基于日志的测试用例生成方法流程示意图;
图2是本发明实施例提供的一种基于日志的测试用例生成方法流程中测试要素精细化处理示意图;
图3是本发明实施例提供的一种基于日志的测试用例生成方法流程中各服务器侧处理测试要素流程示意图;
图4是本发明实施例提供的一种基于日志的测试用例生成装置结构示意图。
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
在实际场景中(以重做日志为例),重做日志中会记录一段时间内所提交的事务相关信息,其中会包含这些事务的变化数据,这些变化数据即对应该段时间内数据库中数据所发生的变化,通过获取能够表示这些变化数据的事务逻辑信息,从而提供生成SQL语句的依据。
本发明基于重做日志获取事务逻辑信息,其中,事务逻辑信息用于表示重做日志对应的事务的变化数据,然后根据重做日志对应的事务的变化数据生成与之对应的SQL语句,并将SQL语句写入测试用例文件中。
基于重做日志获取与事务相关的预解析数据,这些预解析数据包括事务的标记信息以及事务中数据表变更的行信息。
然后根据数据库的系统表确定事务中数据表变更的行信息所对应的索引信息,并将这些事务中数据表变更的行信息和其对应的索引信息确定为事务的变更数据信息,根据这些事务的标记信息和事务的变更数据信息,生成用于表示重做日志里对应的事务的变化数据的事务逻辑信息。
重做日志对应的事务的变化数据至少包括事务的标记信息和事务的变更数据信息。其中,事务的标记信息是指用于唯一确定某一事务的信息,比如:可以是事务标识、事务开始时间、事务提交时间等信息,通过这些信息区分各个事务,在实际场景中,事务标识可以是事务ID,事务开始时间和事务提交时间可以由与事务相关的时间戳中确定;而事务的变更数据信息是指每一个事务所涉及的数据变化的内容,即在某一事务中,关于数据表中的数据所发生的变化的信息,对于数据库事务来说,数据变化类型包括DDL:create,alter,truncate 和drop以及DML:insert,update和delete,举例来说,事务中数据表变更的信息可以是新建了一张表,或者某张表添加了一个字段或删除了一个字段,或者某一张数据表中第N行中的一个数据“10”修改成了“11”,或者第M行中的数据“A”被删除,还可能是新增了一行数据等等。由此,通过事务的标记信息和事务的变更数据信息可以确定重做日志对应的事务的变化数据。
上述分析仅仅是支撑本发明实施例实现的现有日志机制中的一种,但是,并非是唯一的方式。在本发明实施例诸多可选的实现方式中,对于日志记录内容的标定,可以是在生成日志的同时便通过应用层或者TCP/IP层能获取的相关信息进行与日志记录内容的同步标定了,在此,不做特殊限定。接下来,本发明将侧重于如何实现定制化测试用例生成的角度。
实施例1:
本发明实施例1提供了一种基于日志的测试用例生成方法,网络中的各服务器(这些服务器是出于真实的用户生产环境中的)周期性的梳理本地记录的日志文件,对于日志文件中记录的各数据表格对象、各软件对象、数据库环境类型和/或各关联数据库交互数据进行标定,通常情况下这里的梳理文件和生成日志文件片段可能会对数据库的日常使用造成一定影响,通常对于这些操作的执行时间会做相应的限定,比如设置个定时任务,一般安排在晚上/半夜来做。如图1所示,所述生成方法包括:
在步骤201中,获取待测试服务器的待生成的测试用例所包含的测试要素;其中,所述测试要素包括所述数据表格对象、各软件对象、数据库环境类型和各关联数据库交互中的一项或者多项。
上述列举的测试要素是根据当前数据库典型的应用场景进行列举的,而实际情况中可能涉及的测试要素并不局限于上述列举的情况,因此,在本发明实施例所提出的技术框架下,还能引申出的其它测试要素,也属于本发明保护范围内。
其中,虽然对测试要素做了上述分化,但是,实际应用中可能比上述分化更为简单,例如:针对软件对象的服务器日志,可以是该服务器自身是专供某一软件访问使用的,此时,仅需要确定哪几个服务器是供目标软件对象专属访问的,则相应获取该服务器的日志文件便实现了上述测试要素中软件对象的划分意义,并进一步可通过后续步骤202完成相应日志文件的获取。
其中,各软件对象包括不同厂商开发的,针对访问同一数据库服务器的不同软件应用;还可以是同一厂商开发的,不同版本的软件应用,例如:普通版本应用和旗舰版本应用等等。
在步骤202中,向所述网络中的各服务器发送携带所述测试要素的日志请求。
其中,发给各服务器的日志请求中的测试要素,可以是经由测试平台预先筛选过的,即对应各服务器的日志请求中携带的测试要素是不一致的;除此以外,也可以采用一种对应各服务器的日志请求中携带的测试要素是一致的方式。
但是,对于本发明实施例来说,如果测试平台的计算能力足够的话,优选的还是采用对应各服务器的日志请求中携带的测试要素是不一致的方案,其优势是能够减轻网络传输数据的承载压力,以及提高各服务器的响应效率。发明后续也将通过扩展方案,具体阐述所述对应各服务器的日志请求中携带的测试要素是不一致的方案如何实现。
在步骤203中,接收各服务器在分析所述测试要素和自身存储的标定信息后返回的日志文件片段。
其中,对于表格对象的日志文件片段是最直观也是最容易获取的,因为,表格对象是数据库管理的最小单元之一,因此,直接根据表格名搜索日志文件便可以通过组合相应操作指令条得到所述日志文件片段。
其中,对于各软件对象和数据库环境类型,通常都需要第三方的记录来支撑,而对于软件对象存在一种情况是可以是上述介绍的从专属数据库服务器中获取;而对于数据库环境类型,则需要通过数据库访问数据统计和/或数据库环境特性两个方面综合分析,例如:对于过节环境下铁路局的数据库数据,则可以通过节日所表征的环境特性(即节日时间)来指定日志文件片段。
其中,所述数据库交互,则更多的是要回溯相应服务器中数据库的事件记录,并将日志文件中的时间标签与数据库交互的事件记录配合起来,从而可以获取到相应数据库交互的日志文件片段。例如:服务器的更新、备份服务器的工作等等。
在步骤204中,根据所述目标日志文件片段生成测试用例。
本发明实施例在自动化生成SQL语句的前提下,提供一种基于数据库日志解析的方法,该方法直接解析数据库日志,从日志中抽取出用户的实际操作(例如:基于日志文件获取事务逻辑信息,该事务逻辑信息表示数据库中每次事务的数据新增、更新、删除等变化情况)并将其转化为对应的SQL语句,这样既可以自动的生成SQL测试用例,又能够完全覆盖用户的各类操作,从而可以有效地减少测试人员的工作量,提高测试的完整性(覆盖面)和效率。
在本发明实施例中,所述标定信息除了标识不同类型的日志对象获取外,还有一个重要的作用便是标识一个对象从出现到消失的完整周期,从而使得最终生成的测试用例能顾有源有果的执行。
进一步的,本发明实施例还提出了针对特定应用场景下的差异化的测试用例的生成,通过对表格对象、各软件对象、数据库环境类型和/或各关联数据库交互数据进行标定,从而能够为特定应用场景下的待测服务器提供了专属测试用例生成的可能。
在本发明实施例中,对所述对于日志文件中记录的各数据表格对象、各软件对象、数据库环境类型和/或各关联数据库交互数据进行标定,还给与了一种具体展开后的描述内容,具体包括:
1)、对于数据表格对象的生成和/或删除动作所在时间节点进行标定。即上述的数据表格的完整生命周期的标定。
2)、对于软件对象在服务器中的数据访问量进行统计,并根据预设时间段内数据访问量的大小,按照相应分级进行标定。
3)、对于数据库环境类型,按照特定数据库所适用的环境类型进行标定,包括:备份类型数据库的工作时间节点的标定、金融类型数据库的按照金融环境进行标定、企业类型数据库的按照企业规模进行标定。上述几种标定内容仅仅是诸多可能情况中的几种,因此,不应以此来限缩本发明的保护范围;在此基础上无需创造性劳动能够延伸出的其它情况也属于本发明实施例的保护范围内。
4)、对于关联数据库交互数据的标定,包括数据库之间交互数据量和耗时的标定。
对于上述标定过程,落脚到日志文件时,所述标定具体包括:
根据数据库的系统表确定事务中数据表变更的行信息所对应的索引信息,并将所述事务中数据表变更的行信息和其对应的索引信息,确定为事务的变更数据信息;
根据所述事务的标记信息和事务的变更数据信息,得到用于表示日志文件里对应的事务的变化数据的事务逻辑信息,并依据所述事物逻辑信息生成所述标定信息。
在实际操作中,日志文件通常不会对于软件对象、数据库环境类型和关联数据库交互数据进行记录,因此,上述对于事物逻辑信息的整理直观可以被使用的是数据表格对象,而对于本发明实施例中所提出的,类似上述软件对象、数据库环境类型和关联数据库交互数据的标定,则除了所述日志文件之外,还需要引入数据库服务器应用层和/或TCP/IP层,从而能够识别出各数据库操作指令的来源方,从而识别出上述的软件对象和关联数据库交互,而对于数据库环境类型则可以在数据库被创建的时候或者被配置的时候就能够获得初步的信息,并且,还可以在运行过程中的数据的监控,完成数据库环境类型下的精细化阶段划分。
在本发明诸多具体实现方案中,存在一种优选的实现方案,能够对于测试平台向各服务器发送的日志请求进行预先处理,从而简化了个服务器分析日志请求的资源占用,能够更为快速的完成响应消息的内容的寻找和响应消息的生成。具体的,测试平台中存储有网络中的各服务器的标定信息,所述向所述网络中的各服务器发送携带所述测试要素的日志请求,如图2所示,具体包括:
在步骤301中,测试平台确定所述待测试服务器中对应待测试内容的测试要素,并根据所述测试要素,筛选所述存储的网络中的各服务器的标定信息类型,确定一个或者多个相似度超过预设阈值的目标服务器。
在本发明实施例中,对于一个待测试服务器,其包含的测试要素可以是上面介绍的一种或者多种,因此,在向各服务器发送日志请求前,优选的是进行一轮筛选,从而能够有的放矢,避免对于无关服务器的正常数据业务处理,带来不必要的困扰(即无实质关联性的日志请求消息的分析和处理)。此优势,尤其针对测试平台所能够访问的各服务器数量较多,而最终所涉及日志请求消息响应的目标服务器又很少的情况,此时对于整个网络的资源的节省是非常突出的。
在步骤302中,测试平台向所述一个或者多个目标服务器发送日志请求;其中,对应于不同的目标服务器,相应日志请求中携带所述筛选后的与各目标服务器相匹配的测试要素。
在上述步骤301中所涉及的,所述确定一个或者多个相似度超过预设阈值的目标服务器,存在一种优选的实现方式,具体包括:
所述测试平台在根据所述测试要素,筛选所述存储的网络中的各服务器的标定信息类型后,匹配各服务器与所述待测服务器之间的配置参数,进行配置参数的第二轮筛选,得到所述一个或者多个相似度超过预设阈值的目标服务器。
基于上述步骤301-302带来的实现方法中特征的调整,相应的,在步骤203 中所涉及的所述各服务器在分析所述测试要素和自身存储的标定信息后返回的日志文件片段,同样也存在一种由步骤301-302带来的调整后实现的方式,如图3所示,具体包括:
在步骤401中,各服务器确定所接收的日志请求中携带的所述测试要素中包含的对象标识、数据规模、时间信息和操作类型中的一项或者多项。
此处是对测试要素的进一步细化,其中对象标识在不同情况下可以表现为软件类型名、也可以表现为表格名、还可以表现为事件名等等。而所述操作类型则可以根据实际情况进行复杂化或者简化,具体的:在对象为表格时,所述操作类型包括创建、插入、删除等等;而在对象为软件类型为,所述操作对象包括创建、更新、替换、插入、删除等等。
在步骤402中,依据所述对象标识、数据规模和操作类型中的一项或者多项,筛选各服务器中对应日志文件记录的标定信息,截取筛选结果生成日志文件片段。
其中,日志文件片段可以通过离散的方式组合而成,也可以是原本日志文件中连续的一段,在此不做特殊限定,根据具体的筛选结果,依据类型归队和/ 或时间先后顺序进行排列。
在本发明实施例的步骤204中所涉及的,所述根据所述目标日志文件片段生成测试用例,具体包括:
按照测试要素的编排顺序,组织所述目标日志文件片段,生成测试用例。其中,所述各服务器对应所述标定信息,还生成有标定环境下的服务器数据承载状态描述信息;则所述按照测试要素的编排顺序,组织所述目标日志文件片段,生成测试用例之前,所述方法还包括:
测试平台按照待测服务器和生成所述目标日志文件片段的所在一个或者多个服务器之间的配置参数关系,按比例调整所述目标日志文件片段。
实施例2:
如图4所示,是本发明实施例的基于日志的测试用例生成装置的架构示意图。本实施例的基于日志的测试用例生成装置包括一个或多个处理器21以及存储器22。其中,图4中以一个处理器21为例。
处理器21和存储器22可以通过总线或者其他方式连接,图4中以通过总线连接为例。
存储器22作为一种基于日志的测试用例生成方法和装置非易失性计算机可读存储介质,可用于存储非易失性软件程序和非易失性计算机可执行程序,如实施例1中的基于日志的测试用例生成方法。处理器21通过运行存储在存储器 22中的非易失性软件程序和指令,从而执行基于日志的测试用例生成方法。
存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例1中的基于日志的测试用例生成方法,例如,执行以上描述的图1-3所示的各个步骤。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。