CN114416531A - 一种测试数据生成方法、装置、设备及介质 - Google Patents

一种测试数据生成方法、装置、设备及介质 Download PDF

Info

Publication number
CN114416531A
CN114416531A CN202111591633.0A CN202111591633A CN114416531A CN 114416531 A CN114416531 A CN 114416531A CN 202111591633 A CN202111591633 A CN 202111591633A CN 114416531 A CN114416531 A CN 114416531A
Authority
CN
China
Prior art keywords
variable
statement
sql statement
original
test data
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
CN202111591633.0A
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.)
Shuiyou Information Technology Co ltd
Original Assignee
Shuiyou Information 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 Shuiyou Information Technology Co ltd filed Critical Shuiyou Information Technology Co ltd
Priority to CN202111591633.0A priority Critical patent/CN114416531A/zh
Publication of CN114416531A publication Critical patent/CN114416531A/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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请公开了一种测试数据生成方法、装置、设备及介质,包括:配置数据项以及目标数据库对应的环境;任一所述数据项包括原始SQL语句和变量取值定义;所述原始SQL语句包括固定部分和变量部分;基于所述数据项以及执行逻辑创建场景;执行所述场景,识别所述原始SQL语句中的所述变量部分,并基于所述变量部分对应的所述变量取值定义生成变量值,以及将所述变量部分替换为所述变量值以得到可执行SQL语句,基于所述执行逻辑执行所述可执行SQL语句,并将相应的执行结果写入所述目标数据库以得到测试数据。这样,易于组建场景,能够提升测试数据生成效率以及对业务变化的适应性。

Description

