软件测试之测试用例的设计
对于测试工作而言,最重要的无疑就是测试用例的设计。好的测试用例可以帮助测试人员更好更快地发现软件中的错误,对于提高产品质量意义重大。本文就是针对测试用例的设计方法。
文章目录
- 测试用例的基本要素
- 测试用例的设计
- 设计测试用例的具体方法
- 等价类划分法
- 边界值分析法
- 判定表
- 场景设计法
- 正交法
- 错误猜测法
测试用例的基本要素
在前面的文章中,已经提到了测试用例是为了实施测试而向被测试的系统提供的一组集合。一般这组集合中需要包含的几个要素分别是:测试环境、操作步骤、测试数据、预期结果等;
测试用例的设计
基于设计测试用例的目的,即为了满足用户需求,验证产品与需求是否相符。因此,一般我们可以从以下几个方面来设计测试用例;
- 功能测试:以需求文档为参考,验证产品是否实现了其应该实现的功能,是否没有实现其不应该实现的;
- 性能测试:站在用户的角度,考虑在一些极端情况下的用户体验是否友好,包括高并发量、产品的响应时间等;
- 界面测试:可以参考设计图进行,包括但不限于用户看到产品的一切像颜色、大小、材质、错别字、是否存在遮挡情况等等;
- 兼容性测试:考虑产品在不同的环境下的使用体验,像浏览器的兼容性、版本的兼容性、系统的兼容性、数据兼容性等;
- 易用性测试:同样以用户体验为主,产品是否具备了简单易上手的属性;
- 安全测试:检查产品对于用户隐私数据的保护,产品本身对用户是否安全等;
对于一件产品而言,测试用例的设计是可以牵扯到产品的方方面面的,当然也是越全面越好。上面只是提供了一些测试用例设计时可以参考的角度,因此也不必局限于设计测试用例只能从这几个方面。
这是一些有关于测试用例设计的案例,可以参考(点击此处即可跳转)
其中,在兼容性测试中可能会遇到这样的问题:产品版本和浏览器版本一定是众多的,要想达到完全测试几乎不可能,那么要如何选择测试的版本呢?
首先一定是选择大部分用户使用的版本,大家主流认可的版本使用者一定更多,而在实际的工作中其实是有数据后台可以检测到大部分用户使用的版本情况的,因此同样可以帮助我们更好的选择测试的版本;
设计测试用例的具体方法
前面有关于测试用例的设计,更多地提供的是一些设计测试用例的角度和思路,下面是设计测试用例的具体方法;
等价类划分法
一般一个程序都会有多个输入,等价类划分法就是将这些输入数据根据输入需求进行划分,等价类的划分一般分为有效等价类和无效等价类;
有效等价类即有效值的集合,一般是符合规格说明书的有意义的输入值构成的集合;
无效等价类即无效值的集合,不符合规格说明书或用户需求的集合;
以最常见的密码输入为例,规定密码长度为8-18位的数字,有效等价类和无效等价类的划分如下:
等价类划分成功以后,就可以进行测试用例的编写了:
- 输入长度为8~18位的密码,具体测试数据563368368;
- 输入长度小于8位的密码,2345;
- 输入长度大于18位的密码,56638649636478467793646447;
- 输入非数字的密码,sghtesh;
边界值分析法
边界值分析法就是针对输入或输出的边界值进行测试的方法,它更多的是一种对等价类划分法的补充测试;
同样以上面密码输入为例,使用边界值分析法对测试用例进行补充:
- 输入长度为7位的密码,4563245;
- 输入长度为8位的密码,78564390;
- 输入长度为18位的密码,542398540981234567;
- 输入长度为19位的密码,4327856419076423162;
一般情况下的边界值是有效边界+无效边界;
判定表
判定表是一种常见但不常用的测试用例设计方法,更多地使用在输入条件的组合会对应不同结果的场景;
使用判定表设计测试用例可以参考下面的步骤进行:
- 确认输入条件与输出条件;
- 寻找输入条件与输出条件之间的关系;
- 画判定表;
- 根据判定表编写测试用例;
以淘宝购物时的优惠活动为例,当用户提交的订单使用了红包或者订单金额大于500元,认定此订单为优惠订单;
根据判定表编写测试用例:
- 有红包,订单金额大于500,提交订单,为优惠订单;
- 有红包,订单金额不大于500,提交订单,为优惠订单;
- 有红包,未提交订单,为非优惠订单;
- 无红包,订单金额大于500,为优惠订单;
- 无红包,订单金额大于500,未提交订单,为非优惠订单;
- 无红包,订单金额不大于500,提交订单,为非优惠订单;
- 有红包,订单金额大于500,未提交订单,为非优惠订单;
- 无红包,订单金额不大于500,未提交订单,为非优惠订单;
场景设计法
场景由事件触发而形成,产品的使用又一定会有事件的触发,因此经同一事件不同的触发顺序和处理结果就形成了事件流。场景设计法其实就是通过对事件触发时情景的描绘来设计测试用例。
实际就是使用业务流程将产品的各个孤立的功能点串起来,可以避免测试陷入功能细节而忽略业务流程结构的误区;
事件流有基本事件流与备选事件流;
以使用ATM取款为例,基本事件流为程序执行正常时的情况,但也不可避免地会出现备选事件流中的故障,备选事件流是根据实际使用ATM取款时设计的,这就是场景设计法的运用;
根据上面的事件流编写测试用例:
- 基本事件流的用例:首先插卡,选择取款功能,输入卡的密码,选择要取款的金额,进行取钞操作,退卡;
- 备选事件流的用例:
- 插入卡时插入不进去;
- 插入卡之后,无法选择取款操作;
- 插入卡,选择取款操作,输入密码时输入错误;
- 插入卡,选择取款操作,输入密码,选择取款金额,金额不符合要求;
- 插入卡,选择取款操作,输入密码,选择合适的取款金额,等待ATM吐钞失败;
- 插入卡,选择取款操作,输入密码,选择合适的取款金额,待吐钞之后取钞,退卡时不成功;
场景设计法主要是一种思路引导的作用,在设计测试用例时,不仅要基于需求文档进行基础测试,还应该尽可能地考虑到在实际使用中可能会出现的情况;
正交法
前面我们使用判定表的方式来设计测试用例,但判定表的方式有可能会得到很多测试测试,其中不乏有一些是不太必要的。因此我们使用正交法来尝试解决这个问题;
正交法是一种对试验元素的水平组合进行试验,通过试验结果分析了解全面试验的情况,最终找出最优的水平组合;
正交法的目的就是为了减少用例数目,用尽量少的用例覆盖更多的输入组合情况;
正交试验设计是一种基于正交表的高效率且快速经济的试验;
关于正交法的几个概念:
因素:需要被考察的变量;
水平:因素可能的取值;
以网站的注册操作为例,演示正交法设计测试用例的步骤(使用allparis生成正交表):
-
确定试验的因素和水平都有哪些;
因素:用户名、电话号码、验证码、密码、确认密码;
水平:每个因素的水平都为填写和未填写; -
将水平和因素写入excel;
- 在allparis同级目录下创建一个新的txt文件,复制前面excel中的内容,直接保存;
- 使用allparis生成正交表(使用cmd操作);
这里重定向指定的文件(保存正交结果的文件)可以是在该目录下不存在的;
打开保存结果的文件,就可以看到生成的正交结果了:
- 利用正交表每一行的各因素水平的组合为一个测试用例,最后可以增加有必要但正交表中不存在的测试用例;
然后就可以使用生成的正交表编写测试用例啦;
- 用户名、电话号码、验证码、密码、确认密码都填写;
- 只填写用户名,其他未填写;
- 只填写电话号码和密码,其他未填写;
- …(~表示此处选项可以为任意值,不影响测试结果);
正交表的两条性质:
每一列中不同的选项出现的次数相等;
任意两列中的各有序选项出现的次数齐全且均衡;
错误猜测法
错误猜测法是建立在测试人员对产品设计的理解上,更多地是依赖测试人员的工作经验和积累来设计测试用例;
设计测试用例是测试人员测试工作中重要的一环,一个好的测试用例应该是对于一个不熟悉业务的人也能够根据用例来进行测试;而一组好的测试用例则是尽可能多的覆盖产品使用的各种情况。
over!
相关文章:

