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

如何设计一个测试用例

  前言👀~

上一章我们介绍了什么是软件测试以及软件测试的一些基础概念,今天来聊聊如何设计一个测试用例,涉及到黑盒测试的测试方法

基于需求进行测试用例的设计

基于需求的具体设计方法

等价类

边界值

判定表法

正交表法

场景设计法

错误猜测法

如何模拟弱网?

测试用例设计万能公式


如果各位对文章的内容感兴趣的话,请点点小赞,关注一手不迷路,讲解的内容我会搭配我的理解用我自己的话去解释如果有什么问题的话,欢迎各位评论纠正 🤞🤞🤞

12b46cd836b7495695ce3560ea45749c.jpeg

个人主页:N_0050-CSDN博客

相关专栏:java SE_N_0050的博客-CSDN博客  java数据结构_N_0050的博客-CSDN博客  java EE_N_0050的博客-CSDN博客


基于需求进行测试用例的设计

首先回顾一下之前说的,需求是测试人员进行测试的依据,首先对需求进行分析是否合理是否完整,然后细化需求,从需求中提取出测试项,然后从每一个测试项从提取出测试点,然后根据测试点设计测试用例。基于需求设计测试用例属于大概的设计,而且是针对有需求文档的时候来设计测试用例,所以是针对需求进行了大概的测试,可能会出现大量的问题

功能需求测试分析:

从界面考虑:列出测试点,例如页面是否美观、页面布局是否合理、文字大小、文字格式必须正确、界面中各组件是否都正常等

从业务流程相关(需求规格说明书)考虑:列出对应的测试点,例如一个登录模块,首先手机号是否正确长度和格式是否符合要求,密码的格式等,如果没有需求规格说明书就对功能进行分析


非功能需求测试分析:

兼容性(操作系统)、性能(接口相关)、安全性(SQL注入等)、可移植性、易用性等

注意不同的项目类型对各个非功能需求是不一样的!

客户端软件:对功能要求简单,对兼容性和稳定性较低,可移植性有一定的要求

企业软件:对功能要求有一定的要求,但是整体上看,对性能,安全性,兼容性要求不高

商业软件:对功能,安全性,兼容性,可靠性等都有很高的要求


基于需求的具体设计方法

以下的内容涉及的是黑盒测试用例的设计方法!

等价类

根据需求将输入(特殊情况下会考虑输出)划分为若干个等价类,从等价类中选出一个测试用例/从每个类中抽取一个测试点,如果这个测试用例测试通过,则认为所代表的等价类测试通过,这样就可以用较少的测试用例达到尽量多的功能覆盖,解决了不能穷举测试的问题

例子:例如图书馆中的书籍分为几个大类,历史、人文、政治、经济、计算机等,我们去到历史这个区域挑选书的时候,随便挑一本书然后看看这本书属于什么类型的,如果是属于历史我们则可以等价认为这里的书都是属于历史类型的


等价类分为有效等价类和无效等价类:

有效等价类:根据需求说明书,满足需求的集合,例如账号的输入要求6-18位的数字,输入8位输入10位满足用户需求

无效等价类:根据需求说明书,不满足需求的集合,例如账号的输入要求6-18位的数字,输入20位不满足用户需求


总结:等价类就是根据需求将输入区域分为若干个等价类,然后从等价类中选出一个测试用例进行测试,测试通过则可认为是有效等价类反之无效,这也解决了不能穷举测试的问题。但是等价类只考虑输入域的分类,没有考虑输入域的组合,需要其他的设计方法和补充


等价类思想设计测试用例步骤:大前提一定是充分理解需求,然后划分有效等价类和无效等价类,然后各从中抽取一个数据设计测试用例


边界值

边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充(这个看懂就能理解了),这种情况下,其测试用例来自等价类的边界

例子:还是账号的输入要求大于6-小于等于18位的数字,输入7位-18位满足用户需求,但是输入6位呢18位呢(上点),输入7位呢输入19位呢(离点),所以引入边界值来补充等价类测试的健全

