测试人员如何在测试环境数据库批量生成测试数据?方案分享

news/2024/5/4 13:36:16/文章来源:https://blog.csdn.net/deerxiaoluaa/article/details/129304838

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

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

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

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

测试数据生成的难点

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

<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结构来描述整个数据生成的规则:

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

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

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

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

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

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

再来看一下roles字段:

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

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

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

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

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

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

字段规则详细说明

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

<1>FIXED(固定值)

<2>RELATED(关联)

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

<4>ENUM(枚举)

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

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

总结

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

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

最后:

可以到我的个人号:atstudy-js,可以免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!其中包括了有基础知识、Linux必备、Mysql数据库、抓包工具、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试等。

这些测试资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_76558.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux基础命令-nice调整进程的优先级

文章目录 Nice 命令介绍 语法格式 常用参数 参考实例 1 调整bash的优先级为-10 2 调整脚本的优先级为6 3 调整指令的优先级 4 默认使用nice命令调整优先级 命令总结 Nice 命令介绍 nice命令的主要功能是用于调整进程的优先级&#xff0c;合理分配系统资源。Linux系…

代码随想录算法训练营day47 |动态规划 198打家劫舍 213打家劫舍II 337打家劫舍III

day47198.打家劫舍1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组213.打家劫舍II情况一&#xff1a;考虑不包含首尾元素情况二&#xff1a;考虑包含首元素&#xff0c;不包含尾元素情况三&#x…

taobao.item.img.delete( 删除商品图片 )

&#xffe5;开放平台免费API必须用户授权 删除商品图片 公共参数 请求地址: HTTP地址&#xff1a;http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请求参数 响应参数 点击获取key和secret 请求示例 TaobaoClient client new DefaultTaobaoClient(url…

论坛性能测试难点有哪些?

1 测试工具方面 用户和业务模型分析搭建合适的脚本开发&#xff08;不根据用户和业务的模型来开发脚本&#xff0c;认为要回归成功即可&#xff09;合适的需求分析转化为场景设计&#xff08;不知道如何根据需求进行场景设计&#xff09;大容量系统的数据生成和使用大型系统的…

MyBatis-Plus框架解析?

简单介绍&#xff1a;MyBatis-Plus&#xff08;简称 MP&#xff09;&#xff08;由苞米豆公司开源&#xff09;是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。MP会内置集成部分SQL方法&#xff0c;可以直接…

错误:PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。“+文件路径“的解决方案

最近在使用python进行筛选图片的时候&#xff0c;想到用python里面的os库进行图片的删除。 具体筛选方法就是&#xff0c;删除掉图片长度或宽度小于100像素的图片&#xff0c;示例代码如下所示&#xff1a; for file in os.listdir(img_path):if file .split( . )[ - 1 ] j…

【OJ比赛日历】快周末了,不来一场比赛吗? #03.04-03.10 #12场

CompHub 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号同时会推送最新的比赛消息&#xff0c;欢迎关注&#xff01;更多比赛信息见 CompHub主页 或 点击文末阅读原文以下信息仅供参考&#xff0c;以比赛官网为准目录2023-03-04&…

一文说清Kubernetes的本质

文章目录Kubernetes解决了什么问题&#xff1f;Kubernetes的全局架构Kubernetes的设计思想Kubernetes的核心功能Kubernetes如何启动一个容器化任务&#xff1f;Kubernetes解决了什么问题&#xff1f; 编排&#xff1f;调度&#xff1f;容器云&#xff1f;还是集群管理&#xf…

Python 虚拟环境的使用

PyCharm 创建的虚拟环境与使用 workon 命令创建的虚拟环境在本质上没有区别&#xff0c;它们都是 Python 的虚拟环境。 使用 PyCharm 创建工程时&#xff0c;使用可以使用曾经工程的虚拟环境&#xff0c;或者新建一个虚拟环境来安装 Python 的库&#xff0c;又或者使用 workon…

rk3288-android8-IR-mouse

