【测试开发篇】测试用例及方法

2023-11-04


测试用例的基本要素

测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。
万能公式:功能测试+性能测试+界面测试+兼容性测试+易用性测试+安全性测试


  1. 功能测试:可能来自于需求文档,也可能来自生活经验
  2. 性能测试:功能没问题不代表性能一定好,性能往往体现在极端情况下。
  3. 界面测试:工作中参考设计图设计界面测试用例。颜色,形状,大小,材质,文字,输入框,图片,下拉框等等
  4. 兼容性测试:浏览器的兼容性,版本兼容性,系统兼容性,数据兼容性
  5. 易用性测试:软件是否具备简单易上手的属性
  6. 安全性测试:密码是否加密,数据库里是否对隐私数据加密,SQL注入

案例

水杯的测试用例
在这里插入图片描述
登陆页面测试用例
在这里插入图片描述


设计测试用例的具体设计方法

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

基于需求设计测试用例是测试设计和开发测试用例的基础。

第一步就要分析测试需求,验证需求是否正确、完整、无二义性,并且逻辑自洽。在需求正确的基础上细化测试需求,从测试需求提炼出一个个测
试点或者测试项,然后根据每一个测试点进行测试用例的设计。

在分析测试需求时,一般分为功能测试需求和非功能测试需求


下面以我们常用的百度云盘手机端为例进行分析功能
在这里插入图片描述

在进行需求分析的时候,我们还要考虑业务规则如,上传文件的大小有没有限制;一次性最多上传多少数量的文件,比如小于100个;文件夹最多有多少层等等;


等价类

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

  • 有效等价类:对于程序的规格说明书是合理的、有意义的输入数据构成的集合,利用有效等价类验
    证程序是否实现了规格说明中所规定的功能和性能
  • 无效等价类:根据需求说明书,不满足需求的集合。

等价类只考虑输入域的分类,没有考虑输入域的组合,需要其他的设计方法和补充。


边界值

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

边界值=无效边界+有效边界

  1. 输入框长度为1-11,取边界值为:1、11、12、0
  2. 运动员的参赛项目为1-3项,取边界值为:0项、1项、3项、4项
  3. 查询面页面有999行,每50行为一页,取边界值为:输出0行、1行、50行、51行、999行

判定表(因果图)

判定表(Decision table)是另一种表达逻辑判断的工具,是一种简化了的逻辑图,能直观地表明程序输入条件(原因)和输出动作(结果)之间的相互关系。判定表法是借助图形来设计测试用例的一种系统方法,特别适用于被测试程序具有多种输入条件、程序的输出又依赖于输入条件的各种情况。

在这里插入图片描述

判定表设计测试用例的步骤:

  1. 确认输入条件和输出条件
  2. 找出输入条件和输出条件之间的关系
  3. 画判定表
  4. 根据判定表编写测试用例

案例一:
假设业务单据的处理规则为:“淘宝618活动,订单已提交,订单合计金额大于300元或有红包,则为优惠订单”。

  1. 对于这条业务规则,首先通过分析所有可能的输入和可能的输出,可以得到如下结果:
    ● 输入:订单已提交、金额大于300、有红包。
    ● 输出:优惠、不优惠。
  2. 找出输入与输出之间的对应关系。通过分析,可以看出有以下的对应关系。
    (1)订单已提交,订单金额大于300元,则优惠。
    (2)订单已提交,订单金额小于等于300元,无红包,不优惠
    (3)订单已提交,有红包,则优惠。
    (4)订单已提交,订单金额大于300元,有红包,则优惠。
    (5)订单未提交,不优惠。
    (6)订单未提交,订单金额小于等于300元,无红包,不优惠
  3. 为了方便画出因果图和判定表,需要对所有输入和输出编号,现在编号如下。
    1:订单已提交。
    2:订单金额大于300元。
    3:有红包
    21:优惠
    22:不优惠
  4. 画因果图
    在这里插入图片描述
  5. 画判定表:有3个条件,输出有2个取值,所以表的列数为2x2x2=8在这里插入图片描述
  6. 根据判定表编写测试用例
    1)有红包并提交订单,则该订单为有优惠订单。
    2)金额大于300元并提交订单,则该订单为有优惠订单。
    3)有红包,金额大于300元,提交订单,则该订单为有优惠订单。
    4)有红包,金额小于300元,不提交订单,则该订单为无优惠订单。
    5)无红包,金额小于300元,不提交订单,则该订单为无优惠订单。
    6)无红包,金额小于300元,提交订单,则该订单为无优惠订单。
    7)有红包,金额大于300元,不提交订单,则该订单为无优惠订单。
    8)无红包,金额小于300元,不提交订单,则该订单为无优惠订单。