一种测试数据生成方法、装置、设备及介质
技术领域
本申请涉及测试技术领域,特别涉及一种测试数据生成方法、装置、设备及介质。
背景技术
测试作为软件研发过程中的一个重要环节,是保障软件质量的一个重要子过程,而在测试过程中,通常需要生成测试数据,现有测试数据方案主要有:(1)手工方式生成测试数据,需要对被测产品数据逻辑比较熟悉的人根据业务规则进行构造供其他人使用,这样比较浪费时间又受资源限制。如果其他非本产品的人受限于业务及系统实现的理解,特别是有些数据具有一定业务特殊规则的时候,会进一步增大造数的难度。(2)用写代码方式实现测试数据生成,对实现的人专业技能要求高,至少应该掌握一门编程技能(含sql函数存储过程编写),场景组合发生变化的时候,需要修改代码,对使用者要求也比较高。(3)针对业务的数据生成工具,对业务逻辑发生变化就需要修改工具,因为无法使用快速业务变化的测试数据生成。(4)模型方式生成数据与通过sql文件方式生成数据,对场景的组合比较困难,不容易直观使用。
发明内容
有鉴于此,本申请的目的在于提供一种测试数据生成方法、装置、设备及介质,易于组建场景,能够提升测试数据生成效率以及对业务变化的适应性。其具体方案如下:
第一方面,本申请公开了一种测试数据生成方法,包括:
配置数据项以及目标数据库对应的环境;任一所述数据项包括原始SQL语句和变量取值定义;所述原始SQL语句包括固定部分和变量部分;
基于所述数据项以及执行逻辑创建场景;
执行所述场景,识别所述原始SQL语句中的所述变量部分,并基于所述变量部分对应的所述变量取值定义生成变量值,以及将所述变量部分替换为所述变量值以得到可执行SQL语句,基于所述执行逻辑执行所述可执行SQL语句,并将相应的执行结果写入所述目标数据库以得到测试数据。
可选的,所述变量取值定义包括入参变量定义和出参变量定义;
其中,所述入参变量定义包括入参变量的参数名、参数类型、取值方式以及是否自动刷新的定义,并且,所述参数类型包括常量、全局变量、局部变量、场景变量以及计算变量;所述取值方式基于所述参数类型确定;所述出参变量定义为出参变量的定义;
相应的,所述方法还包括:通过所述出参变量将数据项对应的执行结果传递给其他数据项的局部变量。
可选的,所述基于所述数据项以及执行逻辑创建场景,包括:
基于所述数据项、场景变量以及执行逻辑创建场景。
可选的,所述原始SQL语句包括原始insert语句,所述方法还包括
从业务系统的运行数据中提取select语句;
将所述select语句转换为insert语句,得到原始insert语句。
可选的,所述将所述select语句转换为insert语句,得到原始insert语句,包括:
将所述select语句转换为所述目标数据库对应的目标SQL语句;
解析所述目标SQL语句的方言表达式,得到所述方言表达式的相关字段;
基于所述相关字段从所述目标数据库的相关表中查询所述相关表的必输字段;
基于所述相关字段以及所述必输字段生成insert语句,得到原始insert语句。
可选的,所述解析所述目标SQL语句的方言表达式之前,还包括:
对所述目标SQL语句进行哈希计算,得到所述目标SQL语句对应的第一哈希值;
判断在SQL语句库中是否存在与所述第一哈希值一致的第二哈希值,若存在,则直接从所述SQL语句库中获取所述第二哈希值对应的insert语句,得到原始insert语句;
若不存在,则对所述select语句的语法规范进行校验,若通过校验,则触发所述解析所述目标SQL语句的方言表达式的步骤。
可选的,所述固定部分包括字段名,所述方法还包括:
当监测到鼠标选中所述原始insert语句中的目标字段名,则根据所述目标字段名对应的字段值所在的行和列对所述字段值进行高亮显示。
第二方面,本申请公开了了一种测试数据生成装置,包括:
环境配置模块,用于配置目标数据库对应的环境;
数据项配置模块,用于配置数据项;任一所述数据项包括原始SQL语句和变量取值定义;所述原始SQL语句包括固定部分和变量部分;
场景创建模块,用于基于所述数据项以及执行逻辑创建场景;
数据生成模块,用于执行所述场景,识别所述原始SQL语句中的所述变量部分,并基于所述变量部分对应的所述变量取值定义生成变量值,以及将所述变量部分替换为所述变量值以得到可执行SQL语句,基于所述执行逻辑执行所述可执行SQL语句,并将相应的执行结果写入所述目标数据库以得到测试数据。
第三方面,本申请公开了一种电子设备,包括:
存储器,用于保存计算机程序;
处理器,用于执行所述计算机程序,以实现前述的测试数据生成方法。
第四方面,本申请公开了一种计算机可读存储介质,用于保存计算机程序,所述计算机程序被处理器执行时实现前述的测试数据生成方法。
可见,本申请先配置数据项以及目标数据库对应的环境;任一所述数据项包括原始SQL语句和变量取值定义;所述原始SQL语句包括固定部分和变量部分,之后基于所述数据项以及执行逻辑创建场景,然后执行所述场景,识别所述原始SQL语句中的所述变量部分,并基于所述变量部分对应的所述变量取值定义生成变量值,以及将所述变量部分替换为所述变量值以得到可执行SQL语句,基于所述执行逻辑执行所述可执行SQL语句,并将相应的执行结果写入所述目标数据库以得到测试数据。这样,本申请中,单条数据项的配置无需掌握复杂高难度的编码技巧,降低了测试人员的时间消耗,从而提升测试数据生成效率,并且,单条数据项易于组建场景,适用场景发生变化时通过对单条数据项进行组合,便可以达成测试数据生成的目标,并且对业务快速变化的适应性比较好,提升了对业务变化的适应性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种测试数据生成方法流程图;
图2为本申请公开的一种数据项配置界面示意图;
图3为本申请公开的一种测试数据生成装置结构示意图;
图4为本申请公开的一种测试数据生成流程图;
图5为本申请公开的一种电子设备结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参见图1所示,本申请实施例公开了一种测试数据生成方法,包括:
步骤S11:配置数据项以及目标数据库对应的环境;任一所述数据项包括原始SQL语句和变量取值定义;所述原始SQL语句包括固定部分和变量部分。
在具体的实施方式中,本申请实施例可以配置目标数据库对应的环境,也即配置目标数据库对应的数据库连接,以在目标数据库的数据库连接下执行最终生成的可执行SQL语句。
进一步的,环境可以是一组数据库连接配置的集合,最终执行的sql必须在某个环境的某个数据库连接下执行,本申请实施例可以切换环境以在不同数据库中执行。进一步的,环境类似于一个目录,用于组织一个或多个数据库连接。数据库连接指连接到一个数据库所需的所有必要数据,包括但不限于连接名、地址、端口、用户名、密码、数据库名。本实例以mysql数据库进行举例,实际使用中还可以创建oracle、postgres、redis等数据库,相应连接配置数据以连接数据库类型为准。sql场景化执行只需选择不同数据库执行,无需重新再写sql。
进一步的,本申请实施例配置的任一数据项中的所述变量取值定义包括入参变量定义和出参变量定义;其中,所述入参变量定义包括入参变量的参数名、参数类型、取值方式以及是否自动刷新的定义,并且,所述参数类型包括常量、全局变量、局部变量、场景变量以及计算变量;所述取值方式基于所述参数类型确定;所述出参变量定义为出参变量的定义;相应的,所述方法还包括:通过所述出参变量将数据项对应的执行结果传递给其他数据项的局部变量。
也即,数据项包括生成测试数据的原始sql语句和变量取值定义。原始sql语句的数据元包含用变量表示的动态部分和固定语句部分;变量取值定义包含入参变量和出参变量的定义,入参变量指本数据项所含sql语句中动态部分使用的变量的数据元,包含常量、全局变量、局部变量、场景变量和计算变量五种类型;出参指本数据项所含sql执行结果中的某几个数据元,可在之后执行的数据项的入参中被引用。这样,单独的数据操作项可以场景化组合,每条单独数据操作项之间可以通过参数进行传递,动态传递变量,变量有不用层级的作用域。
进一步的,在具体的实施方式中,原始sql语句包括固定语句和以变量形式表示的动态部分,例如在sql语句insert into test_table values(“key”,“${value}”)中,被“${}”包裹的“value”是一个变量,其他部分是固定语句;上述变量具体如何取值在变量取值部分中定义,变量取值包括入参变量和出参变量两个部分。入参变量需要定义参数名、参数类型、取值方式、是否自动刷新四个部分,其中规则如下:a)参数名和原始sql语句中的变量名称一致。b)参数类型包括,常量:直接指定变量值;全局变量:被所有数据项共享使用的变量;局部变量:引用其他数据项的执行结果;场景变量:在场景配置中设置变量值;计算变量:对其他变量值进行四则运算。c)取值方式根据变量类型的不同填写对应所需的取值方式,对于常量:直接填写该变量要取的值;对于局部变量,填写要引用的数据项执行结果出参名称;对于场景变量,填写要引用的场景配置中的变量名称;对于计算变量,填写四则计算表达式,如${value}*100;是否自动刷新设置在原始sql中多次引用同一个变量时,变量只在第一次引用时取值还是在每次引用时都重新取值。之所以要进行该设置是由于在使用场景变量时,可以使用系统函数动态计算出变量值。d)出参变量可以用于在执行select查询语句时,将查询结果传递给其他数据项的入参局部变量使用。定义出参变量需配置查询结果中要取值的数据行列号。e)上述计算场景变量的系统函数包括:base64加密、md5加密、aes加密、随机uuid、随机字符串、随机数、随机手机号、随机身份证号、随机姓名、当前时间等函数。
步骤S12:基于所述数据项以及执行逻辑创建场景。
在具体的实施方式中,可以基于所述数据项、场景变量以及执行逻辑创建场景。进一步的,执行逻辑配置可以包括两类:循环和逻辑判断。循环可以设置循环次数,对一个或多个数据项执行多次;逻辑判断可以针对数据项的出参值进行包括但不限于等于、不等于、大于等条件的判断,在条件成立时再执行某些数据项;若数据项中使用了场景变量,则相应的变量取值在创建场景时定义,场景变量取值方式支持常量和系统函数两种,常量指直接设置具体的变量值;系统函数包括:base64加密、md5加密、aes加密、随机uuid、随机字符串、随机数、随机手机号、随机身份证号、随机姓名、当前时间等函数。
本申请实施例可以根据业务需求将一个或多个数据项添加到一个场景中,并设置循环、逻辑判断等执行逻辑。场景是基本执行单元,执行后将生成的测试数据结果存储到数据库中。
步骤S13:执行所述场景,识别所述原始SQL语句中的所述变量部分,并基于所述变量部分对应的所述变量取值定义生成变量值,以及将所述变量部分替换为所述变量值以得到可执行SQL语句,基于所述执行逻辑执行所述可执行SQL语句,并将相应的执行结果写入所述目标数据库以得到测试数据。
在具体的实施方式中,本申请实施例可以解析场景中的数据项和执行逻辑,识别数据项原始sql的变量部分,并根据变量类型生成变量值,替换并合成实际可执行的sql,然后根据执行逻辑执行sql后将结果存储到环境配置中的数据库中。
也即,本申请实施例可以根据入参变量类型生成除局部变量之外的变量值,然后替换到原始sql语句中生成实际执行的sql;局部变量会在sql执行时动态设置。例如,对于sql:insert into test_table values(“${value1}”,“${value2}”),假设value1是一个常量变量,值为1,value2是场景随机数变量,本申请实施例会首先将值1替换sql中的${value1}部分,然后调用随机数函数如生成值12,再替换掉sql中的${value2}部分,最终生成实际可执行的sql:insert into test_table values(“1”,“12”)。进一步的,本申请实施例可以解析包括循环和逻辑判断在内的执行逻辑。设置循环时可以让数据项循环执行多次;判断逻辑可以根据某数据项的出参结果做等于、不等于等逻辑判断,以决定某些其他数据项是否要执行。
需要指出的是,场景化数据之间通常存在几个数据项前后关联,且关联数据项有可能还需要经过某些函数处理。本申请实施例对每个单条生成数据方法也即数据项的组合形式实现场景化数据的生成,同时支持单条数据生成方法中的单个数据元作为参数化变量进行传递,使得数据场景化能够得到真正串联。这样,通过单条测试数据生成方法的编排及单条测试数据生成的参数传递,编写单条数据时无需掌握复杂高难度的编码技巧如编程语言、存储过程与函数。数据适用场景发生变化时通过对单条测试数据生成的方法的组合,就可以达成测试数据生成的目标,对业务快速变化的适应性比较好。场景化数据配置过程中支持调用子场景数据、分支判断、循环调用的方式,使得本申请提供的方案支持复杂的场景化生成。
可见,本申请实施例先配置数据项以及目标数据库对应的环境;任一所述数据项包括原始SQL语句和变量取值定义;所述原始SQL语句包括固定部分和变量部分,之后基于所述数据项以及执行逻辑创建场景,然后执行所述场景,识别所述原始SQL语句中的所述变量部分,并基于所述变量部分对应的所述变量取值定义生成变量值,以及将所述变量部分替换为所述变量值以得到可执行SQL语句,基于所述执行逻辑执行所述可执行SQL语句,并将相应的执行结果写入所述目标数据库以得到测试数据。这样,本申请中,单条数据项的配置无需掌握复杂高难度的编码技巧,降低了测试人员的时间消耗,从而提升测试数据生成效率,并且,单条数据项易于组建场景,适用场景发生变化时通过对单条数据项进行组合,便可以达成测试数据生成的目标,并且对业务快速变化的适应性比较好,提升了对业务变化的适应性。
基于本申请,使用者可以根据不同测试环境动态生成测试数据。生成测试数据的场景编排好后,可以适用于多种角色的使用,除测试工程师外还能提供给其他角色人员使用如开发工程师、需求管理人员,及非本产品的第三方消费者使用。下面给出本申请方案的一种具体实施例:
步骤000:配置环境,设置数据最终要的落到的目标数据库。
步骤001:配置数据项,包括生成测试数据的原始sql语句及变量取值定义;本例中原始sql如下:Insert into test_table values(“${value1}”,“${value2}”);入参变量如表一所示:
表一
参数名 参数类型 参数取值 是否自动刷新
value1 常量 1
value2 场景变量 value2
步骤002:创建一个场景并将上述数据项添加到里面,然后添加一个循环逻辑,如设置循环三次;然后定义一个场景变量如表二所示:
表二
Figure BDA0003429312770000081
步骤003:用户启动上述配置好的场景;
步骤004:识别出数据项原始sql中的变量value1和value2,然后根据value1的常量类型将其替换为值1,根据value2的随机数类型将其替换为一个随机数,如值12,因此就合成出来实际sql:insert into test_table values(“1”,“12”);最后根据循环逻辑将该sql循环执行三次;
步骤005:在数据库的test_table表中写入三条记录。
进一步的,所述原始SQL语句包括原始insert语句,所述方法还包括
步骤010:从业务系统的运行数据中提取select语句;
当然,在另一些实施例中,可以获取测试人员编写的select语句。
步骤011:将所述select语句转换为insert语句,得到原始insert语句。
在一种具体的实施方式中,本申请实施例可以将所述select语句转换为所述目标数据库对应的目标SQL语句;解析所述目标SQL语句的方言表达式,得到所述方言表达式的相关字段;其中,所述相关字段包括select值字段、select条件字段;基于所述相关字段从所述目标数据库的相关表中查询所述相关表对应的必输字段;基于所述相关字段以及所述必输字段生成insert语句,得到原始insert语句。并且,本申请实施例还可以将所述目标SQL语句的方言表达式处理为字段查询方法;所述字段查询方法为能够在所述目标数据库中查询到所述方言表达式的相关字段的方法;基于所述字段查询方法从所述目标数据库中查询所述相关字段,若查询到所述相关字段,则基于所述相关字段以及所述必输字段生成insert语句,得到原始insert语句。也即,本申请实施例可以对解析所述目标SQL语句的方言表达式得到的相关字段进行校验,若校验通过,则基于所述相关字段以及所述必输字段生成insert语句,得到原始insert语句。其中,目标SQL语句为适合目标数据库方言的SQL语句。
例如,Select djxh,je,skssq from sb_sbxx where nsrsbh=’345678904’。表中有个字段为sb_sbzt为非空字段,本申请实施例可以解析该语句,得到3个select值字段:djxh,je,skssq,条件字段:Nsrsbh,从表中查询必输字段:sb_sbzt。
并且,所述解析所述目标SQL语句的方言表达式之前,还包括:对所述目标SQL语句进行哈希计算,得到所述目标SQL语句对应的第一哈希值;判断在SQL语句库中是否存在与所述第一哈希值一致的第二哈希值,若存在,则直接从所述SQL语句库中获取所述第二哈希值对应的insert语句,得到原始insert语句;若不存在,则对所述select语句的语法规范进行校验,若通过校验,则触发所述解析所述目标SQL语句的方言表达式的步骤。
也即,本申请实施例可以将select语句转换为insert语句。当获取待转换的sql语句后,对sql中的文本进行处理,形成目标数据库对应的目标sql,然后对目标sql进行hash,然后,将hash后sql存入数据库,如果在数据库中存在相同hash值的sql,说明sql语句之前已经转换过,直接返回结果。如果没有存在相同hash值的sql,则解析sql语句的语法规范,错误的语法规范则直接返回。进一步的,处理不同数据库方言表达式,根据解析的sql,对sql的数据库方言进行处理,并进一步解析sql语句,处理比较复杂的sql语句,如条件、嵌套等,最后根据相关表的必输字段、select值字段、select条件字段拼接insert语句,将insert语句返回给调用方。
例如由select SBUUID,PZXH,YZPZZL_DM,DJXH,NSRSBH,NSRMC,SKSSQQ,SKSSQZ,SBRQ_1,TBRQ_1,YBTSE,SSGLY_DM,ZFBZ_1,ZFRQ_1,ZFR_DM,ZGSWSKFJ_DM,XTBM,SBSX_DM_1,GZLX_DM_1,SBFS_DM,SLRQ,SLR_DM,SLSWJG_DM,BZ,BSRXM,DLJBRZYZJHM,CWFZRXM,FDDBRXM,SWDLRDZ,SWDLRLXDH,LRR_DM,LRRQ,XGR_DM,XGRQ,SJGSDQ,SJTB_SJ,BSRLXDH,DLRMC,JBRXM,JBRLXDH from sb_sbb sbb,sb_sbxx sbxx where sbb.sbuuid=sbxx.sbuuid andsbb.djxh=sbxx.djxh生成的两个insert语句:(1)insert into sb_sbb(SBUUID,PZXH,YZPZZL_DM,DJXH,NSRSBH,NSRMC,SKSSQQ,SKSSQZ,SBRQ_1,TBRQ_1,YBTSE,SSGLY_DM,ZFBZ_1,ZFRQ_1,ZFR_DM,ZGSWSKFJ_DM,XTBM,SBSX_DM_1,GZLX_DM_1,SBFS_DM,SLRQ,SLR_DM,SLSWJG_DM,BZ,BSRXM,DLJBRZYZJHM,CWFZRXM,FDDBRXM,SWDLRDZ,SWDLRLXDH,LRR_DM,LRRQ,XGR_DM,XGRQ,SJGSDQ,SJTB_SJ,BSRLXDH,DLRMC,JBRXM,JBRLXDH)values('${uuid32}','${uuid20}','${yzpzzl}','${djxh}','${nsrsbh}','纳税人名称',to_date('${skssqq}','yyyy-mm-dd'),to_date('${skssqz}','yyyy-mm-dd'),trunc(sysdate),sysdate,'3.3','11303000684','N',null,null,'11303210600',null,'11','1','10',sysdate,'11303000714','11303210600',null,null,null,null,null,null,null,'11303000714',sysdate,'11303000714',sysdate,'11303210600',null,null,null,null,null);(2)insert into sb_sbxx(SBXXUUID,SBUUID,DJXH,PZXH,PZMXXH,ZSPZMXXH,ZSXM_DM,ZSPM_DM,ZSZM_DM,YZPZZL_DM,SBQX,YSBQX,NSSBRQ,SKSSQQ,SKSSQZ,YSX,JSYJ,SL_1,YNSE,YJSE,JMSE,YBTSE,DJZCLX_DM,HY_DM,SBFS_DM,ZSFS_DM,ZSDLFS_DM,JDXZ_DM,ZFRQ_1,ZFBZ_1,ZFR_DM,SSGLY_DM,ZGSWSKFJ_DM,RDPZUUID,LRR_DM,LRRQ,XGR_DM,XGRQ,SJGSDQ,GZLX_DM_1,SBSX_DM_1,SJTB_SJ,SYBH_1,JZJTSKBZ,NSQX_DM)values('${uuid32}','${uuid32}','${djxh}','${uuid20}','1',null,'${zsxm}','${zspm}',null,'${yzpzzl}',sysdate,sysdate,trunc(sysdate),to_date('${skssqq}','yyyy-mm-dd'),to_date('${skssqz}','yyyy-mm-dd'),'300000','0','.25','0','0','0','0','159','5111','32','100','0','440306013',null,'N',null,'13302070000','15100000000','57AB84F1323184F9CDB629FD22DF1AB1','1440DZSWJII',sysdate,null,sysdate,'14403311100','1','11',null,'${sybh}',null,'08');COMMIT;如图2所示,其中,where条件后的关联字段sbuuid、djxh会自动生成参数${uuid32},${djxh}。并且,如图2所示,本申请实施例可以通过相应的界面调整insert sql中的变量。这样,常用的数据操作项SQL语句,可以将select样例数据查询转成insert数据生成语句而不受数据库类型影响,生成时候会自动生成变量,串联场景的操作步骤。
需要指出的是,手工生成测试数据,特别是数据库中有类似数据的时候,一般会select样例数据库,然后根据样例数据编写insert语句,在执行insert的时候,除非每个字段都赋值,才能避免必输字段填写成功。本申请实施例通过select语句的关联表,查询必输字段,同时将选择字段的样例数据返回,自动拼装成insert语句,大大提高了数据生成的准确性与效率。
进一步的,所述原始sql语句的固定部分包括字段名,所述方法还包括:当监测到鼠标选中所述原始insert语句中的目标字段名,则根据所述目标字段名对应的字段值所在的行和列对所述字段值进行高亮显示。
在具体的实施方式中,当监测到鼠标选中所述原始SQL语句中的目标字段名,则提取所述原始SQL语句的字段名列表和字段值列表,确定所述目标字段名在所述字段名列表中的所处位序,根据所述目标字段名在所述字段名列表中的所处位序从字段值列表中相应位次的字段值,根据该字段值所处的行和列对所述字段值进行高亮显示。
例如,对一条insert语句:insert into test_table(key1,key2)values(value1,value2),用户鼠标选中key1时,能够相应地高亮value1。具体实现方案为,首先提取出字段名列表:key1,key2,然后根据选中内容查找出用户选中的是第几个key,在本例中可知选中了第一个;然后提取出字段值列表:value1,value2,再取第一个value,根据其所在行和列设为高亮显示即可。
需要指出的是,可以基于本方案生成相应的web界面产品,为方便用户操作,在用户通过web界面选中列的时候高亮显示列值。
参见图3所示,本申请实施例公开了一种测试数据生成装置,包括:
环境配置模块11,用于配置目标数据库对应的环境;
数据项配置模块12,用于配置数据项;任一所述数据项包括原始SQL语句和变量取值定义;所述原始SQL语句包括固定部分和变量部分;
场景创建模块13,用于基于所述数据项以及执行逻辑创建场景;
数据生成模块14,用于执行所述场景,识别所述原始SQL语句中的所述变量部分,并基于所述变量部分对应的所述变量取值定义生成变量值,以及将所述变量部分替换为所述变量值以得到可执行SQL语句,基于所述执行逻辑执行所述可执行SQL语句,并将相应的执行结果写入所述目标数据库以得到测试数据。
可见,本申请实施例先配置数据项以及目标数据库对应的环境;任一所述数据项包括原始SQL语句和变量取值定义;所述原始SQL语句包括固定部分和变量部分,之后基于所述数据项以及执行逻辑创建场景,然后执行所述场景,识别所述原始SQL语句中的所述变量部分,并基于所述变量部分对应的所述变量取值定义生成变量值,以及将所述变量部分替换为所述变量值以得到可执行SQL语句,基于所述执行逻辑执行所述可执行SQL语句,并将相应的执行结果写入所述目标数据库以得到测试数据。这样,本申请中,单条数据项的配置无需掌握复杂高难度的编码技巧,降低了测试人员的时间消耗,从而提升测试数据生成效率,并且,单条数据项易于组建场景,适用场景发生变化时通过对单条数据项进行组合,便可以达成测试数据生成的目标,并且对业务快速变化的适应性比较好,提升了对业务变化的适应性。
并且,所述变量取值定义包括入参变量定义和出参变量定义;其中,所述入参变量定义包括入参变量的参数名、参数类型、取值方式以及是否自动刷新的定义,并且,所述参数类型包括常量、全局变量、局部变量、场景变量以及计算变量;所述取值方式基于所述参数类型确定;所述出参变量定义为出参变量的定义;相应的,所述装置通过所述出参变量将数据项对应的执行结果传递给其他数据项的局部变量。
在具体的实施方式中,场景创建模块13,具体用于基于所述数据项、场景变量以及执行逻辑创建场景。
进一步的,所述原始SQL语句包括原始insert语句,所述装置还包括
select语句提取模块,用于从业务系统的运行数据中提取select语句;
insert语句转换模块,用于将所述select语句转换为insert语句,得到原始insert语句。
进一步的,insert语句转换模块,用于将所述select语句转换为所述目标数据库对应的目标SQL语句;解析所述目标SQL语句的方言表达式,得到所述方言表达式的相关字段;其中,所述相关字段包括select值字段、select条件字段;基于所述相关字段从所述目标数据库的相关表中查询所述相关表的必输字段;,基于所述相关字段以及所述必输字段生成insert语句,得到原始insert语句。
并且,所述insert语句转换模块还用于,在所述解析所述目标SQL语句的方言表达式之前,对所述目标SQL语句进行哈希计算,得到所述目标SQL语句对应的第一哈希值;判断在SQL语句库中是否存在与所述第一哈希值一致的第二哈希值,若存在,则直接从所述SQL语句库中获取所述第二哈希值对应的insert语句,得到原始insert语句;若不存在,则对所述select语句的语法规范进行校验,若通过校验,则触发所述解析所述目标SQL语句的方言表达式的步骤。
进一步的,所述固定部分包括字段名,所述装置还包括:
高亮模块,用于当监测到鼠标选中所述原始insert语句中的目标字段名,则根据所述目标字段名对应的字段值所在的行和列对所述字段值进行高亮显示。
另外,在具体的实施方式中,数据生成模块14,包括:场景解析子模块和数据库存储子模块;
其中,场景解析子模块包括数据项解析单元,用于识别所述原始SQL语句中的所述变量部分;数据项合成单元,用于基于所述变量部分对应的所述变量取值定义生成变量值,以及将所述变量部分替换为所述变量值以得到可执行SQL语句;执行逻辑解析单元,用于解析执行逻辑,并基于所述执行逻辑执行所述可执行SQL语句,相应的,数据存储子模块,用于将相应的执行结果写入所述目标数据库以得到测试数据。
也即,数据生成模块用于协调场景解析子模块和数据库存储子模块,负责测试数据的生成和存储。场景解析子模块,用于数据项、执行逻辑的解析与执行,其下又包括:数据项单元,用于解析数据项中的原始sql语句和入参变量定义,识别出sql语句中的变量部分,并判断是否都在入参变量中做了定义;数据项合成单元,用于根据入参变量类型生成除局部变量之外的变量值,然后替换到原始sql语句中生成实际执行的sql;局部变量会在sql执行时动态设置。执行逻辑解析单元,用于解析包括循环和逻辑判断在内的执行逻辑。设置循环时可以让数据项循环执行多次;判断逻辑可以根据某数据项的出参结果做等于、不等于等逻辑判断,以决定某些其他数据项是否要执行。数据库存储子模块,用于场景解析子模块完成场景解析和执行后,将生成的结果测试数据存储到指定的数据库中。
参见图4所示,图4为本申请实施例公开的一种具体的基于所述测试数据生成装置生成测试数据的流程图。步骤1,配置环境,设置数据最终要的落到的数据库;步骤2,配置数据项,包括生成测试数据的原始sql语句及变量定义;步骤3,创建一个场景并将上述数据项添加到里面,然后添加一个循环逻辑;步骤4,用户启动上述配置好的场景;步骤5,解析数据项;步骤6,合成数据项并执行sql;步骤7,解析执行逻辑;步骤8、执行sql,数据入库。
参见图5所示,本申请实施例公开了一种电子设备20,包括处理器21和存储器22;其中,所述存储器22,用于保存计算机程序;所述处理器21,用于执行所述计算机程序,前述实施例公开的测试数据生成方法。
关于上述测试数据生成方法的具体过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
并且,所述存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,存储方式可以是短暂存储或者永久存储。
另外,所述电子设备20还包括电源23、通信接口24、输入输出接口25和通信总线26;其中,所述电源23用于为所述电子设备20上的各硬件设备提供工作电压;所述通信接口24能够为所述电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本申请技术方案的任意通信协议,在此不对其进行具体限定;所述输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
进一步的,本申请实施例还公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述实施例公开的测试数据生成方法。
关于上述测试数据生成方法的具体过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本申请所提供的一种测试数据生成方法、装置、设备及介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (10)