边界值设计测试用例步骤:大前提一定是充分理解需求,然后找边界点分为上点(上面的6和18)和离点(上面的7和19),然后针对上、离、内点三者各设计一个测试用例。可以看出会将等价类和边界值结合起来使用,在实际的测试设计中就是这样


判定表法

其实判定表是来源于因果图法,首先画出因果图将其转换为判定表,我觉得画因果图没什么必要所以直接叫判定表法,因果图是一种简化了的逻辑图,能直观地表明程序输入条件(原因)和输出动作(结果)之间的相互关 系。因果图法是借助图形来设计测试用例的一种系统方法,特别适用于被测试程序具有多种输入条件、 程序的输出又依赖于输入条件的各种情况

逻辑关系:其实就是&、|、==、!

与:所有条件必须满足,一个条件为假,结果就为假

或:一个条件为真结果就为真,条件都假则全假

恒等:条件为真,结果一定真

非:条件为假,结果为真

判定表法设计测试用例步骤:大前提一定是充分理解需求,确定输入条件和输出条件,找出输入条件和输出条件之间的关系,然后画判定表,根据判断表设计测试用例


使用判定表法设计测试用例可以帮助测试人员理清输入和输出的关系,但是对于比较复杂的输入和输出,会耗费大量时间


正交表法

由于判定表法设计出来的用例太多了,引出正交表法,目的是为了减少用例数目。用尽量少的用例覆盖输入的两两组合

正交表的构成:

正交表的行表示要做试验的次数,可以理解为测试用例的个数

正交表的列表示最多允许安排的因素的个数

因素数(Factors):正交表中列的个数,用C代表

水平数(Levels):任何单个因素能够取得的值的最大个数。正交表中的包含的值为从0到数“水平数-1”或从1到“水平数”,用T代表

因素:在一项试验中,凡欲考察的变量称为因素(变量),也就是需求中的变量,也可以看作是输入条件

水平:在试验范围内,因素被考察的值称为水平(变量的取值),也就是变量的取值,也可以看作是输入条件的可选项

正交表的表示形式: L=行数(水平数*因素数) L=N(TC)

正交表的性质:

每一列中,不同数字出现的次数相等,下图中的111,222,333

任意两列中数字的排列方式齐全且出现的次数相等,下图中的11,12,13、21,22,23等

正交表法设计测试用例步骤:

充分理解需求->确定因素水平->画正交表->补充正交表->将正交表转为测试用例

如何设计正交表以及如何生成正交表?

使用allpairs工具生成正交表,类似工具也可以使用微软的PICT

详细步骤:首先先在excel中把因素和水平都写出来(也可以选择直接在记事本中写),然后把这些内容拷贝到记事本中,然后把这个记事本放到你安装allpairs的路径下。接着使用cmd定位到allpairs的路径下,然后输入allpairs.exe 输入文件名 > 新的文件名(不会覆盖掉之前的)

其中~表示此时这个取值可填写也可以是不填写,并且你会发现没有生成都不填写的情况,这种情况一般不常见也没意义
 

使用allpairs工具生成正交表流程:

1.找出因素和水平

2.设计正交表和生成正交表

3.根据正交表设计测试用例

4.补充其他测试用例


场景设计法

同一事件不同的触 发顺序和处理结果就形成事件流。该方法可以比较生动地描绘出事件触发时的情景,有利于测试设计者 设计测试用例,使测试用例更容易理解和执行。通常情况需要 把用户常用的功能模块串起来进行测试的时候使用场景设计法

针对一个完整的操作流程我们可以分为主事件流和次事件流去设计测试用例

主事件流:简单理解为按主事件去执行的所有步骤

次事件流:简单理解为从主事件中任意一个步骤分支出来的一个新事件流

例子:你去ATM机取款,完整流程应该是插卡、输入密码、选择业务、输入取款金额、等待返回、取卡,然后在插卡的时候可能用户插入的卡是老人卡或者饭卡以及非本行卡等,接下来输入密码又可能输入密码错误、输入次数上限等,选择业务选择存款、查询、流水等,输入取款金额的时候非整数或ATM没这么多等,等待返回的时候出现故障,取卡出现故障,对于这些从主事件中分支出来的情况我们可以看作次事件流,我们要针对这些情况设计测试用例,保证覆盖到这些情况


