大话测试数据(一)

news2024/12/24 9:54:37

导读:测试数据的准备至关重要,无论是手工测试还是自动化测试都要以良好的测试数据准备为基础。本文为霍格沃兹测试学院特邀嘉宾,某互联网巨头企业资深测试技术专家刘晓光(skytraveler)老师对测试数据管理实践的思考总结,供参考。文末有福利!

前言

测试数据在整个测试过程中扮演着极为重要的角色,但是它却像个没有星象的演员,明明至少是男二号,但总是被观众忽略。在测试过程中,我们往往在测试计划阶段就忽略了测试数据,在起先没有给测试数据的设计、准备留出足够的时间,投入足够的精力,到了测试执行阶段追悔莫及。

只有吃过大亏的测试人员,才会在下一个测试开始的初期就认真的对待它。笔者也算是吃过亏的人。因此在现在经手的测试工作中,总会提着测试数据这根弦。恰巧有同学问到这方面的问题,就分享一下个人的经验总结,与大家一起探讨。

测试数据为什么重要?

1. 最浅显的道理:说白了测试用例的执行工作主要是做一些输入操作,然后观察输出。测试数据就是输入的内容,没有测试数据,你咋执行用例?

2. 测试数据是测试设计的重要组成部分,测试用例的有效性严重依赖测试数据的选取或者设计,要记住测试的本质是抽样,样品的选取其实是一门深奥的科学,有学过统计学的同学会深切明白这个道理。

3. 没有把测试数据这一块儿理顺,良好的自动化测试简直是空谈。试想,测试自动化采取的最普遍默模式就是“录制-回放”模式,如果搞不定数据,回放基本上会失败,自动化验证自然也就无法有效完成了。

4. 测试数据能够启发测试设计。做测试多的同学都会有过选取一组测试用例后来了感觉发现自己思如泉涌的经历。

5. 如果是已上线系统,或者生命周期较长的系统,从生产系统上 log 下来的数据可以很好的指导测试。(通过一些统计可以帮助识别那些业务重要,为能够制定正确的测试策略提供重要信息;对数据做 pattern 分析的话可以用于补充测试场景、用例,同样十分有益;这些数据还可以在测试中进行复用)。

6. 其它种种好处 ...

测试数据的分类

我们可以从多个维度对测试数据进行分类,下面讲一下我的分类方式:

1. 从测试数据的生命周期角度看可以将测试数据分为:稳定和数据、可消耗的数据和混合类型数据

稳定的数据:在一轮/多轮测试执行过程中几乎不会发生变化的数据,如常见的电商系统中的一些基础数据--城市,邮政编码,一些商品的属性,如衣服尺寸码等。

可消耗数据:测试执行完某个步骤后,数据发生不可逆改变,或者发生逆转操作需要耗费大量精力的改变。这类数据的例子有:商品的库存,票务系统里的票,要被运维程序删除的过期数据,网络数据包等等。

混合类型数据:某些数据是复合型数据,如 XML 结构或者 Json 结构的某些数据,一条数据中的一部分是稳定的数据,另一部分是可消耗数据,这样的例子其实很常见,一般这样的数据会被当做可消耗数据来处理。

2. 从数据是否可构造的角度来看可以将测试数据分为:可直接构造数据和需要间接获取的数据

可直接构造的数据:常见系统的大部分数据都可以直接被构造,通过操作系统本身,或者通过调用某些接口(SQL 也算接口)插入数据,有时候甚至这些数据就是文本,直接准备好他们就行了。

需要间接获取的数据:手工制造成本太高(理论上我们可以制造所有测试数据,但有时候就是成本太高),如某些以二进制存储的含有信息的数据(被序列化的数据),某些非文本数据,例如音频数据,视频数据,传感器上传过来的极为复杂的带有某些 pattern 的数据。

举个很好玩的例子,见过“猎曲奇兵”这款软件么?偶然听到一首歌,打开猎曲奇兵,十秒钟左右它就能告诉你是哪一首歌。你基本上无法自己创造一条有效的测试数据,除非你是张学友或者Lady Gaga。

3. 从业务角度来看数据可以分为:合规数据、非合规数据、Fuzz数据

合规数据:望文生义,就是符合业务规则的数据,如能够通过校验的身份证号。