1.一种测试数据生成方法,其特征在于,包括:
配置数据项以及目标数据库对应的环境;任一所述数据项包括原始SQL语句和变量取值定义;所述原始SQL语句包括固定部分和变量部分;
基于所述数据项以及执行逻辑创建场景;
执行所述场景,识别所述原始SQL语句中的所述变量部分,并基于所述变量部分对应的所述变量取值定义生成变量值,以及将所述变量部分替换为所述变量值以得到可执行SQL语句,基于所述执行逻辑执行所述可执行SQL语句,并将相应的执行结果写入所述目标数据库以得到测试数据。
2.根据权利要求1所述的测试数据生成方法,其特征在于,所述变量取值定义包括入参变量定义和出参变量定义;
其中,所述入参变量定义包括入参变量的参数名、参数类型、取值方式以及是否自动刷新的定义,并且,所述参数类型包括常量、全局变量、局部变量、场景变量以及计算变量;所述取值方式基于所述参数类型确定;所述出参变量定义为出参变量的定义;
相应的,所述方法还包括:通过所述出参变量将数据项对应的执行结果传递给其他数据项的局部变量。
3.根据权利要求2所述的测试数据生成方法,其特征在于,所述基于所述数据项以及执行逻辑创建场景,包括:
基于所述数据项、场景变量以及执行逻辑创建场景。
4.根据权利要求1所述的测试数据生成方法,其特征在于,所述原始SQL语句包括原始insert语句,所述方法还包括
从业务系统的运行数据中提取select语句;
将所述select语句转换为insert语句,得到原始insert语句。
5.根据权利要求4所述的测试数据生成方法,其特征在于,所述将所述select语句转换为insert语句,得到原始insert语句,包括:
将所述select语句转换为所述目标数据库对应的目标SQL语句;
解析所述目标SQL语句的方言表达式,得到所述方言表达式的相关字段;
基于所述相关字段从所述目标数据库的相关表中查询所述相关表的必输字段;
基于所述相关字段以及所述必输字段生成insert语句,得到原始insert语句。
6.根据权利要求5所述的测试数据生成方法,其特征在于,所述解析所述目标SQL语句的方言表达式之前,还包括:
对所述目标SQL语句进行哈希计算,得到所述目标SQL语句对应的第一哈希值;
判断在SQL语句库中是否存在与所述第一哈希值一致的第二哈希值,若存在,则直接从所述SQL语句库中获取所述第二哈希值对应的insert语句,得到原始insert语句;
若不存在,则对所述select语句的语法规范进行校验,若通过校验,则触发所述解析所述目标SQL语句的方言表达式的步骤。
7.根据权利要求4至6任一项所述的测试数据生成方法,其特征在于,所述固定部分包括字段名,所述方法还包括:
当监测到鼠标选中所述原始insert语句中的目标字段名,则根据所述目标字段名对应的字段值所在的行和列对所述字段值进行高亮显示。
8.一种测试数据生成装置,其特征在于,包括:
环境配置模块,用于配置目标数据库对应的环境;
数据项配置模块,用于配置数据项;任一所述数据项包括原始SQL语句和变量取值定义;所述原始SQL语句包括固定部分和变量部分;
场景创建模块,用于基于所述数据项以及执行逻辑创建场景;
数据生成模块,用于执行所述场景,识别所述原始SQL语句中的所述变量部分,并基于所述变量部分对应的所述变量取值定义生成变量值,以及将所述变量部分替换为所述变量值以得到可执行SQL语句,基于所述执行逻辑执行所述可执行SQL语句,并将相应的执行结果写入所述目标数据库以得到测试数据。
9.一种电子设备,其特征在于,包括:
存储器,用于保存计算机程序;
处理器,用于执行所述计算机程序,以实现如权利要求1至7任一项所述的测试数据生成方法。
10.一种计算机可读存储介质,其特征在于,用于保存计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的测试数据生成方法。
CN202111591633.0A 2021-12-23 2021-12-23 一种测试数据生成方法、装置、设备及介质 Pending CN114416531A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111591633.0A CN114416531A (zh) 2021-12-23 2021-12-23 一种测试数据生成方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111591633.0A CN114416531A (zh) 2021-12-23 2021-12-23 一种测试数据生成方法、装置、设备及介质