IR问题: mouse按键使用不了 然后排查: 1.排查上报 ir_key6{ rockchip,usercode <0xbf00>;rockchip,key_table <0xff KEY_POWER>,<0xfe KEY_MUTE>, <0xfd KEY_1>, <0xfc KEY_2>, <0xfb KEY_3>, <0xfa KEY_4>, <0xf9 KEY_5>…

2023年天津财经大学珠江学院专升本专业课考试题型

天津财经大学珠江学院关于2023年高职升本科专业课考试时间及题型一、专业课考试 &#xff08;一&#xff09;时间安排 2023年天津财经大学珠江学院高职升本科专业课考试定于2023年3月25日14&#xff1a;00-17:00进行&#xff0c;凡报考工商管理、旅游管理、税收学专业的考生&am…

卡特兰数及常见模型

卡特兰数 英文名Catalan number&#xff0c; 是组合数学中一个常出现在各种计数问题中出现的数列。其前几项为: 1 1 2 5 14 42 132 429 1430 4862 16796 58786 208012 742900 2674440 9694845 35357670 129644790 477638700 1767263190 6564120420 24466267020 91482563640 343…

网络安全入门学习:社会工程学

在电影《我是谁&#xff1a;没有绝对安全的系统》中&#xff0c;主角本杰明充分利用自己高超的黑客技术&#xff0c;非法入侵国际安全系统&#xff0c;并在最后逃之夭夭。在电影中&#xff0c;有一句经典的台词&#xff1a; 所有黑客手段中最有效的、最伟大的幻想艺术——社会…

Qt std :: bad_alloc

文章目录摘要问题出现原因第一种 请求内存多余系统可提供内存第二种 地址空间过于分散&#xff0c;无法满足大块连续内存的请求第三种 堆管理数据结构损坏稍微总结下没想到还能更新参考关键字&#xff1a; std、 bad、 alloc、 OOM、 异常退出摘要 今天又是被BUG统治的一天&a…

系列九、视图/存储过程/存储函数/触发器

一、视图 1.1、概述 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的。 通俗的讲&#xff0c;视图只保存了查询的SQL逻辑&#xff0c;…

(JUC)核心线程 和 救急线程的区别;Executors-固定大小线程池单线程线程池

核心线程 和 救急线程的区别 救急线程是有个生存时间的&#xff0c;它执行完任务了&#xff0c;过了一段时间&#xff0c;没有新任务了&#xff0c;救急线程就会销毁掉&#xff0c;变成结束的状态 核心线程没有生存时间&#xff0c;它执行完任务后&#xff0c;它仍然会被保存…

Acwing 165. 小猫爬山 java

&#x1f437; 输入案列 5 1996 1 2 1994 12 29&#x1f437; 输出案列 2&#x1f475; 优先搜索可能方案比较少的分支 &#x1f920; DFS剪枝&#xff1a;排序&#xff0c;优先处理大的 &#x1f920; 枚举 猫&#xff1f;枚举 车&#xff1f;不重不漏&#xff0c;猫放缆车&…

java Object 万字详解 (通俗易懂)

基本介绍构造方法成员方法hashCode()getClass()toString()equals()finalize()JavaBean重写Object类的方法重写toString重写equals一、基本介绍Object类是java类层次最顶层的基类&#xff08;父类&#xff09;&#xff0c;所有类都是直接或间接继承自Object类&#xff0c;因此&a…

LiteDram仿真验证(一):安装、配置及导出Verilog

目录前言&#xff1a;一、关于Litex:二、前期工作二、关于litedram1、定义2、配置examples文件litedram文件gen.py三、总结前言&#xff1a; 因为项目&#xff0c;需要对DDR做一个软核控制器&#xff0c;师傅帮我物色了Litex项目的外设&#xff1a;Litedram。 网上现有的教程&a…

Delphi 中 FireDAC 数据库连接(脱线连接 )

参见&#xff1a;Delphi 中 FireDAC 数据库连接&#xff08;总览&#xff09;述了如何使用FireDAC离线模式&#xff0c;它允许你在没有与数据库持久连接的情况下处理数据。一、概述FireDAC的离线模式类似于多层客户端&#xff0c;大部分时间客户端与数据库断开连接。只有当客户…