非合规数据:显然就是不符合业务规则的数据,当你被要求输入注册邮箱的时候,你给出这样的输入:skytraveler@@163.com 显然不会合规。 

Fuzz 数据:Fuzz 数据主要是利用一些工具生成的乱七八糟的数据,主要用于系统稳定性测试和安全测试。这是一个大话题,有兴趣的话推荐看《模糊测试》这本好书。

4. 从测试数据来源来看,可以分为:生产 dump 数据,自己生成的数据

上面的分类其实并不是很准确,但是分类就是为了帮助更高效的解决问题。接下来我会讲解对于上面类型的数据我是如何来处理的。

测试数据的生成过程

概念上的数据:也就是抽象的数据,例如,你的被测物是一款收银软件,你知道每笔交易结束后,需要生成一张“发票”,见过发票的你大概知道 它长什么样子(如下图),“发票”就是概念上的数据,但它并不能直接使用。

被细化了的数据:也就是具体的数据项。拿到发票后,我们还要分析发票里到底有哪些数据,经过需求的获取及分析,我们知道发票包含:发票日期,发票代码,付款方,收款方,金额,防伪码,二维码等。同时我们也知道了这些数据的规约,例如,发票的日期格式是:yyyy年mm月dd日。

真正能使用的数据:我们知道了数据的细节,就可以按照这些细节准备被测系统能够识别和接受的数据了。例如,上面所说的发票付款方,收款方,真正的操作可能会直接在 GUI 中输入,或者可以调用某些接口,或者可以直接插入数据库。这时候你要做的就是,让你的数据变得能用起来。

从上面的解释可以得到测试数据从被识别,到能够被使用的大体步骤:

事实上,实际工作中,测试数据的准备远远不是这么简单。很多时候上面的每一步骤的推动都是一个艰苦的过程。搞定它需要像柯南一样抽丝剥茧的能力和工匠的细致和耐心。在后续的文章中,将进一步讲述一些实际经验。

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

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

相关文章

【K3s】第3篇 解决K3s状态一直是ContainerCreating

目录 1、遇到问题 2、问题解决 2.1 查看docker服务 2.2 增加docker中国镜像源 必看项 2.3 解决docker pull失败 3、结果展示 1、遇到问题 安装部署完k3s时遇到如下问题: sudo kubectl get pods -A pod 容器状态一直为:ContainerCreating 查看容…

现有项目集成seata的记录

背景:现有项目为springcloudnacos 的。但是没有分布式事务处理机制,偶发数据问题,现需要引入seata进行全局事务管理。简单记录一下改造和学习过程,过一段时间自己100%会忘的一干二净,并没有对其进行很深的研究。 前期…

IMX6ULL学习笔记(16)——GPIO输入接口使用【官方SDK方式】

一、GPIO简介 i.MX6ULL 芯片的 GPIO 被分成 5 组,并且每组 GPIO 的数量不尽相同,例如 GPIO1 拥有 32 个引脚, GPIO2 拥有 22 个引脚, 其他 GPIO 分组的数量以及每个 GPIO 的功能请参考 《i.MX 6UltraLite Applications Processor Reference M…

aosp 12/13/lineageos19.1 framework学习编译刷入小米手机,努比亚

hi,学员朋友,大家好! 前期一直有同学在问我这边,学习framework需要什么额外设备么?这里其实我一直前期也是给学员说的,如果你是个新手,刚刚开始可以不用,完全可以跟着课程一起学习&a…

贪官产生的本质是什么——谈谈人性与制度的博弈未来

知乎上有人问:贪官产生的本质原因是什么?一直不太能理解贪官是怎么产生的,希望能请各位从人性、社会、特权、阶级、系统工程等角度帮忙分析一下。贪官产生的本质原因是什么?- 青润的回答 - 知乎 https://www.zhihu.com/question/3…

python 动态规划的应用;斐波那契数列,最优解,最优子序列

一、动态规划概念 动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时&…

IT30--IT与业务业务与ITIT价值(3年之约已满)

从大学开始。。。 读大学前压根就没有见过计算机这个东西(不得不感慨信息技术发展之快)。可能因为高考数学考的还不错的原因,选择了计算机这个专业,后来研究生读的也是计算机的相关专业。当时班里的女生少,但没想到一…