Publications (1)

Publication Number Publication Date
CN114416531A true CN114416531A (zh) 2022-04-29

Family

ID=81268310

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111591633.0A Pending CN114416531A (zh) 2021-12-23 2021-12-23 一种测试数据生成方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN114416531A (zh)

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5664173A (en) * 1995-11-27 1997-09-02 Microsoft Corporation Method and apparatus for generating database queries from a meta-query pattern
CN101430661A (zh) * 2008-11-18 2009-05-13 阿里巴巴集团控股有限公司 一种批量生成测试数据的方法、系统和装置
WO2015176431A1 (zh) * 2014-05-23 2015-11-26 中兴通讯股份有限公司 一种测试数据的生成方法及装置
CN107894953A (zh) * 2017-11-21 2018-04-10 中国银行股份有限公司 一种银行应用测试数据的生成方法及装置
WO2018229843A1 (ja) * 2017-06-12 2018-12-20 株式会社日立製作所 テストデータ作成装置およびテストデータ作成方法
CN109408378A (zh) * 2018-09-30 2019-03-01 福建星瑞格软件有限公司 一种在大数据量下快速定位sql解析错误的测试方法及系统
CN112732571A (zh) * 2021-01-05 2021-04-30 中国工商银行股份有限公司 一种测试数据生成方法及装置
CN112799966A (zh) * 2021-03-29 2021-05-14 广州嘉为科技有限公司 可扩展插件化批量生成测试数据方法、系统、设备及介质
WO2021100156A1 (ja) * 2019-11-20 2021-05-27 日本電信電話株式会社 テストデータ生成装置、テストデータ生成方法、及びプログラム
CN112988132A (zh) * 2021-02-25 2021-06-18 平安科技(深圳)有限公司 数据接口的自动生成方法、装置、计算机设备及存储介质
CN113760734A (zh) * 2021-02-02 2021-12-07 北京沃东天骏信息技术有限公司 一种数据准备方法及装置、设备、存储介质

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5664173A (en) * 1995-11-27 1997-09-02 Microsoft Corporation Method and apparatus for generating database queries from a meta-query pattern
CN101430661A (zh) * 2008-11-18 2009-05-13 阿里巴巴集团控股有限公司 一种批量生成测试数据的方法、系统和装置
WO2015176431A1 (zh) * 2014-05-23 2015-11-26 中兴通讯股份有限公司 一种测试数据的生成方法及装置
WO2018229843A1 (ja) * 2017-06-12 2018-12-20 株式会社日立製作所 テストデータ作成装置およびテストデータ作成方法
CN107894953A (zh) * 2017-11-21 2018-04-10 中国银行股份有限公司 一种银行应用测试数据的生成方法及装置
CN109408378A (zh) * 2018-09-30 2019-03-01 福建星瑞格软件有限公司 一种在大数据量下快速定位sql解析错误的测试方法及系统
WO2021100156A1 (ja) * 2019-11-20 2021-05-27 日本電信電話株式会社 テストデータ生成装置、テストデータ生成方法、及びプログラム
CN112732571A (zh) * 2021-01-05 2021-04-30 中国工商银行股份有限公司 一种测试数据生成方法及装置
CN113760734A (zh) * 2021-02-02 2021-12-07 北京沃东天骏信息技术有限公司 一种数据准备方法及装置、设备、存储介质
CN112988132A (zh) * 2021-02-25 2021-06-18 平安科技(深圳)有限公司 数据接口的自动生成方法、装置、计算机设备及存储介质
CN112799966A (zh) * 2021-03-29 2021-05-14 广州嘉为科技有限公司 可扩展插件化批量生成测试数据方法、系统、设备及介质