软件测试之测试用例的设计
对于测试工作而言,最重要的无疑就是测试用例的设计。好的测试用例可以帮助测试人员更好更快地发现软件中的错误,对于提高产品质量意义重大。本文就是针对测试用例的设计方法。 文章目录测试用例的基本要素测试用例的设计设计测试用例的具体方法等价类划分…...

MySQL安装与配置(保姆级教程)
MySQL安装 我们进入Mysql的官网进行下载MySQL Community Edition(GPL),这里我们以8.0.32.0版本为例,点击下面进行下载: MySQL Community Edition(GPL) 此时我们选择下面一个32位(64位的系统也选他),上面那个是在线安装等待时间比较长 当然我们…...
MATLAB算法实战应用案例精讲-【元启发式算法】随机蛙跳跃算法(SFLA)(附matlab代码实现)
目录 前言 知识储备 多目标优化问题 多目标元启发式优化方法 算法原理 数...

内网穿透:远程访问内网IP中的电脑
需求:家里电脑在路由器内网中,能连外网。想在外地时能ssh(也即vscode)访问家里的电脑。 家里电脑系统:win11(Ubuntu流程也一模一样) 具体流程 家里电脑下载【花生壳】内网穿透软件并登录&#…...
day4 selenium爬取数据总结
day4 selenium爬取数据 一、selenium基本操作 导入相关模块: from selenium.webdriver import Chrome(一)、创建浏览器对象 b Chrome()(二)、打开网页(需要爬取哪个页面的数据就打开该页面对应的网页地址) 案例:爬取豆瓣电影…...