java中多线程的基础知识

Process与Thread: 程序是指一段静态的代码,是指令和数据的有序集合,其本身没有任何运行的含义,它能够完成某些功能,它是应用软件执行的蓝本,它是一个静态的概念。 进程是关于某个数据集合的一次运行活动,它是操作系统动态执行的基本单元,也是程序的一次…

C++中二叉树的递归遍历方法2-2

在《C中二叉树的递归非遍历方法3-3》中提到,二叉树的层序遍历的输出顺序是从根节点开始,一层一层横向遍历各个节点。如图1所示的二叉树,层序遍历的输出的输出顺序为“1->2->3->4->5->6”。 图1 二叉树结构 1 递归实现层序遍历…

计算机视觉 基于CUDA编程的入门与实践 线程及同步一

一、并行执行规模 CUDA关于并行执行具有分层结构。每次内核启动时可以被切分成多个并行执行的块,而每个块又可以进一步地被切分成多个线程。这种并行执行的副本可以通过两种方式完成:一种是启动多个并行的块,每个块具有1个线程;另…

项目实战之旅游网(五)后台角色管理(下) 后台权限管理

目录 一.后台角色管理(下) 1.查询角色权限 2.修改角色权限 3.优化侧边栏菜单 二.后台权限管理 1.权限列表 2.新增权限 3.修改权限 4.删除权限 一.后台角色管理(下) 1.查询角色权限 先新建一个bean类型的实体类&#xf…

单商户商城系统功能拆解53—数据分析

单商户商城系统,也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法,例如拼团,秒杀,砍价,包邮…

一文清晰带你弄清楚Spring IOC 循环依赖问题是如何解决的

什么是循环依赖 循环依赖又被成为循环引用,即两个或者多个bean相互之间的持有对方,比如A 引用B,B引用C,C 又引用A,则它们最终反映为一个环,如下图所示: 循环依赖是对象之间的相互依赖关系,循环依赖就是一个死循环,除非有终结条件,否则就是死循环,最终导致内存溢出错误. 解决…

【Java 数据结构】优先级队列

篮球哥温馨提示:编程的同时不要忘记锻炼哦!谁是你的优先级呢? 目录 1、优先级队列 1.1 优先级队列概念 1.2 堆的概念 1.3 堆的存储结构 2、模拟实现优先级队列 2.1 成员变量的设定 2.2 根据数组构造出一个堆 2.3 向下调整 2.4 creat…

电压放大器如何测试线性稳压器

有不少的电子工程师咨询电压放大器如何测试线性稳压器,那么这种要怎么做呢,下面让安泰电子来为大家介绍。 一、什么是低压差线性稳压器? 低压差线性稳压器是集成电路稳压器,经常用来电流主通道控制,芯片上集成导通电阻…

SQL 事务基础

事务基础 1 事务概念 所谓事务就是用户定义的一个数据库操作序列,这些操作要么全做,要不全不做,是一个不可分割的工作单位。 2 事务的特性(ACID) 原子性(atomicity) 事务是数据库工作的逻辑…

数据,信息,知识,智慧

数据,信息,知识,智慧 知识管理的对象有数据、信息、知识、智慧,而不仅仅是知识。将这些联系起来处理,就能期待综合效果。 作为知识资产的知识 传统的资源以人、物、钱为代表。但是,在经济活动的现场&…

2023年全国管理类联考英语二真题及解析

Section Ⅰ Use of English Here’s a common scenario that any number of entrepreneurs face today: you’re the CEO of a small business and though youre making a nice 1 , you need to find a way to take it to the next level. what you need to do is 2 growth by …

MobPush:社交app硝烟再起,如何突出重围?

推送,能够在产品和用户之间建立有效的连接。好的推送能够传达有价值的信息和提供好用的功能,让企业和用户沟通,把准确的信息第一时间传达。然而很多企业都没有意识到这一点,对于推送的频率,内容,以及针对各…

辗转相除法求最大公因数-C语言

辗转相除法,又名欧几里德算法,是求最大公约数的一种方法。以除数和余数反复做除法运算,最终当余数为0时,取当前算式除数为最大公约数。 例1:求2015和15的最大公因数。 2015 15 * 134 5 15 5 * 3 0 因此&#xff0…