当前位置: 首页 > news >正文

如何高效地设计测试用例并评审

编写出好的测试用例是每一个测试工程师的职责,但在实际工作中大家写的测试用例往往需要不断地修改才能使用,这不仅浪费了时间,还容易让测试工程师产生自我否定的情绪,甚至在团队中产生各种矛盾。

那如何高效地设计测试用例呢?团队内部又该如何处理测试用例的编写呢?下面就个人和团队的做法给出建议,希望能够帮助到大家。

 个人写测试用例

个人在写测试用例时,设计方法用了很多,执行步骤也写了不少,但实施测试时却发现所写的步骤很大程度上无法衔接,需要进行修改才能执行下去,这种情况基本都是对软件界面操作了解不够而引发的,而软件界面操作是有规律可循的。

以下面较常见的界面来讲解测试用例的设计思路和具体做法。

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 &#xff0c…...

bazel远程缓存(Remote Cache)

原理 您可以将服务器设置为构建输出(即这些操作输出)的远程缓存。这些输出由输出文件名列表及其内容的哈希值组成。借助远程缓存,您可以重复使用其他用户的 build 中的构建输出,而不是在本地构建每个新输出。 增量构建极大的提升…...

算法竞赛入门经典习题2-6 排列(permutation)

排列&#xff08;permutation&#xff09;——算法竞赛入门经典_还记得樱花正开~的博客-CSDN博客 上面的代码很厉害&#xff0c;学习...我的代码水平就比较差了... #include <cstdio> #include <set>int main(){for(int i 123; i < 329; i){std::set<int&…...

队列的链表实现 题目(难度1/10)

C数据结构与算法 目录 队列介绍 队列这种容器&#xff0c;就像大家排队上公交车一样。 第一个来到的人排在最前面&#xff1b; 最后来的排在最后面&#xff1b; 第一个先上车&#xff08;离开队列&#xff09;&#xff1b; 队列的接口 队列是有如下接口的容器&#xff1…...

SpringMVC常用的三种获取请求参数的方式

在Spring MVC中&#xff0c;可以使用多种方式来获取请求参数。下面我将介绍常用的几种方式&#xff0c;并提供相关的示例代码。 1. 使用RequestParam注解获取请求参数 RequestParam注解用于从请求中获取指定名称的参数值&#xff0c;并将其绑定到方法参数上。如果请求中没有找…...

2023开学礼新疆理工学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工

2023开学礼新疆理工学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工...

数据结构----结构--线性结构--字符串

数据结构----结构–线性结构–字符串 一.字符串的定义方式 第一种&#xff1a; char* str1"Hello"第二种&#xff1a; char str2[]"Hello";区别 1.所在区域不同 //str1在常量区//str2在这里的写法是在栈区2.元素是否可改 //str1中的元素不可改//st…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...