Similar Documents

Publication Publication Date Title
CN107908541B (zh) 接口测试方法、装置、计算机设备及存储介质
CN107861870B (zh) 接口测试及测试数据生成方法、装置、终端和存储介质
US10824406B2 (en) Parsing source code into a linear array
US8010844B2 (en) File mutation method and system using file section information and mutation rules
CN109902002B (zh) 组合测试用例的生成方法及装置、存储介质、计算机设备
CN111722839B (zh) 一种代码生成方法、装置、电子设备及存储介质
CN108170602B (zh) 一种测试用例生成方法、装置、终端及计算机可读介质
CN114238381A (zh) 数据质量校验方法、设备及计算机可读存储介质
CN107733710A (zh) 链路调用关系的构建方法、装置、计算机设备及存储介质
CN110990274A (zh) 一种生成测试案例的数据处理方法、装置及系统
CN113986241A (zh) 一种基于知识图谱的业务规则的配置方法以及装置
CN111679979A (zh) 破坏性测试方法及装置
CN111259212B (zh) 一种遥测数据判读方法、装置、设备及存储介质
CN115114146A (zh) 接口测试方法、装置、设备及存储介质
CN107871055B (zh) 一种数据分析方法和装置
CN113535141A (zh) 数据库操作代码的生成方法及装置
CN111475511A (zh) 基于树状结构的数据存储方法、访问方法、装置及设备
CN111078573A (zh) 一种测试报文的生成方法及装置
CN114238463A (zh) 一种用于分布式指标计算的计算引擎控制方法和装置
CN114490762A (zh) 用于决策引擎的数据源取数方法、装置、介质和设备
CN111723087A (zh) 数据血缘关系的挖掘方法、装置、存储介质和电子设备
CN113672674A (zh) 一种自动编排业务流的方法、电子装置和存储介质
CN112579604A (zh) 测试系统的造数方法、装置、设备及存储介质
CN112055018A (zh) 报文分析方法及装置
CN115114325B (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