错误猜测法

错误猜测法是对被测试软件设计的理解,过往经验以及个人直觉,推测出软件可能存在的缺陷,从而针对性地设计测试用例的方法。这个方法强调的是对被测试软件的需求理解以及设计实现的细节把握,还有个人的经验和直觉


如何模拟弱网?

这里我使用fidder工具演示

接着下一步

进入后往下找,一个表示上传的速度和下载的速度

测试用例设计万能公式

针对没有需求的案例设计测试用例:功能测试+界面测试+兼容性测试+性能测试+易用性测试+安全测试

以上便是本章内容关于如何设计一个测试用例,在有需求或没有需求的情况下我们该如何进行设计,下一章我们对测试进行分类讨论💕

相关文章:

如何设计一个测试用例

前言👀~ 上一章我们介绍了什么是软件测试以及软件测试的一些基础概念,今天来聊聊如何设计一个测试用例,涉及到黑盒测试的测试方法 基于需求进行测试用例的设计 基于需求的具体设计方法 等价类 边界值 判定表法 正交表法 场景设计法 …...

黄金和原油市场波动背后的经济信号

黄金市场的波动与经济数据影响 周四,黄金市场经历了一天内的剧烈波动,从早盘的高点到纽约时段的急剧下跌。现货黄金价格最初上涨至2462.29美元/盎司,但随后迅速跌至最低的2434.72美元/盎司。最终,黄金收盘价报2445.84美元/盎司&am…...

【Python数值分析】革命:引领【数学建模】新时代的插值与拟合前沿技术

目录 ​编辑 第一部分:插值的基本原理及应用 1. 插值的基本原理 1.1 插值多项式 1.2 拉格朗日插值 1.3 牛顿插值 1.4 样条插值 2. 插值的Python实现 2.1 使用 NumPy 进行插值 2.2 使用 SciPy 进行插值 2.2.1 一维插值 ​编辑 2.2.2 二维插值 3. 插值…...

PCL-基于超体聚类的LCCP点云分割

目录 一、LCCP方法二、代码实现三、实验结果四、总结五、相关链接 一、LCCP方法 LCCP指的是Local Convexity-Constrained Patch,即局部凸约束补丁的意思。LCCP方法的基本思想是在图像中找到局部区域内的凸结构,并将这些结构用于分割图像或提取特征。这种…...

git 推送时出现错误 Locking support detected on remote “origin“

背景:代码托管是局域网搭建的gitlab 按照提示配置 lfs.locksverify true 还是没有用。 网上搜索了一番,其中有人提到可能时服务器磁盘满了,连到服务器上 df -h 查看, 发现根目录已经写满了: 使用命令行: d…...

劳动仲裁经验篇【赶紧收藏】

【劳动仲裁】纯经验干货分享,点个关注防止需要时找不到! 当公司决定搞你心态,变相逼退你时,无非就那么些手段,只要你能正确应对,并做好收集证据的准备,就不住畏惧。合理利用法律的武器维护自身…...

QT多媒体编程(一)——音频编程知识详解及MP3音频播放器Demo

目录 引言 一、QtMultimedia模块简介 主要类和功能 二、QtMultimedia相关类及函数解析 QAudioInput QAudioOutput QAudioFormat QMediaPlayer QMediaPlaylist QCamera 三、音频项目实战Demo UI界面 核心代码 运行结果 四、结论 引言 在数字时代,音频…...

MySQL使用教程 最最最实用的零基础教程 直接从安装开始教!!!!

数据构成了我们日益数字化的社会基础。想象一下,从移动应用和银行系统到搜索引擎,再到如 ChatGPT 这样的先进人工智能聊天机器人,这些工具若没有数据支撑,将寸步难行。你有没有好奇过这些海量数据都存放在哪里呢?答案正…...

pycharm怎么使用Anaconda和配置