因果图需要掌握的基本知识

  • 恒等
    在这里插入图片描述
    恒等:如果原因为真,那么结果必定为真。 例如:动物园运来大熊猫,动物园一定有大熊猫

  • 在这里插入图片描述
    只有2个原因都为真,那么结果为真 例如:北京姑娘,必须有车且有房

  • 在这里插入图片描述
    2个原因中有一个为真时,结果就为真。 例如:长沙姑娘,你有车或者有房

  • 在这里插入图片描述
    只有原因为假,结果才为真。 例如:你不好好学习,找到好工作

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


场景设计法

现在的软件几乎都是用 事件 触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。该方法可以比较生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,是测试用例更容易理解和执行。

典型的应用是是用业务流把各个孤立的功能点串起来,为测试人员建立整体业务感觉,从而避免陷入功能细节忽视业务流程要点的错误倾向。

案例:
以注册为例
在这里插入图片描述
想象注册的场景来设计用例,这与根据需求的业务流来设计差不多。主要是想象各种业务流来设计用例

在这里插入图片描述


错误猜测法

错误猜测法是对被测试软件设计的理解,过往经验以及个人直觉,推测出软件可能存在的缺陷,从而针对性地设计测试用例的方法。

这个方法强调的是对被测试软件的需求理解以及设计实现的细节把握,还有个人的经验和直觉。
错误推测法和目前流行的“探索式测试方法”的基本思想一致,这类方法在敏捷开发模式下的投入产出比很高,被广泛应运于测试。

这个方法的缺点是难以系统化,并且过度依赖个人能力。

以注册为例
1、校验中特殊字符空格的处理?
2、密码校验中的大小写?
3、姓名中的特殊字符?
4、密码发送是否明文


正交排列

因果法设计用例太多怎么办?

正交法的目的是为了减少用例数目。用尽量少的用例覆盖输入的两两组合。

正交试验设计(Orthogonal experimentaldesign)是研究多因素多水平的一种设计方法,它是根据正交性由试验因素的全部水平组合中挑选出部分有代表性的点进行试验,通过对这部分试验结果的分析了解全面试验的情况,找出最优的水平组合。正交试验设计是一种 基于正交表 的、高效率、快速、经济的试验。

正交法一般用的比较少,基本不可见。

  • 因素(Factor):在一项试验中,凡欲考察的变量称为因素(变量)
  • 水平(位级)(Level):在试验范围内,因素被考察的值称为水平(变量的取值)

最简单的正交表是 L4(23)
含意如下:
“L”代表正交表;
L 下角的数字“4”表示有 4 横行,简称行,即要做四次试验;
括号内的指数“3”表示有3 纵列,简称列,即最多允许安排的因素是3 个;
括号内的数“2”表示表的主要部分只有2 种数字,即因素有两种水平1与2。

正交表的特点是其安排的试验方法具有均衡搭配特性。

正交表的构成:

  • 行数(Runs):正交表中的行的个数,即试验的次数,用N代表。对应测试用例个数。
  • 因素数(Factors):正交表中列的个数,用C代表。对应测试中的输入条件。
  • 水平数(Levels):任何单个因素能够取得的值的最大个数。正交表中的包含的值为从0到数“水平数-1”或从1到“水平数”,用T代表。对应测试中输入条件的可能选项。

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

