• 0
  • 0
分享
  • 精准的批量测试数据生成工具实现方案——软件测试圈
  • 曼倩诙谐 2023-04-04 11:28:05 字数 2256 阅读 1674 收藏 0

  测试人员为了测试某个特定场景,往往需要在测试环境数据库中插入特定的测试数据来满足需求;

  性能测试时,常需要在测试环境生成大量可用测试数据来支持性能测试;

  建设持续集成持续交付体系时,我们往往也需要在测试环境生成测试数据来保障自动化用例可以持续稳定的运行。

  因此,如何在测试数据库批量生成大量可用的测试数据就成为了测试领域一个关键而难解决的问题,本文就来讲讲测试数据批量生成工具的一种实现方案。

  测试数据生成的难点

  测试数据生成主要难点大致可以归结为以下几个方面:

  <1>编写大量的sql语句费事耗力。

  <2>由于主键、外键和业务本身的逻辑约束,很难通过写sql一次性大批量插入测试数据,往往的情况是需要对sql的一些关键字段进行一些修改,如对id字段进行修改避免重复。

  <3>造数sql脚本复用性差。

  传统数据生成工具的问题

  传统批量数据生成工具基本思路有两大类:

  方式1

  通过程序随机的生成测试数据,而实际的实现过程中,对随机的方式没有精准的控制,往往造成以下结果,导致工具无法满足实际需要:

  <1>数据随机性太大,造出来的数据和真实数据差别太大。

  <2>随机生成的数据往往存在大量不可用的脏数据。

  <3>很难解决多表关联的数据生成。

  <4>生成的数据往往无法满足特定场景的数据要求。

  方式2

  精准的针对某个特定场景编写代码造数,这种方式的缺点也很明显:

  <1>代码针对性太强,没有通用性。

  <2>对测试人员代码能力要求高。

  <3>业务逻辑或数据表结构发生变化,需要修改代码,成本高。

  测试数据批量生成工具设计思路

  能够真正满足实际需要的数据生成工具,应当满足以下要求:

  <1>有较好的通用性,不需要关心具体的业务或针对具体的系统。

  <2>对数据随机生成有精准的控制能力,可以控制生成字段的长度、类型、能否重复、由什么字符组成等等。

  <3>必须解决表关联数据生成的问题。

  <4>可配置化,不需要因为数据需求修改而改动程序代码。

  本文介绍的工具实现方案遵循的基本思路是:在数据库造数归根结底是针对数据表的每个字段进行造数,需要设计一套配置方法,可以精准的描述每一个表字段数据的生成规则和限制。然后通过工具解析规则,批量生成数据。

  举一个简单的例子,有一张数据表的主键是一个长度固定为27位的数字,作为主键它不能重复。这时候对于这个字段的生成规则就有4条:

  <1>长度是27;

  <2>由纯数字组成;

  <3>不能重复;

  <4>生成方式是随机生成。

  我们只需要将每一张表的每一个字段的数据生成规则都拆解成上边例子一样,然后用特定的格式描述出来,利用程序解析这些规则,就可以批量的生成符合要求的测试数据了。

  实践方案整体介绍

  通过上一节的例子不难看出,按照本文介绍的方式设计实现批量造数,核心重点在于如何用固定的,程序可解析的格式来描述数据生成的规则。下边就详细介绍一种方式。

  我们使用以下的json结构来描述整个数据生成的规则:

1-1.png

  json配置文件最外层有3个字段:

  connectionInfo:描述数据库链接信息,将要造数的目标数据信息写在这里。

  roles:这是一个json数据,用于描述多张表的数据生成规则,有几张表,这个数组中就有几个元素。

  sqlScriptNmae:最终生成的sql脚本名称,本文介绍的工具不是直接将生成的数据写入数据库,而是将生成的数据转换为对应的insert语句,生成sql脚本,以便根据需要执行。

  下边看下connectionInfo和roles的具体内容:

1-2.png

  connectionInfo包括数据库类型、host、端口、用户名、密码、连接的数据库名称6个字段,用于描述造数目标数据库链接信息。

  再来看一下roles字段:

1-3.png

  roles描述数据生成规则,roles是一个数组,数组中的每一项描述一张表的数据生成规则,roles中的每一项有3个字段:

  tableName:当前配置规则是哪张表的。

  size:想要一次性批量生成数据的数量,如上图一次为tableA表生成100条数据。

  fields:一个json数据,里边的每一项对应tableA的一个字段,描述这个字段的详细生成规则。

  最后看一下fields中的每一项:

1-4.png

  每一个字段的生成规则,都是用上图中的12个字段进行描述,字段说明如下:

1-5.png

  字段规则详细说明

  上一节看到字段的生成方式总共有9种,本节详细说明这9种生成方式和它们的配合字段如何描述生成规则。

  <1>FIXED(固定值)