信息收集之WAF绕过
信息收集之WAF绕过前言一、工具进行目录扫描1. 工具的下载2. 工具的使用二、Python代码进行目录扫描前言 对于web安全无WAF的信息收集,大家可以查看如下链接的文章: web安全之信息收集 对于有WAF信息收集,看如下所示:(…...

从数据到智慧,TOOM舆情监测系统让你的决策更加精准!
当今社会信息化程度日益提高,网络平台已成为人们获取最新信息的主要途径,无论是个体还是组织、政府还是企业,都需要通过各种手段及时了解社会舆情,把握市场动态,调整经营策略。而舆情监测系统无疑是这些手段中最为有效…...

ChatGPT中文版网页插件-如何体验chatGPT
ChatGPT中文版网页插件 目前,OpenAI的ChatGPT并没有官方提供中文版的网页插件,但是,一些第三方网站和开发者已经开始提供一些针对中文的自然语言处理和对话机器人服务。以下是其中一些例子: 问答机器人: 像小蛮腰和小…...

Docker的网络模式
Docker常见的几种网络模式 docker network ls 查看使用了哪些网络 [rootcentos8-nat-168-182-152 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE c0184302f6a8 bridge bridge local 420492e04276 host host local …...

基于vue3.2、three实现地图在地图加载
基于vue3.2、three实现地图在地图加载code效果预览地址code 在这里插入代码片 import { ref, onMounted } from "vue"import * as THREE from "three"; import Earth from "./textures/Earth.png" import EarthSpec from "./textures/Eart…...

【C++】---优先级队列 仿函数
文章目录优先级队列介绍优先级队列使用仿函数优先级队列模拟实现优先级队列介绍 优先队列是一种容器适配器 ,它的底层实现是堆,虽然它的名字里面有队列,但它并没有队列先进先出的特性 优先级队列定义在头文件中,其模板参数有三个…...
图的遍历算法
图的遍历1.连通图的深度优先搜索1.1. 递归1.2.非递归2.连通图的广度优先遍历3. 非连通图的深度(广度)优先遍历1.连通图的深度优先搜索 算法思想:从图中某个顶点vi出发,访问此顶点,然后依次从v1的各个未被访问的邻接点…...
【蓝桥杯集训·每日一题】 AcWing 3996. 涂色
文章目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解三、知识风暴区间DPUnique函数一、题目 1、原题链接 3996. 涂色 2、题目描述 有 n 个砖块排成一排,从左到右编号为 1∼n。 其中,第 i 个砖块的初始颜色为 ci。 …...

人工智能中的Web端编程
Java是当前的主流编程语言之一,常年稳居TIOBE编程语言排行榜前五。Java的使用领域非常广泛,包括了桌面端编程、Web端编程、移动端编程等几乎所有的编程领域。Java是Web端编程使用最广泛的编程语言之一。要学习Web端编程,需要了解Java语言的知…...

jsp+mysql+J2EE校园自行车租赁系统cdA1A2程序
本系统的具体功能有以下六项: 1、用户信息管理模块:用户需要注册成为本网站的用户,同时修改自己的用户资料,在必要时修改自己的登陆密码。 2、车辆查询模块:用户可以根据自己的要求,按照不同的查询方式来查询自己想要的…...

当营养遇上肠道菌群:探究其对儿童健康的影响
谷禾健康 越来越多的证据表明,肠道菌群定植紊乱和微生物多样性减少与全球非传染性疾病 (NCD) 的增加有关。影响儿童和青少年的非传染性疾病包括肥胖及其相关合并症、自身免疫性疾病、过敏性疾病和哮喘。饮食变化也与非传染性疾病的发病机制有关,并且由于…...

vue尚品汇商城项目-day01【4.完成非路由组件Header与Footer业务】
文章目录4.完成非路由组件Header与Footer业务4.1使用组件的步骤(非路由组件)本人其他相关文章链接4.完成非路由组件Header与Footer业务 在咱们项目开发中,不在以HTML CSS 为主,主要搞业务、逻辑 开发项目的流程: (1)…...

IDEA安装教程(图文详解,一步搞定)
文章目录第一步:官网下载IDEA第二步:卸载旧的IDEA(没有则跳过)第二步:安装IDEA第一步:官网下载IDEA 地址:https://www.jetbrains.com/idea/download/other.html 第二步:卸载旧的I…...

【01 DualCam Porting】
1、配置camera_custom_stero_setting.h a、增加sensor配置 /vendor/mediatek/proprietary/custom/mt6765/hal/camera/camera_custom_stereo_setting.h注意: 1)IMGOYUV Size:在有FOV crop的情况下,不能配置为sensor full size,建议比full size 小或者配置为fov crop的值…...
redis --- string类型的使用
目录 一、string类型使用 1.1、set key value参数解析 1.2、同时设置/获取多个键值 1.3、获取/设置指定区间范围内的值 1.4、数值增减 1.5、获取字符串长度和内容追加 1.6、分布式锁 1.7、getset(先get再set) 一、string类型使用 1.1、set key value参数解析 SET key v…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...