正交表的两条性质:

  1. 每一列中各数字出现的次数相同。
  2. 任意两列中数字的排列方式齐全且均衡。
    在这里插入图片描述在这里插入图片描述
    一个正交表中也可以各列的水平数不相等,我们称它为混合型正交表,如L8(42×24
    在这里插入图片描述

根据正交表设计测试用例的步骤:

  1. 找出因素和水平
  2. 生成正交表(需要借助生成正交表的工具:allparis
  3. 根据正交表来编写测试用例
  4. 补充可能存在遗漏但是非常重要的测试用例

案例:
在这里插入图片描述
1) 找出因素和水平

  • 因素:姓名、电子邮箱、密码、确认密码、验证码
  • 水平:填写、不填写

2) 使用allparis工具生成正交表
1> 在Excel中填写因素、‘全1’ 和 ‘全0’ 情况
在这里插入图片描述
2>在allparis文件目录下,新建 txt 文件,建Excel表中的内容复制进去并保存。
在这里插入图片描述
3>打开终端,找到allparis文件路径,执行01.txt,并将正交表结果保存到新文件中。
在这里插入图片描述
这里01result.txt文件已经生成
在这里插入图片描述
在这里插入图片描述

~填写: 表示可以任意填写或者不填写
这里我们可以发现allparis生成的正交表不满足正交表的第二点性质:任意两列中数字的排列方式齐全且均衡
在这里插入图片描述
allparis生成的正交表跟实际的正交表有出入,但是不影响我们使用allparis生成正交表。

3) 根据正交表编写测试用例
在这里插入图片描述

  1. 全部填写姓名、电子邮箱、密码、确认密码、验证码
  2. 填写姓名,不填写电子邮箱、密码、确认密码、验证码
  3. 不填写姓名、密码、验证码,填写电子邮箱、确认密码
  4. 不填写姓名、电子邮箱、确认密码,填写密码、验证码
  5. 填写姓名、电子邮箱、密码,不填写确认密码、验证码
  6. 不填写姓名、电子邮箱、密码,填写确认密码、验证码

4)补充可能存在遗漏但是非常重要的测试用例

  1. 全部不填写姓名、电子邮箱、密码、确认密码、验证码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【测试开发篇】测试用例及方法 的相关文章

  • HashMap不写入数据库

    我尝试在我的数据库中写入 但只写入发件人和消息 我不明白为什么会发生这种情况 我认为问题出在我使用 sendMessage 的地方 我认为问题是我没有什么可以做的读 写其他用户的主键 我在数据库中写入消息的活动 public class M
  • 清理码头 - 删除“不必要”的东西

    我习惯用Jetty http jetty codehaus org jetty 作为我的网络容器 我对我做了什么安装步骤得到原始的焦油球并且清理一些目录和文件从中 我在这里想提出的是 您通常从 Jetty 中删除什么以在生产 登台环境中使用
  • 使用cameltestsupport进行Camel单元测试,模板始终为空

    我正在用 Camel 做一个简单的单元测试 我想做的就是从文件 在资源下 读取 JSON 内容 将其发送到 Java 类进行验证 这是我试图测试的路线 无论我做什么 模板 我用来发送正文 json 始终为空 这是我的代码 public cl
  • 如果在睡眠线程上调用interrupt()会发生什么?

    我有一个线程 然后run I call sleep 如果我中断这个线程会发生什么 MyThread extends Thread public void run try sleep 1000000 catch InterruptedExce
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • Condition 接口中的 signalAll 与对象中的 notificationAll

    1 昨天我才问过这个问题条件与等待通知机制 https stackoverflow com questions 10395571 condition vs wait notify mechanism 2 我想编辑相同的内容并在我的问题中添加
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • 主线程如何在该线程之前运行?

    我有以下代码 public class Derived implements Runnable private int num public synchronized void setA int num try Thread sleep 1
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 如何让spring为JdbcMetadataStore创建相应的schema?

    我想使用此处描述的 jdbc 元数据存储 https docs spring io spring integration docs 5 2 0 BUILD SNAPSHOT reference html jdbc html jdbc met
  • 将表值参数与 SQL Server JDBC 结合使用

    任何人都可以提供一些有关如何将表值参数 TVP 与 SQL Server JDBC 一起使用的指导吗 我使用的是微软提供的6 0版本的SQL Server驱动程序 我已经查看了官方文档 https msdn microsoft com en
  • Java 8 中函数式接口的使用

    这是来自的后续问题Java 8 中的 双冒号 运算符 https stackoverflow com questions 20001427 double colon operator in java 8其中 Java 允许您使用以下方式引用
  • RSA OAEP、Golang 加密、Java 解密 -BadPaddingException:解密错误

    我正在尝试解密使用 RSA OAEP 在 Golang 中加密的字符串 但出现 BadPaddingException 解密错误 很难弄清楚我错过了什么 这是Golang加密方法 func encryptString rootPEM io
  • 无法加载或查找主类,可以在命令行中使用,但不能在 IDE 中使用[重复]

    这个问题在这里已经有答案了 在将其标记为重复之前 请先听我说完 我正在尝试使用 gradle 导入一个 java 项目 功能齐全 适用于所有其他笔记本电脑 没有问题 我的项目 100 正常运行 适用于所有其他笔记本电脑 当我的笔记本电脑被重
  • 获取给定类文件的目录路径

    我遇到的代码尝试从类本身的 class 文件所在的同一目录中读取一些配置文件 File configFiles new File this getClass getResource getPath listFiles new Filenam
  • Java - 返回值是否会中断循环?

    我正在编写一些基本上遵循以下格式的代码 public static boolean isIncluded E element Node
  • Android Studio 将音乐文件读取为文本文件,如何恢复它?

    gameAlert mp3是我的声音文件 运行应用程序时 它询问我该文件不与任何文件类型关联 请定义关联 我选择TextFile错误地 现在我的音乐文件被读取为文本文件 我如何将其转换回music file protected void o
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • 挂钩 Eclipse 构建过程吗?

    我希望在 Eclipse 中按下构建按钮时能够运行一个简单的 Java 程序 目前 当我单击 构建 时 它会运行一些 JRebel 日志记录代码 我有一个程序可以解析 JRebel 日志文件并将统计信息存储在数据库中 是否可以编写一个插件或
  • Java &= 运算符应用 & 或 && 吗?

    Assuming boolean a false 我想知道是否这样做 a b 相当于 a a b logical AND a is false hence b is not evaluated 或者另一方面 这意味着 a a b Bitwi