1-6.png

  <2>RELATED(关联)

1-7.png

  <3>RANDAM(随机)或RANDAM_UNIQUE(随机不重复)

1-8.png

  <4>ENUM(枚举)

1-9.png

  <5>NUMRANGE(数字范围)或NUMRANGE_UNIQUE(数字范围不重复)

1-10.png

  <6>SQL(sql提取)或SQL_UNIQUE(sql提取不重复)

1-11.png

  总结

  本文提出了一种通过配置字段生成规则来精准批量的生成测试数据的方案。这种方案增加了数据生成的通用性,同时能在较大程度上满足对测试数据精准性的要求。

  但本文举例的实践方案也只是这种思路的一个具体实践,相比较方案本身,笔者认为这种规则配置的数据生成思路更加重要。希望这篇文章可以在批量测试数据自动生成方面为你和你的团队提供参考。



作者:江涛    

来源:http://www.51testing.com/html/54/n-7795254.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 什么是beanshell?其实可以理解为脚本语言,一般使用Java写的,是一种jar包形式的插件。jmeter目前有哪些?定时器:BeanShell Timer前置处理器:BeanShell PreProcessor采样器:BeanShell Sampler后置处理器:BeanShell PostProcessor断言:BeanShell断言监听器:BeanShell ListenerBeanShell的使用以登录接口为例,在登录时,要对接口的密码进行加密处理,然后请求接口,这里使用BeanShell就很方便。1、首先,需要使用IDE写一个加密解密的类,然后对应把该类打成jar包的形式,具体生...
            0 0 4736
            分享
          • 前言随着测试技术的发展,接口自动化测试逐渐成为各大公司投入产出比最高的测试技术。介入时间早,执行效率高,稳定性高的优点,让越来越多的公司引入接口自动化测试。框架简介APIAutoTest是处理API接口的轻量级自动化测试框架,Java语言实现,基于TestNG测试框架,支持持续集成,自动构建与测试。框架介绍数据驱动设计,使用TestNG中的@DataProvider读取Excel中存储的自动化测试用例;基于TestNG测试框架;使用HttpClient发送Http请求,并统一接口response返回值为String;使用fastJson和Jsoup进行数据解析,由于请求返回值的统一,解析数据异...
            12 13 2240
            分享
          •   现在国内测试行业的断层实际上非常严重,不论是从公司角度,还是从测试行业角度。关于测试人的职业发展,相信每个人都有自己的深刻体会,特别是“老一点“的,又不在互联网大厂的测试人员。  本文针对几个测试同学普遍关注的典型问题,整理了测试专家刘晓光老师的解答,供大家交流探讨。  Question  1、测试技能的提高主要是依托于公司平台,还是个人外部自学能力?  2、国内大部分公司对测试职能是普遍低估的,如何让领导重视,提高测试的地位?  3、测试也细分了很多专项测试,从个人发展角度,专项测试 or 全面的系统测试,哪个更符合未来职业发展要求?  4、现在火热的测试开发(能力超高)是否已经脱离了测...
            0 0 1188
            分享
          •   近期有网传消息声称,小米 Redmi K80 系列手机将采用“升降摄像头”设计,并放出了一张“预告图”。小米中国区市场部副总经理、Redmi 品牌总经理王腾今天在微博上否认了相关传闻:“不会做升降的,对整机设计影响太大了。话说现在大家都习惯了前摄挖孔的形态吧?”  王腾转发的微博中,博主“李昂昂昂啊”也对这一传闻提出了质疑。“…… 网友脑洞挺大的,能想起来机械结构升降这种影响厚度机身的设计。今年底乃至明年主流的品牌不会有所谓的升降结构前摄像头新机,这玩意连曾经提供升降电机的厂商都没多少存货了,网友脑洞也太大了,是不是再过段时间就可以幻想小米 6 复刻了。”  IT之家注:2019 年至 2...
            0 0 465
            分享
          •   随着各企业的业务发展、用户量以及数据量的不断增加,系统承载的压力也会随之增加,服务系统的性能好坏又严重影响企业的利益。因此,性能测试重要性与需求越来越强烈。  常见的性能测试目的  性能测试是确定系统在特定工作负载下的稳定性和响应能力。在进行性能测试之前,首先是要明确性能测试的目的,目的不同,对应的解决方案会有很大差异,最常见的性能测试目的(或契机)有三种:  · 评测当前系统性能  通过性能测试了解系统当前的性能是否达到预期。例如:新系统上线前、技术升级后,都会进行性能测试,确保系统在线上稳定可靠地运行。  · 寻找瓶颈,优化性能  系统已知有性能问题,进行测试寻找瓶颈,以便优化其性能。...
            0 0 1145
            分享
      • 51testing软件测试圈微信