如何高效地设计测试用例并评审
编写出好的测试用例是每一个测试工程师的职责,但在实际工作中大家写的测试用例往往需要不断地修改才能使用,这不仅浪费了时间,还容易让测试工程师产生自我否定的情绪,甚至在团队中产生各种矛盾。
那如何高效地设计测试用例呢?团队内部又该如何处理测试用例的编写呢?下面就个人和团队的做法给出建议,希望能够帮助到大家。
个人写测试用例
个人在写测试用例时,设计方法用了很多,执行步骤也写了不少,但实施测试时却发现所写的步骤很大程度上无法衔接,需要进行修改才能执行下去,这种情况基本都是对软件界面操作了解不够而引发的,而软件界面操作是有规律可循的。
以下面较常见的界面来讲解测试用例的设计思路和具体做法。
1.1 界面功能分析
首先,图中红色加粗的信息项是必填项,在界面设计时往往都放在前面。非必填项则放在必填项的后面
软件并不会在输入某个数据时立即校验该数据的合法性和正确性,而是在点击“保存”按钮,提交数据时进行数据校验
数据项校验顺序:从左至右、从上至下。非必填项若无数据则不校验
校验提示原则1:根据校验顺序逐项校验,遇到错误立即弹框提示,终止校验过程,数据提交失败
校验提示原则2:首先检验整体数据的完整性,然后注意检验合法有效。即先检验所有必填项都有没有数据,然后才检验数据对不对!
1.2 信息提示规则说明
当发现一个问题时,就已经无法完成任务,后面的数据项是否还有问题已不重要了。软件无法控制用户的操作行为,不会一次性提示出所有的数据项错误,因为用户如果没改完、没改好、不小心把对的数据改错了等等行为,都会导致这种一次性的提示没有意义。最关键的是这些信息显示在提示框中,用户点击“确定”按钮后就消失了,他能完全记住吗?
1.3 测试数据设计
对每一项数据均采用多个技术设计出若干个非法无效数据和有效数据,所有必填项的有效数据拼成一组组的完整数据,数据组的个数按最多的有效数据项来算,有效数据个数不足的数据项可将已有的有效数据进行复制,补齐个数的不足。
1.4 测试用例设计大体步骤
1) 所有必填、非必填均为空,然后点击【保存】,系统提示:【姓名】不能为空
2) 给【姓名】填入一个非法数据后点击【保存】,系统提示:【年龄】不能为空
3) 给【年龄】填入一个非法数据后点击【保存】,系统提示:【性别】不能为空
4) 给【性别】填入一个非法数据后点击【保存】,系统提示:【学历】不能为空
5) 给【学历】填入一个非法数据后点击【保存】,系统提示:【身高】不能为空
6) 给【身高】填入一个非法数据后点击【保存】,系统提示:【体重】不能为空
7) 给【体重】填入一个非法数据后点击【保存】,系统提示:【姓名】数据错误。注意:至此所有必填项的必填性已测完
8) 依次给【姓名】填入其它非法数据后点击【保存】,系统提示:【姓名】数据错误。注意:填一个非法就点击【保存】
9) 给【姓名】填入一个合法数据后点击【保存】,系统提示:【年龄】数据错误。注意:此时对【姓名】的所有非法已测完,并测试了一个合法
10) 循环第8和第9步,对其余必填项都做相同的操作,先填当前数据项的所有非法,最后,跟一个合法。至此,所有必填项的非法数据均测完,而合法数据测试了一组
11) 将必填项的剩余未测的多组数据,按组填入,然后点击【保存】,完成剩下的必填项测试。至此对必填项的合法与非法测试已完成
12) 非必填项单独测试,可将前面必填项的合法数据拿出一组来配合
团队写测试用例
团队工作最大的问题就是每个人的测试数据都是按自己的思路和要求来设计的,当大家的测试用例放在一起时,无法构成一套,不能完整的对系统进行测试,改动量很大。尤其对查询、统计、报表类功能影响巨大,几乎不能测试!
团队编写测试用例的原则是:
功能滞后的用例,编写时需向前置功能的用例提出数据要求
前置功能的用例在满足自己测试的需求基础上要考虑后续测试的数据要求,最好能融合(留下的就是满足后续功能要求的数据)
例如:
张三写【材料入库】,增删改功能执行后保留在系统中有两条数据。
李四写后续的【材料出库】,则首先利用张三保留在系统中有两条数据,若数据不够,李四要对张三提出添加数据的具体要求来满足自己的测试工作。
依此类推,则整个团队的测试用例就能写成一套,这样的测试用例可用性非常高,执行时基本不过脑子,只看预期结果。
建议一开始就召开专门的测试用例设计会议来沟通测试数据的问题
笔者做测试经理时就是这样做的,测试工程师刚开始的时候很抵触,觉得这样做很麻烦且进度慢,但当进入测试执行阶段,他们都很开心,因为测试用例执行的很流畅,也没有以往的那些改用例的活了。
高效
就是做一件事当几件事来用。具体说就是一个测试数据可以测多个方面,这就是高效!
而测试的高效就是测试数据的高效,那么怎么做呢?
3.1 关于非法数据
非法的数据要测,且要用心设计,但无法进入系统中
3.2 关于合法数据
从功能角度说,测试用例有合法与非法之分,一般合法数据的设计只要合法就行,但往往不满足业务,此时要为业务测试重新设计数据,费时费力。需要合并合法数据与业务数据,提高用例的效率,即高效!
合并时,使用业务数据来替代合法数据。对测试工程师而言,很可能不懂业务,没关系用户懂,并且用户手头就有很多的业务数据,可以找用户获取这些业务数据。
要注意用户业务数据的保密!21年下半年国家正式实施《中华人民共和国数据安全法》,对数据的获取、传播和使用都有法律上要求。
评审
有很多关于评审的做法,我这里不再累述,当前面的几点都做到了、做好了,其实评审时要评什么,怎么评,也就呼之欲出了。
个体用例的设计是否合理,与软件的操作是否相符,这是一个重点。
整体用例的前后数据是否呼应,是否能构成一套,这是另一个重点。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
软件测试面试小程序
被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!
涵盖以下这些面试题板块:
1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux
6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
相关文章:
如何高效地设计测试用例并评审
编写出好的测试用例是每一个测试工程师的职责,但在实际工作中大家写的测试用例往往需要不断地修改才能使用,这不仅浪费了时间,还容易让测试工程师产生自我否定的情绪,甚至在团队中产生各种矛盾。 那如何高效地设计测试用例呢&…...
基于python+Django知识图谱的医疗问答系统设计与实现
摘 要 从信息技术的发展至今,各色各样的技术能够满足各类人群的需求,能够让各种业务行业的痛点变成能够可以解决的方法,随着我们经济的不断提高,越来越多的人都该关注健康,那么健康饮食、健康医疗是我们生活中所追求的…...
cuda编程常见问题
cuda环境配置 参考链接 https://blog.csdn.net/weixin_43788327/article/details/125823507?spm1001.2014.3001.5506 疑难问题 在学习《GPU高性能编程CUDA实战》这本书时,发现书里面的代码很多变量都没定义过,经过搜索发现这都是书上自带的代码。 代…...
QTday3
作业1:通过对话框实现保存文件 void burger::on_saveBtn_clicked() {//调用函数,获取文件路径QString filename QFileDialog::getSaveFileName(this,"选择文件夹","./","Text File(*.txt)");if(filename.isNull()){QMes…...
docker镜像是如何导入的?
镜像导入是由image/tarexport/load.go#tarexporter.Load()完成的 以下代码参考github.com/docker/docker版本v0.0.0-20181129155816-baab736a3649 主要是注册镜像信息以及解包镜像tar流到新root 导出和保存的区别在于 导出(export): 仅导出文件结构保存(save): 保存镜像历史和元…...
四川大学874考研真题00-23
22, 2022年硕士学位研究生入学考试试题回忆版 数据结构 1.一个时间复杂度为n2 的算法运行,m1算n个问题用时1秒,m2处理器是m1效率的64倍,则m2每秒能计算()个问题。 A. 64n B. 8n …...
openGauss学习笔记-58 openGauss 高级特性-资源池化
文章目录 openGauss学习笔记-58 openGauss 高级特性-资源池化58.1 特性简介58.2 架构介绍58.3 功能特点58.4 适用场景与限制58.5 手动安装示例58.6 OCK RDMA使用示例58.7 OCK SCRLock使用示例 openGauss学习笔记-58 openGauss 高级特性-资源池化 58.1 特性简介 资源池化特性主…...
centos升级cmake之相关问题解决
1. yum安装(仓库默认版本) # 查看可安装版本 yum --showduplicates list xxxx# 安装指定版本 yum install xxxx-1.23.1 2. 安装高版本cmake 2.1 一开始下载的是cmake-xxx.zip,在 ./bootstrap 一直会报错“missing terminating " character”,后来…...
vcs仿真教程(查看断言)
VCS是在linux下面用来进行仿真看波形的工具,类似于windows下面的modelsim以及questasim等工具,以及quartus、vivado仿真的操作。 1.vcs的基本指令 vcs的常见指令后缀 sim常见指令 2.使用vcs的实例 (1)新建文件夹: …...
2023开学礼新疆石河子大学图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工
2023开学礼新疆石河子大学图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工...
javaee spring aop 切入点表达式
1、切入点表达式:对指定的方法进行拦截,并且生成代理表达式。 表达式语法:execution([修饰符] 返回值类型 包名.类名.方法名(参数))execution( public void com.test.service.impl.UsersService.add() )2、表达式不同写法 1.匹配指定方法 …...
js 获得元素的offsetLeft
要获得元素相对于其offsetParent元素左侧边缘的距离(即offsetLeft),可以使用如下代码: var el document.getElementById(your-element-id); var offsetLeft el.offsetLeft;其中,el为要获取offsetLeft的元素对象&…...
【Spring面试题】IOC控制反转和DI依赖注入(详解)
IOC Inversion of Control 控制反转,是一种面向对象的思想。 控制反转就是把创建和管理 bean 的过程转移给了第三方。而这个第三方,就是 Spring IoC Container,对于 IoC 来说,最重要的就是容器。 通俗点讲,因为项目…...
LeetCode 2511. 最多可以摧毁的敌人城堡数目
【LetMeFly】2511.最多可以摧毁的敌人城堡数目 力扣题目链接:https://leetcode.cn/problems/maximum-enemy-forts-that-can-be-captured/ 给你一个长度为 n ,下标从 0 开始的整数数组 forts ,表示一些城堡。forts[i] 可以是 -1 ,…...
bazel远程缓存(Remote Cache)
原理 您可以将服务器设置为构建输出(即这些操作输出)的远程缓存。这些输出由输出文件名列表及其内容的哈希值组成。借助远程缓存,您可以重复使用其他用户的 build 中的构建输出,而不是在本地构建每个新输出。 增量构建极大的提升…...
算法竞赛入门经典习题2-6 排列(permutation)
排列(permutation)——算法竞赛入门经典_还记得樱花正开~的博客-CSDN博客 上面的代码很厉害,学习...我的代码水平就比较差了... #include <cstdio> #include <set>int main(){for(int i 123; i < 329; i){std::set<int&…...
队列的链表实现 题目(难度1/10)
C数据结构与算法 目录 队列介绍 队列这种容器,就像大家排队上公交车一样。 第一个来到的人排在最前面; 最后来的排在最后面; 第一个先上车(离开队列); 队列的接口 队列是有如下接口的容器࿱…...
SpringMVC常用的三种获取请求参数的方式
在Spring MVC中,可以使用多种方式来获取请求参数。下面我将介绍常用的几种方式,并提供相关的示例代码。 1. 使用RequestParam注解获取请求参数 RequestParam注解用于从请求中获取指定名称的参数值,并将其绑定到方法参数上。如果请求中没有找…...
2023开学礼新疆理工学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工
2023开学礼新疆理工学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工...
数据结构----结构--线性结构--字符串
数据结构----结构–线性结构–字符串 一.字符串的定义方式 第一种: char* str1"Hello"第二种: char str2[]"Hello";区别 1.所在区域不同 //str1在常量区//str2在这里的写法是在栈区2.元素是否可改 //str1中的元素不可改//st…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