打开Anaconda Prompt 要删除 Conda 环境 yolov5sconda,你可以使用以下命令: conda remove --name yolov5sconda --all这个命令会删除名为 yolov5sconda 的整个环境,包括其中安装的所有包和依赖项。请在命令提示符或终端中运行此命令。执行此…...

android中打包apk体积优化方案

1.在配置文件AndroidManifest中新增 android:extractNativeLibs"true" 2.在模块build文件下配置支持的cpu,一般配置64的就行了,多配一种so库体积大一倍,择优。 ndk { abiFilters arm64-v8a } 3.在模块builde文件下配置混淆除去无用的资源文件 注:三种…...

Kubernetes常见的3种部署方式

Kubernetes常见的3种部署方式 1. kubeadm2. 二进制包安装3. Minikube💖The Begin💖点点关注,收藏不迷路💖 Kubernetes(K8s)作为容器编排领域的领导者,提供了多种部署方式以适应不同场景的需求。 1. kubeadm 简介:Kubernetes官方推荐的集群部署工具。特点:简单易用…...

什么情况?我代码没了

前两天检视代码时,发现PR里面有两个提交的描述信息一模一样,于是我提出应该将这两个提交合并成一个,保持提交树的清晰。 1 先储存起来! 而同事这时正在开发别的特性,工作区不是干净的,没法直接执行 git r…...

关于Unity四种合批技术详解

文章目录 一.静态合批(StaticBatching)1.启用静态合批2.举例说明3.静态合批的限制4.静态合批的优点缺点5.动态指定物品合批 二.动态合批(Dynamic Batching)1.启用动态合批2.合批规则3.举例说明4.使用限制 三.GPU Instancing1.启用GPU Instancing2.启用限制3.举例说明 四.SRP Ba…...

自定义注解+拦截器+redis限流

逻辑:写一个注解,自定义在多少秒内限制访问多少次。 自定义拦截器,对于加了注解的请求,在执行方法前。先检查有没有注解,如果有注解就将请求的ipurl拼接作为key。 查询redis中有没有该key,没有就存入&…...

Springcloud物流配送后台-计算机毕业设计源码69809

目 录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 物流配送后台系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2 数据修改流程 2.2.3 数据…...

【Java面试篇】数据埋点监控页面pv的SDK接口实现

面试题如下: 题目要求你实现一个 Monitor.counter(String code, String dim) 接口,用于监控数据统计。 具体要求: 数据聚合: 你需要按照 code 和 dim 的组合进行数据聚合, code 代表监控项的唯一标识, dim 为自定义维度。上报频率: 每分钟上报一次聚合后的数据。数据保证…...

vue3直播视频流easy-player

vue3直播视频流easy-player <script src"/easyPlayer/EasyPlayer-element.min.js"></script> easyPlayer文件下载地址 https://download.csdn.net/download/weixin_42120669/89605739 <template><div class"container"><div …...

Python笔试面试题AI答之面向对象(3)

文章目录 12.Python中OOPS是什么&#xff1f;1. 类&#xff08;Class&#xff09;2. 对象&#xff08;Object&#xff09;3. 面向对象编程的主要特性4. 面向对象编程的优点 13.解释一下Python中的继承&#xff1f;继承的基本语法继承的特性继承的类型 14. 什么是封装&#xff1…...

vulnhub靶场serial-php渗透(蜥蜴细!)

目录 一、信息收集 1.探测主机存活&#xff08;目标主机IP地址&#xff09; 2.访问web服务 3.后台目录和端口扫描 4.解析bak.zip源码 二、漏洞利用 1.构造payload 2.通过bp的repeater模块 3.get shell 4.获取反弹shell 三、提升权限 1. 查看系统版本&#xff0c;内核…...

Qt Designer,仿作一个ui界面的练习(一):界面的基本布局

初学不要太复杂&#xff0c;先做一个结构简单的&#xff0c;大致规划一下功能分区&#xff0c;绘制草图&#xff1a; 最终的效果&#xff1a; 界面主要由顶边栏、侧边栏、内容区构成。顶边栏左边是logo&#xff0c;右边是时钟显示。侧边栏最上边是切换按钮&#xff0c;用以动画…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...