测试用例 [软件测试 基础]
目录
测试用例
1. 概念
1.1 什么是测试用例
1.2 什么是要素
1.3 为什么需要测试用例
2. 设计测试用例的万能公式
2.1 常规思维 + 逆向思维 + 发散性思维
2.2 万能公式
3. 设计测试用例的方法
3.1 基于需求的设计方法
3.2 具体的设计方法
3.3 更多用例练习
测试用例
1. 概念
1.1 什么是测试用例
// 测试用例 (Test Case) 是为了实施测试而被测试的系统提供的一组集合, 这组集合包含: 测试环境, 测试步骤, 测试数据, 预期结果等要素
1.2 什么是要素
// 我们在编写测试用例的时候, 每个用例需要给出这些要素对应的信息
// 要素包括: 用例编号, 标题, 测试方式, 功能模块, 重要性, 测试前提, 测试环境, 测试数据, 测试步骤, 期望结果等
1.3 为什么需要测试用例
1.3.1 测试中可能会遇到很多问题, 测试用例的出现急速解决这些问题, 例如:
// 不知道是否较全面的测试了所有功能
// 测试的覆盖率无法衡量
// 对新版本的重复测试很难实施
// 存在大量冗余测试影响测试效率
1.3.2 测试用例还可以避免测试人员被迫背锅
2. 设计测试用例的万能公式
// 例如: 现在有一款产品, 要求我们对 "门锁" 设计测试用例
// 测试用例的设计, 最重要的一点就是保证功能是正确的
2.1 常规思维 + 逆向思维 + 发散性思维
// 正确设计测试用例的思想: 常规思维 + 逆向思维 + 发散性思维
// 设计测试用例的原则二 :
2.1.1 测试用例的编写不仅应当根据有效和预料到的输入情况, 而且也应该根据无效和未预料到的输入情况
2.1.2 检查程序是否 "未做其应该做的" 仅是成功的一半, 测试的另一半是检查程序是否 "做了其不应该做的"
2.1.3 计划测试工作时不应默许假定不会发生错误
2.2 万能公式
// 设计测试用例的万能公式:
// 功能测试 + 界面测试 + 性能测试 + 兼容性测试 + 易用性测试 + 安全测试
2.2.1 功能测试
// 功能测试时一个试图发现程序与其外部规则说明之间存在不一致的过程
// 从产品功能角度出发, 验证功能是否是正确的
2.2.2 界面测试
// 对软件界面上所有的内容都需要进行测试
// 界面涉及到的内容: 元素 (大小, 颜色, 形状, 材质)
// 要求: 整体界面测试界面的实现与设计图要求一致, 界面元素测试
2.2.3 性能测试
// 性能测试和功能测试的区别是: 功能测试检查软件是否做了, 性能测试测试软件做的好不好
// 通常为一些极端的情况验证功能是否是正常的
2.2.4 兼容性测试
// 软件是部署在硬件系统之上, 并依赖所需的软件环境. 软件是否能够在不同环境下正确运行需要测试人员进行验证
// 选取标准: 优先选择使用当前产品 top 级别的机型进行测试; 选择主流的浏览器/机型进行测试
2.2.5 易用性测试
// 易用性测试的标准是检查产品是否具备简单易上手的属性
2.2.6 安全测试
// 安全测试和性能测试一样都是比较大的领域
// 常见的安全问题: 隐私数据明文显示; 参数未强校验导致 SQL 注入; 越权: 普通用户也可以执行管理员权限的操作
// 除了万能公式外, 还有一个比较常用的测试类型: 弱网测试, 安装卸载测试
// 弱网测试: 主要是为了尽可能保证用户体验
// 借助抓包工具来模拟实现弱网测试 (fiddle, charles)
// 安装卸载测试: 针对需要部署的软件, 除了软件功能外, 我们还需要关注软件的能够成功完成安装和卸载
// 安装: 安装包是否可以安装, 卸载之后是否可以继续安装, 重复安装...
// 卸载: 安装完成后卸载, 安装一半后卸载, 卸载一次后继续安装继续卸载
// 测试接口: URL, 请求参数, 请求方法, 响应
3. 设计测试用例的方法
// 以下都是针对黑盒测试用例设计的测试方法
3.1 基于需求的设计方法
// 分为: 功能相关和非功能相关
// 基于新需求的设计方法也是总的设计测试用例的方法, 在工作中, 我们需要参考需求文档/产品规格说明书来设计测试用例
// 测试人员街道需求之后, 要对需求进行分析和验证, 从合理的需求中进一步分析细化需求, 从细化的需求中找到测试点.
3.1.1 明确需求中的功能点
3.1.2 结合万能公式设计测试点
3.2 具体的设计方法
3.2.1 等价类
// 依据需求将输入划分为若干个等价类, 从等价类中选出一个测试用例, 如果这个测试用例测试通过, 则认为所代表的等价类测试通过, 这样就可以用较少的测试用例达到尽量多的功能覆盖, 解决了不能穷举测试的问题
// 等价类分为: 有效等价类; 无效等价类
// 有效等价类: 满足用户需求的数据集合
// 无效等价类: 不满足用户需求的数据集合
// 如何通过等价类的方法设计测试用例: 1. 充分理解需求; 2. 划分出有效等价类和无效等价类; 3. 从有效等价类中抽取一个测试用例测试, 从无效等价类中抽取一个进行测试; 4. 组合有效等价类, 组合无效等价类
3.2.2 边界值
// 边界值包括: 边界值 + 次边界值
// 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法, 通常边界值分析法是作为对等价类划分法的补充
// 主要测试的点: 上点, 离点, 内点
// 上点: 边界上的点, 不管是开区间, 闭区间, 还是半开半闭
// 内点: 边界内的点, 不管是开区间, 闭区间, 还是半开半闭
// 离点: 边界左右的一个点, 如果是闭区间, 离点就是范围外的点, 如果是开区间, 离点就是范围内的点
// 设计测试用例的步骤: 1. 充分理解需求; 2. 找离点, 内点, 上点; 3. 针对离点, 内点, 上点设计测试用例
3.2.3 正交法
// 正交法的目的是为了减少用例数目, 用尽量少的用例覆盖输入的两两组合
// 可以使用 pairs 设计工具来设计正交表
// 步骤: 1) 在微软自带的 Excel 中输入 因素 和 水平; 2) 复制到 allpairs.exe 同级目录下的 .txt 文档中直接保存; 3) 在黑窗口输入命令 allpairs.exe 空格 .txt 文档 > 新命名一个用来保存正交表的 .txt 文档 回车
// 在根据生成好的正交表来编写测试用例的同时也要继续补全重要的测试用例
// allpairs 工具生成的正交表和实际的正交表会有一定的出入, 但是不影响整体的情况
3.2.4 判定表法
// 通过具体的方法能够将测试用例设计的更急完整和规范, 通过判定表法我们可以非常容易的编写测试用例 (思路清晰)
// 判定表是一种表达逻辑判断的工具
// 根据判定表法设计测试用例的步骤: 1) 确认需求中输入条件和输出条件; 2) 找出输入条件和输出条件之间的关系; 3) 画判定表; 4) 根据判定表编写测试用例
3.2.5 场景法
// 场景法一般包含基本流 (基本事件流) 和备用流 (备用事件流)
// 现在的软件几乎都是用事件触发来控制流程的, 实践触发时的情景形成了场景, 而同一事件不同的触发顺序和处理结果就形成了事件流
// 通过运用场景来对系统的功能点或业务流程的描述, 从而提高测试效果的一种方法
3.2.6 错误猜测法
// 对被测试软件的需求理解以及设计的理解, 过往经验以及个人直觉, 推测出软件可能存在的缺陷, 从而针对性地设计测试用例的方法
// 强调的是对测试软件的需求理解以及设计实现的细节把握, 还有个人的经验和直觉
// 和目前流行的 "探索式测试方法" 的基本思想一致, 这类方法在敏捷开发模式下的投入产出比很高, 被广泛应用于测试
3.3 更多用例练习
3.3.1 命令行程序
// 关于 Windows, Linux 系统命令设计测试用例
3.3.2 web 程序
// 使用 postman 进行测试
// postman 具体安装及使用点击下面链接跳转
// postman 安装及使用
相关文章:
测试用例 [软件测试 基础]
目录 测试用例 1. 概念 1.1 什么是测试用例 1.2 什么是要素 1.3 为什么需要测试用例 2. 设计测试用例的万能公式 2.1 常规思维 逆向思维 发散性思维 2.2 万能公式 3. 设计测试用例的方法 3.1 基于需求的设计方法 3.2 具体的设计方法 3.3 更多用例练习 测试用例 …...
树的直径 (dp或贪心)
B4016 树的直径 - 洛谷 题目大意: 给定一棵 n 个结点的树,树没有边权。请求出树的直径是多少,即树上的最长路径长度是多少。 思路: 树形 d p dp dp 求树的直径 定义 d [ x ] d[x] d[x] 表示以 x x x 节点出发走向 x x x 的…...
C++ 入门二:C++ 编程预备知识
一、使用 Qt Creator 创建 C 工程 1.1 打开软件 在计算机中找到 Qt Creator 的应用程序图标并双击打开它。如果是首次打开,可能需要进行一些初始化设置,如选择默认的开发环境等。 1.2 选择 C 工程 打开 Qt Creator 后,在欢迎界面中点击 “…...
IT管理思路
甲方CIO和IT管理者-如何做好组织级IT能力提升_哔哩哔哩_bilibili...
C++17模板编程与if constexpr深度解析
一、原理深化 1.1 模板编程 1.1.1 编译器如何处理模板(补充) 模板的实例化机制存在两种模式: 隐式实例化:编译器在遇到模板具体使用时自动生成代码,可能导致多翻译单元重复实例化,增加编译时间。显式实…...
指令层级:训练大型语言模型优先处理特权指令
指令层级:训练大型语言模型优先处理特权指令 The Instruction Hierarchy: Training LLMs to Prioritize Privileged Instructions关键要点:快速浏览:1. 引言(Introduction)2. 指令层级(The Instruction Hie…...
高效人脸关键点检测算法HRNet-Facial-Landmark-Detection
高效人脸关键点检测算法HRNet-Facial-Landmark-Detection 300 W data 数据标注格式 helen/trainset/1271089376_2.jpg,2.105,642.5,643.5,453.88947199999996,562.431791,457.882374,607.338625,471.39681399999995,655.136824,489.458724,702.023327,508.36972599999996,743.…...
LeetCode 3375 题解
题解 如题所示,允许暴力,虽然是暴力,但复杂度也就O(n) 还是如昨天的题目一样,使用Set.add的方法去判断即可 分三种情况 因为是set集合的原因,所以可以排除值相同的原因 当遍历数组有值小于k就return -1 当遍历数组遇…...
leetcode_数组 189. 轮转数组
189. 轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3输出: [5,6,7,1,2,3,4] 示例 2: 输入:nums [-1,-100,3,99], k 2输出:[3,99,-1,-100] 思…...
MySQL | 三大日志文件
Undo Log(回滚日志) 实现原理与分类 原理:Undo Log 记录的是数据修改前的旧值,通过这些旧值可以将数据恢复到修改之前的状态。它采用的是逻辑日志,即记录的是如何撤销操作,而不是物理数据的实际值。 分类…...
GIS-AI 融合引擎架构:智慧景区导览系统的毫秒级响应与千级并发优化实战
本文面向 文旅行业技术决策者、GIS 开发者、AI 算法工程师,旨在解决传统景区导览系统 定位精度低、交互体验差、运营成本高 的核心痛点,提供从技术选型到落地部署的全链路解决方案。 如需获取智慧景区导览系统解决方案请前往文章最下方获取,如…...
WSA(Windows 安卓子系统)过检测教程
windows安卓子系统WSA的root和magisk的安装教程 安卓子系统WSLWSA的rootmagisk安装 WSA(Windows 安卓子系统)过检测的方法与思路 一、引言 Windows 安卓子系统(WSA)为 Windows 用户提供了在电脑上运行安卓应用的便利。然而&…...
Spark原理及代码
一、 Spark运行架构 运行架构 Spark 框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构。 Spark 框架有两个核心组件: 1、Driver Spark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实…...
esp32cam -> 服务器 | 手机 -> 服务器 直接服务器传输图片
服务器先下载python : 一、Python环境搭建(CentOS/Ubuntu通用) 一条一条执行 安装基础依赖 # CentOS sudo yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel # Ubuntu sudo apt update && sudo apt install b…...
RHCSA Linux系统 数据流和重定向 tee 命令
一.数据流和重定向 1. 数据流 (1) 标准输入(stdin,代码 0):默认从键盘获取输入,只读。 (2) 标准输出(stdout,代码 1):命令执行正确信息默认输出到屏幕,只写…...
libev实现Io复用及定时器事件服务器
客户端和服务器都绑定在了enp2s0网卡,需要SERVER_IP和SERVER_PORT改为其ip,注意不能是127.0.0.1,因为这个是lo虚拟网口。 安装libev sudo apt-get install libev-dev客户端: #include <iostream> #include <string>…...
【项目实训项目博客】prompt初版实践
通过对camel技术的理解,我们向其中添加了市场营销角色的prompt 初版设计如下: chatchainconfig.json { "chain": [ { "phase": "DemandAnalysis", "phaseType": "SimplePhase", "max_turn_step…...
底盘---全向轮(Omni Wheel)
一、基本定义与起源 定义: 全向轮是一种通过在主轮外周安装多个 垂直于主轮轴线的横向小滚轮 实现多向移动的轮式结构。小滚轮可自由转动,允许设备在纵向(主轮驱动方向)和横向(小滚轮滚动方向)同时受力&…...
Python标准库json完全指南:高效处理JSON数据
一、json库概述 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,Python的json模块提供了JSON数据的编码和解码功能。该模块可以将Python对象转换为JSON字符串(序列化),也可以将JSON字符串转换为Python对象…...
用一个实际例子快速理解MCP应用的工作步骤
已经有很多的文章介绍MCP server,MCP Client工作原理,这里不做太多介绍。但是很多介绍都只是侧重介绍概念,实际的工作原理理解起来对初学者还是不太友好。本文以一个智能旅游咨询系统为例,详细说明在利用 Model Context Protocol&…...
Element Plus 图标使用方式整理
Element Plus 图标使用方式整理 以下是 Element Plus 图标的所有使用方式,包含完整代码示例和总结表格: 1. 按需引入图标组件 适用场景:仅需少量图标时,按需导入减少打包体积 示例代码: <template><div>…...
力扣题解:142. 环形链表 II
在链表学习中,我们已经了解了单链表和双链表,两者的最后一个结点都会指向NULL;今天我们介绍的循环列表则不同,其末尾结点指向的这是链表中的一个结点。 循环链表是一种特殊类型的链表,其尾节点的指针指向头节点&#…...
图灵逆向——题七-千山鸟飞绝
目录列表 过程分析headers头部M参数分析载荷x参数分析响应数据解密分析 代码实现 一进来还是一个无限debugger,前面有讲怎么过,这里直接过掉~ 老规矩,养成习惯,先看请求头里有没有加密参数发现好像是有个M,它是个32位…...
双相机结合halcon的条码检测
以下是针对提供的C#代码的详细注释和解释,结合Halcon库的功能和代码结构进行说明: --- ### **代码整体结构** 该代码是一个基于Halcon库的条码扫描类GeneralBarcodeScan,支持单台或双台相机的条码检测,并通过回调接口返回结果。…...
Transformer Decoder Block的几个优化方案
写在前面 在大型语言模型(LLM)的演进浪潮中,Transformer 架构凭借其强大的并行计算能力和对长距离依赖的出色捕捉,奠定了核心地位。然而,标准的 Transformer Decoder Block 遵循着一种相对固定的模式:先进行自注意力(Self-Attention)捕捉上下文信息,再通过前馈神经网…...
工业科学级天文相机:跨界融合的高精密成像解决方案
随着国内科技的快速发展,工业相机领域正悄然兴起一场"天文级"的技术革命。这类兼具工业设备可靠性与天文观测精度的特殊相机,正在半导体制造、天文观测、空间探测等领域开辟新的应用疆域。其核心技术突破不仅体现在传感器性能的提升࿰…...
颠覆传统!复旦微软联合研发MagicMotion,重新定义图生视频可能性
导读简介: 尽管基于DiT的模型在生成高质量和长视频方面表现出色,但许多文本到视频的方法在精确控制物体运动和相机运动等属性方面存在不足。因此,细粒度轨迹可控的视频生成技术应运而生,这对于在现实场景中生成可控视频至关重要。…...
华为数字芯片机考2025合集5已校正
1. 题目内容 下列选项中()不是 Verilog HDL 的关键字。() A. tri B. for C. force D. edge 解析 1. Verilog 关键字分类 Verilog 关键字是语言预定义的保留字,用于语法结构或特定功能。 2. 选项分析 选项类型说明…...
QML Loader:延迟加载与动态切换
目录 引言相关阅读工程结构LoaderDelay.qml - 延迟加载实现完整代码HeavyComponent.qml代码解析运行效果 LoaderSwitch.qml - 动态切换组件完整代码代码解析运行效果 Main.qml - 主界面实现完整代码主界面结构代码解析 总结下载链接 引言 QML的Loader组件提供了一种强大的机制…...
C语言--常用的链表操作
利用C语言实现链表,并定义一些常用的操作 文章目录 链表定义新建一个链表结点打印链表插入结点头插法(常用)运行 尾插法(使用较少)运行 返回链表长度链表转置运行 合并两个有序的链表运行 删除最小结点运行 打印倒数第…...
ngx_conf_param
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_param-CSDN博客 定义在 src\core\ngx_conf_file.c char * ngx_conf_param(ngx_conf_t *cf) {char *rv;ngx_str_t *param;ngx_buf_t b;ngx_conf_file_t conf_file;param &cf->cycle->conf…...
C++day9
思维导图 牛客练习 练习: 将我们写的 myList 迭代器里面 operator[] 和 operator 配合异常再写一遍 #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector>…...
算法题:两数相加
题目:2. 两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&a…...
SCI科学论文的重要组成部分
科学论文的核心结构 科学论文通常遵循IMRAD结构,即: 引言(Introduction)方法(Methods)结果(Results)讨论(Discussion) 除此之外,还包括其他几个关键部分。让我为您详细介绍每个部分的作用和重要性: 1. 标题(Title) 标题是论文…...
Go 微服务框架 | 路由实现
文章目录 不用框架实现web接口实现简单的路由实现分组路由支持不同的请求方式支持同一个路径的不同请求方式前缀树应用前缀树完善路由代码 不用框架实现web接口 // blog main.go 文件 package mainimport ("fmt""log""net/http" )func main() {…...
2025年AI开发学习路线
目录 一、基础阶段(2-3个月) 1. 数学与编程基础 2. 机器学习入门 二、核心技能(3-4个月) 1. 深度学习与框架 2. 大模型开发(重点) 三、进阶方向(3-6个月) 1. 多模态与智能体…...
TimescaleDB 2.19.2 发布
TimescaleDB 2.19.2 已于 2025 年 4 月 7 日发布2。此次发布是基于 PostgreSQL 的开源时序数据库 TimescaleDB 的一次更新。 从 GitHub 上的 Pull Request 信息可知,此次发布主要是将相关更改合并到 2.19.x 分支,涉及到一系列的测试和构建配置,包括不同版本 PostgreSQL(如 …...
「Unity3D」TextMeshPro中的TMP_InputField,用来实现输入框的几个小问题
第一,正确设置Scrollbar。 设置Scrollbar之后,不能设置Text Component的Font Size为Auto Size,否则Scrollbar无法正确计算显示。 那么,要想自动适配字体大小,可以让Placeholder中的Font Size设置为Auto,这…...
HTML 是什么?网页创建的核心标记语言
原文:HTML 是什么?网页创建的核心标记语言 | w3cschool笔记 HTML 是什么? HTML 是一种标记语言,用于创建网页。简单来说,HTML 就像一本魔法书,它告诉电脑如何展示网页上的内容,比如文字、图片…...
考研单词笔记 2025.04.09
act v表现,行动,做事,扮演,充当,担任,起作用n行为,行动,法案,法令 action n行为,行动 behave v表现,行事,守规矩,举止端…...
map/multimap
1.概念 map中所有元素都是pair<key,value>,key 是map的键,value 是map的值 所有元素都会根据key自动排序 map/multimap属于关联式容器,底层结构是用二叉树实现。 map和multimap区别: map不允许容器中有重复key值元素 m…...
CSS 定位属性的生动比喻:以排队为例理解 relative 与 absolute
目录 一、理解标准流与队伍的类比 二、relative 定位:队伍中 “小范围活动” 的人 三、absolute 定位:队伍中 “彻底离队” 的人 在学习 CSS 的过程中,定位属性relative和absolute常常让初学者感到困惑。它们的行为方式和对页面布局的影响较…...
基于二叉堆实现的 PriorityQueue
基于二叉堆实现的 PriorityQueue 是一种常见的数据结构,广泛用于任务调度、路径搜索、事件模拟等场景。下面我将用 Java 语言实现一个简单的基于最小堆的 PriorityQueue,即优先级最小的元素先出队。 ✅ 实现目标 使用数组实现二叉最小堆(即父…...
大模型分布式推理和量化部署
一、小常识 1、计算大模型占用多少显存 对于一个7B(70亿)参数的模型,每个参数使用16位浮点数(等于 2个 Byte)表示,则模型的权重大小约为: 7010^9 parameters2 Bytes/parameter14GB 70亿个参数…...
循环神经网络 - 长程依赖问题及改进方案
循环神经网络在学习过程中的主要问题是由于梯度消失或爆炸问题,很难建模长时间间隔(Long Range)的状态之间的依赖关系。 本文我们来学习长程依赖问题及其对应的改进方案,在这部分知识的学习过程中,我建议大家着重理解,对于数学公…...
点击抽奖功能总结
首先用户打开网页,映入眼帘的是一个输入框和一个提交按钮。当用户在输入框中输入自己的年龄并点击提交后,系统会根据输入的年龄给出相应提示。若年龄达到 60 岁,页面将显示一个新的抽奖区域,用户可以点击 “抽奖” 按钮开始抽奖。…...
AWS Bedrock生成视频详解:AI视频创作新时代已来临
💡 TL;DR: AWS Bedrock现已支持AI视频生成功能,让企业无需深厚AI专业知识即可创建高质量视频内容。本文详解Bedrock视频生成能力的工作原理、应用场景和实操指南,助你快速掌握这一革命性技术。 🎬 AWS Bedrock视频生成:改变内容创作的游戏规则 还记得几年前,制作一个专…...
理解 TOGAF®标准中的架构原则
原则是帮助组织实现其使命的基本规则和指南。它们旨在长期稳定且很少修改,在各个领域中充当决策和行动的指南针。在企业架构(EA)的背景下,原则在指导架构框架的开发和应用方面发挥着至关重要的作用。本文将探讨企业原则和架构原则…...
基于视觉密码的加密二值图像可逆数据隐藏
接下来,分享一篇论文,标题为《Multi-Party Reversible Data Hiding in Ciphertext Binary Images Based on Visual Cryptography》,由Bing Chen等人发表在《IEEE Signal Processing Letters》上。该论文提出了一种基于视觉密码学的多方可逆数…...
ubuntu22.04 中 No module named ‘_bz2‘问题解决方案
前言 本篇是介绍ubuntu22.04中 No module named ‘_bz2‘问题解决方案 网上版本很多,比如安装libbz库什么的,可能别人有用,但是我自己这边出了一堆问题 一、流程 1.1 查看bz2.xx.so文件 看自己的python版本,我新安装了个pyth…...