软件测试之测试用例的设计
对于测试工作而言,最重要的无疑就是测试用例的设计。好的测试用例可以帮助测试人员更好更快地发现软件中的错误,对于提高产品质量意义重大。本文就是针对测试用例的设计方法。
文章目录
- 测试用例的基本要素
- 测试用例的设计
- 设计测试用例的具体方法
- 等价类划分法
- 边界值分析法
- 判定表
- 场景设计法
- 正交法
- 错误猜测法
测试用例的基本要素
在前面的文章中,已经提到了测试用例是为了实施测试而向被测试的系统提供的一组集合。一般这组集合中需要包含的几个要素分别是:测试环境、操作步骤、测试数据、预期结果等;
测试用例的设计
基于设计测试用例的目的,即为了满足用户需求,验证产品与需求是否相符。因此,一般我们可以从以下几个方面来设计测试用例;
- 功能测试:以需求文档为参考,验证产品是否实现了其应该实现的功能,是否没有实现其不应该实现的;
- 性能测试:站在用户的角度,考虑在一些极端情况下的用户体验是否友好,包括高并发量、产品的响应时间等;
- 界面测试:可以参考设计图进行,包括但不限于用户看到产品的一切像颜色、大小、材质、错别字、是否存在遮挡情况等等;
- 兼容性测试:考虑产品在不同的环境下的使用体验,像浏览器的兼容性、版本的兼容性、系统的兼容性、数据兼容性等;
- 易用性测试:同样以用户体验为主,产品是否具备了简单易上手的属性;
- 安全测试:检查产品对于用户隐私数据的保护,产品本身对用户是否安全等;
对于一件产品而言,测试用例的设计是可以牵扯到产品的方方面面的,当然也是越全面越好。上面只是提供了一些测试用例设计时可以参考的角度,因此也不必局限于设计测试用例只能从这几个方面。
这是一些有关于测试用例设计的案例,可以参考(点击此处即可跳转)
其中,在兼容性测试中可能会遇到这样的问题:产品版本和浏览器版本一定是众多的,要想达到完全测试几乎不可能,那么要如何选择测试的版本呢?
首先一定是选择大部分用户使用的版本,大家主流认可的版本使用者一定更多,而在实际的工作中其实是有数据后台可以检测到大部分用户使用的版本情况的,因此同样可以帮助我们更好的选择测试的版本;
设计测试用例的具体方法
前面有关于测试用例的设计,更多地提供的是一些设计测试用例的角度和思路,下面是设计测试用例的具体方法;
等价类划分法
一般一个程序都会有多个输入,等价类划分法就是将这些输入数据根据输入需求进行划分,等价类的划分一般分为有效等价类和无效等价类;
有效等价类即有效值的集合,一般是符合规格说明书的有意义的输入值构成的集合;
无效等价类即无效值的集合,不符合规格说明书或用户需求的集合;
以最常见的密码输入为例,规定密码长度为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…...

康耐视visionpro-机器视觉定位引导-经验总结-来自视觉人粉丝分享
1、机器人吸取电路板,移动到拍照位置,并在电路板上找一个标记点,并且,通过机器人示教把当前电路板能够准确的放入到目标位置。 2、机器人吸取电路板吸取电路板,在x,y方向进行移动,总共移动4个位置ÿ…...

包管理工具npm
一:package.json 在某个文件路径下,执行 npm init。就会生成package.json文件。大致如下: {"name": "test","version": "1.0.0","description": "测试","main": &q…...

ChatGPT正进军各行各业,抓住机遇,拥有无限的可能性。
每一个新技术的出现都会对各行各业产生冲击,但关键在于如何抓住这个机遇。ChatGPT是一项非常具有前途的技术,它可以在许多领域为人们提供更好的服务和体验。这项技术的优势之一是它可以快速而准确地理解和解释自然语言,从而使人们可以更轻松地…...

Maven 多模块管理
多模块管理简单地理解就是一个 Java 工程项目中不止有一个 pom.xml 文件,会在不同的目录中有多个这样的文件,进而实现 Maven 的多模块管理 在多人使用Maven协作开发项目时,尤其是稍微上点规模的项目,每个RD的工作都细分到具体功能…...

crash 内核调试工具 ps 指令 显示的进程状态 RU, IN, UN, ZO, ST, TR, DE, SW, WA, PA 什么意思
crash> help ps | grep "the task state" 5. the task state (RU, IN, UN, ZO ,ST, TR, DE, SW, WA, PA, ID, NE) 参考linux-4.19.113内核源码(include/linux/sched.h),有如下定义 /** Task state bitmask. NOTE! These bits…...

Spring《二》bean的实例化与生命周期
🍎道阻且长,行则将至。🍓 上一篇:Spring《一》快速入门 下一篇:Spring《三》DI依赖注入 目录一、bean实例化🍍1.构造方法 ***2.静态工厂 *使用工厂创建对象实例化bean3.实例工厂 ***使用示例工厂创建对象实…...

java与kotlin 写法区别
原文链接:https://gitcode.net/mirrors/mindorksopensource/from-java-to-kotlin?utm_sourcecsdn_github_accelerator#assigning-the-null-value Print to Console 打印到控制台 Java System.out.print("Amit Shekhar"); System.out.println("Amit…...

服务器运行深度学习代码使用指南
该内容配置均在九天毕昇下配置。 当前系统使用的linux版本为:Ubuntu 18.04 LTS。 当前版本安装的是:cuda10.1。 九天毕昇平台:https://jiutian.10086.cn/edu/#/home 一、linux下运行python的操作 ls 为列出当前目录中的文件 cd 文件名 进入…...

计算机组成原理 - 2. 数据的表示和运算
整理自天勤高分笔记,购书链接: 24 天勤高分笔记 要记住的几个数字 📓: 215327682^{15} 3276821532768 216655362^{16} 6553621665536 23121474836482^{31} 21474836482312147483648 23242949672962^{32} 4294967296232429496…...

【js】基础知识点--语句,break和continue,switch,with,for..in,do-while,while
一、break和continue语句,常用 break 语句会立即退出循环,强制继续执行循环后面的语句。而 continue 语句虽然也是立即退出循环,但退出循环后会从循环的顶部继续执行 var num 0; for (var i1; i < 10; i) {if (i % 5 0) {break;}num; …...