随机推荐

  • 【华为OD机试python】称砝码【 2023 Q1 A卷

    题目描述 现有n种砝码 重量互不相等 分别为 m1 m2 m3 mn 每种砝码对应的数量为 x1 x2 x3 xn 现在要用这些砝码去称物体的重量 放在同一侧 问能称出多少种不同的重量 注 称重重量包括 0 数据范围 每组输入数据满足 1
  • Java多线程通信-Semaphore(信号量)

    一 semaphone 信号量 Semaphone 信号量 是一个同步工具类 用来控制同时访问某个资源的线程数量 还可以用来实现某些资源池 或者给容器添加边界 Semaphone管理着一组 虚拟 的许可 permit 许可的初始数量可通过构
  • C++中的多态——理解虚函数表及多态实现原理

    多态及其实现原理 一 多态的概念 概念 构成条件 二 虚函数的重写 重写的定义 重写的特殊情况 override和final关键字 区分重写 重载 重定义 抽象类的概念 三 多态的实现原理 父类对象模型 补充 生成默认构造方法的场景 子类对
  • Kubenetes 集群Master与Node节点

    Master节点 Kubernetes里的Master指的是集群控制节点 在每个Kubernetes集群里都需要有一个Master来负责整个集群的管理和控制 基本上Kubernetes的所有控制命令都发给它 它负责具体的执行过程 我们后面执
  • Python所有方向的学习路线图,让Python初学者少走弯路

    举个例子 如果你要学习爬虫 那么你就去学Python爬虫学习路线图上面的知识点 这样学下来之后 你的知识体系是比较全面的 比起在网上找到什么就学什么 容易造成重复学 有时候也会学到一些用处不大的东西 还有一点就是 有了学习路线图 你就能够明
  • Vue 并排放置两个div的写法

    Vue的开发文档 Layout布局模块 https element eleme cn zh CN component select 样例 使用
  • 华为OD机试 - 等和子数组最小和(Java)

    题目描述 给定一个数组nums 将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 组内元素和的最小值 输入描述 第一行输入 m 接着输入m个数 表示此数组nums 数据范围 1 lt m lt 50 1 lt nums i lt
  • MySQL高级学习笔记

    目录 1 MySQL数据库逻辑架构 1 网络连接层 2 服务层 MySQL Server 1 连接池 Connection Pool 2 系统管理和控制工具 Management Services Utilities 3 SQL接口 SQL
  • 信息系统、课设、毕设

    信息系统 课设 毕设 可使用技术 后端 PHP Node js等 前端 jQuery vue等 UI layui elementui等 数据库 SQLserver MySQL等 APP uniapp等 适合 进销存ERP系统 商城 网站 A
  • mac卸载idea

    idea只有30天的试用期 比较穷 买不起正版 又不想用破解 是因为发现破解的版本写代码的时候反应好迟钝 一个报红的问题修复后半天还不好 到期了只能完全卸载重新装一遍 这样也还有个好处 能用最新版 一直在追求最新版的路上 给像我一样的强迫症
  • C语言:格式化输入输出函数

    C语言 格式化输入输出函数 1 格式化输出函数 printf 2 格式化输入函数 scanf C语言提供的格式化输入输出函数的原型在头文件stdio h中声明 在使用时应在程序头部包含该文件 include
  • 安卓Unity3D Camera图像和音频采集推送代码

    安卓Unity3d 可以使用ReadPixels从当前Render Target读取图像 音频可以从AudioClip读取 具体调用GetData接口 读取到的可能是float类型 有些音频编码器可能需要sint16格式 这需要做一个转换
  • 数据处理方法:归一化与标准化处理

    在数据挖掘中 在建模前需要对数据进行预处理 预处理方法包括归一化与标准化 对数据进行缩放 1 归一化 Normalization 将数据缩放到0 1之间 线性 常用 归一化 最大最小值归一化 y x
  • mysql jdbc配置重连_Spring Boot 配置MySQL数据库重连的操作方法

    使用jdbc连接MySQL 如果连接失效 可能会报类似的错误 com mysql jdbc exceptions jdbc4 CommunicationsException The last packet successfully rece
  • 预训练模型--GPT

    why预训练 finetune 目前在nlp领域 比较流行的一种方式就是 pretrain finetune 为什么是这种模式呢 在nlp领域大量数据是无标签的 只有小量数据是有标签的 而大量数据可以帮助模型获得更好的效果 泛化能力 所以在
  • Android大文件上传秒传之实战篇

    源码传送门 在上一篇文章我们介绍了获取大文件的一个唯一的特征值MD5 通过MD5我们可以唯一的标识一个文件 并可以实现秒传效果 今天的这篇文章主要介绍大文件的上传操作 当然谈到上传文件 网络是必不可少的 现在也有很多较为流行的网络框架 如v
  • Jsp邮件找回密码全攻略

    author Joy zhuang 一般大型网站我们登录的时候 密码忘了都有个功能可以找回密码 细数下大致的方法 1 直接把密码发送到你的邮箱去 一般是临时密码 2 短信验证 成本较高 3 密保问题 4 发送一个链接到你邮箱点击即可更改密码
  • 【C++入门】C++的异常管理机制介绍

    1 什么是异常 1 异常可以理解成可能导致程序不能正常运行的情况 或者说不希望发生的情况 2 异常的发生是可不预知的 我们不知道何时会发生何种异常 要是我们提前知道就处理了 3 所以我们在写程序时 就需要考虑将来程序运行时可能遇到的异常情况
  • pysot-新手跑代码遇到的问题及解决方法

    1 不管干什么首先得把文件夹加入到python的搜索路径 不然会import失败的 set PYTHONPATH PYTHONPATH D 3 Object tracking pysot master windos下 export PYTH
  • 【测试开发篇】测试用例及方法

    文章目录 测试用例的基本要素 案例 设计测试用例的具体设计方法 基于需求进行测试用例的设计 等价类 边界值 判定表 因果图 场景设计法 错误猜测法 正交排列 测试用例的基本要素 测试用例 Test Case 是为了实施测试而向被测试的系统提