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

news2024/11/15 4:33:54

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

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

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

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

测试数据生成的难点

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

<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.coloradmin.cn/o/382975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络】套接字 -- TCP

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【网络】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449; LeetCode刷题网站 文章…

记录一次nginx转发代理skywalking白屏 以及nginx鉴权配置

上nginx代码 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; …

【2023】某python语言程序设计跟学第二周内容

本文说明&#xff1a; 案例内容为北理工python语言程序设计课程&#xff0c;如有不妥请联系&#xff01; 目录蟒蛇绘制案例&#xff1a;执行结果&#xff1a;代码分析&#xff1a;举一反三&#xff1a;绘制一个五角星图案执行结果&#xff1a;turtle库根据案例简单说明&#xf…

linux(Centos)安装docker

官网地址&#xff1a;Install Docker Engine on CentOS 首先检查linux系统版本及内核&#xff1a; 安装docker要求系统版本至少为7.x版本&#xff0c;内核至少为3.8以上 cat /etc/redhat-release # 查看系统版本号uname -r #查看linux系统内核 检查系统是否能连上外网&#…

3.基于Label studio的训练数据标注指南:文本分类任务

文本分类任务Label Studio使用指南 1.基于Label studio的训练数据标注指南&#xff1a;信息抽取&#xff08;实体关系抽取&#xff09;、文本分类等 2.基于Label studio的训练数据标注指南&#xff1a;&#xff08;智能文档&#xff09;文档抽取任务、PDF、表格、图片抽取标注等…

NJU数电实验-1

实验一 选择器 2选1多路选择器 逻辑表达式&#xff1a;y(∼s&a)∣(s&b)y(\sim s\&a)|(s\&b)y(∼s&a)∣(s&b) 逻辑电路&#xff1a; 数据流建模 数据流建模主要是通过连续赋值语句 assign 来描述电路的功能 module m_mux21(a,b,s,y);input a,b,s;…

这是一篇很好的互动式文章,Framer Motion 布局动画

重现framer的神奇布局动画的指南。 到目前为止&#xff0c;我最喜欢 Framer Motion 的部分是它神奇的布局动画–将 layout prop 拍在任何运动组件上&#xff0c;看着该组件从页面的一个部分无缝过渡到下一个部分。 <motion.div layout /> 在这篇文章中&#xff0c;我们…

【测试岗】那个准点下班的人,比我先升职了...

前言 陈双喜最近心态很崩。和他同期一道进公司的陈琪又升了一级&#xff0c;可是明明大家在进公司时&#xff0c;陈琪不论是学历还是工作经验&#xff0c;样样都不如自己&#xff0c;眼下不过短短的两年时间便一跃在自己的职级之上&#xff0c;这着实让他有几分不甘心。 程双…

linux常用命令介绍 03 篇——常用的文本处理工具之grep和cut(以及部分正则使用)

linux常用命令介绍 03 篇——常用的文本处理工具之grep和cut&#xff08;以及部分正则使用&#xff09;1 常用命令01篇 和 02篇1.1 Linux命令01篇——Linux解压缩文件常用命令1.2 Linux命令02篇——linux日常常用命令介绍2. 正则表达式2.1 基本定义2.2 正则中常用的元字符3. gr…

【python】异常详解

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录错误分类捕捉异常实例finally的使用捕捉特定异常抛出异常用户自定义异常&#x1f338;I could be bounded in a nutshell and count myself a king of infinite space. 特别鸣谢&#xff1a;木芯工作室 、I…

项目质量管理有哪些不同阶段?其中“质量“指的是什么?

项目质量管理是指在整个项目中管理和保持质量的过程。 "质量 "不是意味着 "完美"&#xff0c;通常更多的是指在整个项目中确保质量的一致性。然而&#xff0c;"质量 "的确切含义取决于客户或利益相关者对项目的需求&#xff0c;因此在每个项目可…

Ubuntu开机自动挂载硬盘

查看挂载信息&#xff0c;命令台输入 df -h能够看到/dev/nvme0n1p2是我们要挂在的硬盘&#xff0c;其路径是/media/lkzcswq/Data 找到要挂载磁盘的UUID sudo blkid /dev/nvme0n1p2观察到这个磁盘的UUID为72922DF0922DBA0D&#xff0c;type为ntfs 4. 编辑/etc/fstab文件 #如…

【服务器数据恢复】VMware虚拟机下的SQL Server数据库数据恢复案例

服务器数据恢复环境&#xff1a; 一台某品牌PowerEdge系列服务器和一台PowerVault系列存储&#xff0c;上层是ESXI虚拟机文件&#xff0c;虚拟机中运行SQL Server数据库。 服务器故障&#xff1a; 机房非正常断电导致虚拟机无法启动。管理员检查虚拟机发现虚拟机配置文件丢失&…

一、Java概述

一、Java概述 1.1 版本 Java SE 标准版&#xff08;核心版本&#xff09;&#xff0c;主要包含Java最核心的库包括&#xff1a;集合&#xff0c;IO&#xff0c;数据库连接、网络编程等 Java EE 企业版&#xff0c;主要用于开发&#xff0c;装配&#xff0c;部署企业级应用包括…

工业机器人编程调试怎么学

很多人觉得工业机器人很难学学&#xff0c;实际上机器人涉及的知识远比PLC要少。现简单说明一下初学者学习工业机器人编程调试的流程&#xff0c;以AUBO机器人为例&#xff1a; 首先我们需要知道工业机器人的调试学起来不难&#xff0c;远比编程更简单&#xff0c;示教器上的编…

基于信息间隙决策理论的碳捕集电厂调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Golang Map原理(底层结构、查找/新增/删除、扩缩容)

参考&#xff1a; 解剖Go语言map底层实现Go语言核心手册-3.字典 一、Go Map底层结构&#xff1a; Go map的底层实现是一个哈希表&#xff08;数组 链表&#xff09;&#xff0c;使用拉链法消除哈希冲突&#xff0c;因此实现map的过程实际上就是实现哈希表的过程。 先来看下…

react hooks学习记录

react hook学习记录1.什么是hooks2.State Hook3.Effect Hook4.Ref Hook1.什么是hooks (1). Hook是React 16.8.0版本增加的新特性/新语法 (2). 可以让你在函数组件中使用 state 以及其他的 React 特性 貌似现在更多的也是使用函数式组件的了&#xff0c;重要 2.State Hook imp…

Linux系统安装:Zookeeper

目录 Zookeeper的安装 1、环境准备 2、上传 3、解压文件到opt/zookeeper目下 4、安装完后进入zookeeper&#xff0c;找到conf目录 5、复制zoo_sample.cfg 6、编辑zoo.cfg 7、复制一份会话&#xff0c;进入zookeeper安装目录&#xff0c;创建一个文件夹zkdata&#xff0…

使用yeoman根据自己的模板创建一个脚手架

介绍 本文使用的模板并不是通用模板~&#xff0c;是自己构建的模板。内部具体如何选择模板逻辑就没有了&#xff0c;仅仅相当于入门demo实现流程。有兴趣学习脚手架的话yo还是不错的&#xff0c;走完本文逻辑可以试试看抽成自己项目&#xff0c;然后引用至公司~加油&#xff0…