软件测试(测试用例详解)(三)
1. 测试用例的概念
测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合。
- 测试环境
- 操作步骤
- 测试数据
- 预取结果
测试用例的评价标准:
- 用例表达清楚,无二义性。。
- 用例可操作性强。
- 用例的输入与输出明确。一条用例只有一个预期结果。
- 用例的可维护性好。
- 用例对需求的覆盖率高。
2. 测试用例的设计方法(黑盒测试用例)
- 基于需求进行测试用例的设计
流程:
需求文档 —> 梳理需求(掌握需求)—> 针对文档设计测试用例,只是针对需求进行了大概的测试。
方法:
功能相关:
针对具体的需求,可以根据业务分类,用户角色(餐厅的会员系统)或者用户操作区域等将系统的功能分解成若干个功能模块,然后按照功能模块分别进行测试需求分析。
- 系统各个功能界面的验证(借助UI设计稿)
- 业务流程相关(借助需求规格说明书)
- 用户操作的易用性,用户体验(往往结合功能测试同时验证 )
- 功能的一致性,交互性(多功能互操作)的测试
- 系统的不同输入,结果输出的业务数据测试。
- 功能的错误操作,异常操作的测试(属于负面测试)
- 功能实现用到的算法验证,有时需要用运代码评审
非功能相关:
从测试需求分析来 看,每一类非功能特性测试都需要根据需求单独分析。他们之间可能会存在相互影响,如安全性越高, 就越有可能给易用性,性能带来更大的挑战。
- 性能
- 安全性
- 可靠性
- 兼容性
- 易维护性
- 可移植性
案例:
163邮箱注册(基于需求设计测试用例)
- 等价类法
根据需求将输入(特殊情况考虑输出)划分为若干个等价类,从等价类中选出一个测试用例,如果这个测试用例通过,则认为它所代表的等价类测试通过,这样就可以用较少的测试用例达到尽量多功能覆盖,解决了不能穷举测试用例的问题。
- 有效等价类: 满足用户需求输入集合。
- 无效等价类: 不满足用户需求的输入集合。
步骤:
- 充分理解需求
- 划分有效等价类,划分无效等价类
- 从有效等价类中抽取其中一个数据进行设计测试用例;从无效等价类中抽取其中一个进行测试用例设计。
案例:
- 边界值法
userName(string user_name) {user_name_length = user_name.lengthif(user_name_length >= 7 && user_name_length < 15) {if(user_name_length > 6 && user_name_length <15) {// 注册成功}else {// 注册失败}} }
步骤:
充分理解需求
找边界点
针对边界点设计测试用例
- 边界点 :
- 上点:边界上的点
- 内点:边界内的点
- 离点:边界值附近的一个点(闭区间外离上点最近的点,开区间区间内距离上点最近的点)。
- 因果图法
判定表
判定表是一种表达逻辑关系的工具。
判定关系:
- 与:所有的条件必须满足,如果一个条件不满足,此时结果为假。
- 或:满足其中一个条件结果为真,如果条件全部为假,结果就为假。
- 恒等:条件为真,结果一定为真
- 非:条件为假结果才为真。
如何使用因果图设计测试用例?
- 分析所有可能的输入和可能的输出
- 找出输入与输出之间的对应关系
- 画出因果图
- 把因果图转换成判定表
- 把判定表对应到每一个测试用例
案例:
假设业务单据的处理成功规则为“淘宝618活动,订单已提交,订单合计金额大于300或有红包,则进优惠”
输入:订单已提交,订单金额大于300,有红包
输出: 优惠、不优惠
- 订单已提交,金额大于300,有红包,优惠
- 订单已提交,金额大于300,没有红包,优惠
- 订单已提交,金额小于300,有红包,优惠
- . . . . . .
- 正交表法
- 什么是正交表?
- 名词:
因素:变量
水平:变量取值- 如何通过正交表设计测试用例?
- 充分理解需求
- 确定因素水平
- 画正交表
- 补充正交表
- 将正交表转换成测试用例
案例:
注册邮箱: 姓名、邮箱、密码、确认密码、验证码必须全部输入才能进行注册。
使用 allpirs 画正交表:
将因素和水平填到excel中
将excel复制并保存到一个文本文件,这里命名为:正交表test.txt 。
将文本文件移动到allpairs目录下。
打开命令行窗口,进入到allpairs目录下
输入命令,点击回车
allpairs.exe [源文件名] > [目标文件名]
6. 进入allpairs目录即可看到生成的文件
用记事本打开即可看到生成的测试用例(格式可能会乱,需要调整一下)
测试用例:
- 场景设计法
主事件流,次事件流。
案例:
ATM机取款
插卡 —> 选择语言 —> 输入密码 —> 选择业务 —> 输入取款金额 —> 等待吐钱
- 错误猜测法
依赖测试人员的经验。
3. 如何模拟弱网?
- 使用fiddler模拟弱网
打开弱网
参数调整:
第一步:
第二步:
第三步:修改参数即可
- charles
4. 如何测试接口?
- 工具:Postman
- 方法(GET/POST)
- 参数(传参数/不传参数/传入非法参数 )
- 参数格式(parameter/json)
5. 练习
- 有一个冒泡排序,针对这个代码如何测试?
- 方法参数(参数类型,不给参数,参数传递为空)
- 异常处理
- 代码规范
- 语句覆盖
- 条件覆盖
- 语句条件覆盖
- 判定覆盖
…
- Linux zip命令测试
功能:
- 打包的文件是一个不存在的文件;
- 命令使用正确,文件存在,文件是否被压缩;
- 能否一次性打包多个文件;
- 打包后的内容是否有缺失;
…界面:打包后的zip高亮;打包后的文件后缀名.zip;
…易用:
输入错误,此时有没有提示
…性能:
- 打包一个1KB文件时间是多少?
- 打包一个20G的文件;
- 一次打包多个文件;
…
- 水杯测试用例
6. 测试用例设计万能公式
功能,界面,性能,易用,兼容,安全,网络,中断…
- 功能:
- 物体: 最基本的功能
- 软件:软件的实现功能
- 界面:
- 物体:外表,材质,大小,容量…
- 软件:界面,字体大小,字体颜色,页面布局…
- 易用:(主要依赖测试人员经验)操作简单,使用流畅,人性化…
- 兼容:
- 物体:除了本职功能还有没有其他功能
- 软件:操作系统,设备,浏览器版本…
- 性能:
- 物体:使用寿命…
- 软件:响应时间,CPU占用率 ,吞吐量,并发数…
- 安全:
- 物体:材质是否有毒, 物体会不会对人体健康产生危害…
- 软件:SQL注入,xss漏洞,输入有毒脚本…
- 网络:
- 2G~5G
- 弱网
- WiFi
- …
7. 测试的分类
- 按照测试对象划分
界面测试:
- 用户直观看到的都是界面:web站,app,小程序,公众号,测试界面的时候,参考软规格说明书,UI设计稿
可靠性测试
- 可靠性= 正常运行时间/(正常运行时间+非正常运行时间)*100%
容错性测试:
- 输入异常容错, 异常操作如: 数据级测试, 校验测试, 界面容错测试
- 灾难恢复性测试: 强制让软件发生故障, 然后验证系统已保存的用户数据是否丢失,系统和数据是否能尽快恢复.
文档测试
- 包括: 测试文件, 开发文件, 产品文件
- 关注文档的术语,正确性,完整性,一致性,易用性.
兼容性测试
- 系统版本兼容
- 用户已有数据兼容
- 操作系统的兼容
- 应用平台兼容
- 浏览器的兼容
- 与第三方系统及第三方数据的兼容性
易用性测试
- 符合标准和规范
- 直观性
- 一致性
- 灵活性
- 舒适性
- 正确性
- 实用性
安装卸载测试
- 软件不同的安装卸载方式: 应用市场, 浏览器, 下载apk包, 技术脚本或命令等
- 安装兼容性: 应用是否可以在不同的环境系统及版本下安装
- 安装或卸载过程中是否可以手动暂停或取消
- 安装空间不足是系统是否有提示
- 是否可以正常卸载,及各种卸载方式
- 卸载和安装过程中出现环境问题软件是否可以正常并且合理的应对,如: 死机, 断电, 断网等.
安全性测试
- 输入域, 输入恶性或带有病毒的脚本或长字符串.
- 代码中的安全问题,如SQL/XML脚本注入
- 不安全的数据存储或传递
- 数据文件,邮件文件,系统配置文件等里面有危害系统的信息或数据.
- 有问题的访问控制及权限分配等.
- 假冒ID: 身份欺骗
- 篡改, 对数据的恶意修改,破坏数据的完整性
性能测试
- 资源泄露
- 资源瓶颈
- 线程死锁,线程阻塞
- 查询速度慢或效率低
- 受外部系统影响越来越大
衡量指标: 用户响应时间, 事务平均响应时间(TPS), 吞吐率, 每秒点击次数, 内存和CPU使用率等.
内存泄漏测试
- 人工静态法: 代码走读,人工查找未被回收的内存
- 自动工具法: 借助相应测试内存泄漏测试工具 如:Visual Leak Detector
- 按照是否查看代码划分
- 黑盒测试
- 完全不考虑程序和内部结构, 检查系统功能是否按照需求规格说明书的规定正常使用, 是否能适当的接收输入数据而输出正确的结果,满足规范的需求.
- 测试方法: 等价类, 边界值, 因果图, 场景法, 错误猜测法.
- 白盒测试
- 检查软件内部的逻辑结构, 对软件中的逻辑路径进行覆盖测试, 在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致.
- 测试方法: 语句覆盖, 判定覆盖, 条件覆盖, 判定条件覆盖, 条件组合覆盖, 路径覆盖.
- 灰盒测试
- 介于白盒测试和黑盒测试之间,多用于集成测试阶段, 不仅关注输入输出的正确性也关注程序内部的情况.
- 按照开发阶段划分
- 单元测试
- 集成测试
- 系统测试
- 验收测试
- 回归测试
- 冒烟测试
- 按照实施组织划分
- α测试
- β测试
- 第三方测试
介于开发方和用户方之间的组织的测试.
- 按照是否运行代码划分
- 静态测试
- 动态测试
- 按照是否手工划分
- 手工测试
- 自动化测试
- 按照地域划分
- 国际化测试
- 本地化测试
相关文章:

软件测试(测试用例详解)(三)
1. 测试用例的概念 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合。 测试环境操作步骤测试数据预取结果 测试用例的评价标准: 用例表达清楚,无二义性。。用例可操作性强。用例的输入与输出明确。一条用例只有…...

最优算法100例之33-字符串/数字的排列组合问题
专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 字符串/数字的排列组合问题 void dfs(int deep){if(deep == n){//输出}for(int i = 0; i < n; i++){if(flag[i] == 0){d[d…...
Java面试题:请解释Java中的多线程编程?
Java中的多线程编程允许 concurrently 执行多个线程,从而可以同时执行多个任务,提高程序的效率和响应性。在Java中,线程可以通过以下两种主要方式来实现: 继承 Thread 类实现 Runnable 接口 继承 Thread 类 class MyThread ext…...
acwing算法提高之图论--最小生成树的扩展应用
目录 1 介绍2 训练 1 介绍 本专题用来记录使用最小生成树算法(prim或kruskal)解决的扩展题目。 2 训练 题目1:1146新的开始 C代码如下, #include <iostream> #include <cstring> #include <algorithm>usin…...

政安晨:【Keras机器学习实践要点】(十七)—— 利用 EfficientNet 通过微调进行图像分类
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 本文目标: 使用 EfficientNet 和在图…...

wordpress全站开发指南-面向开发者及深度用户(全中文实操)--php函数
php函数 wordpress会封装一部分函数,比如bloginfo该函数的作用是直接调用你设置的你的网站的名称 示例 This is our amazing custom theme <?php echo 22; function myfirstfunction(){ echo 33; echo "<p>Hello ,this is my first function</…...
Linux 设备驱动管理之内核对象(Kernel Object)机制
Linux 设备驱动管理之内核对象(Kernel Object)机制 Linux内核是一个复杂的系统,它通过一系列的机制和结构体来管理和表示系统中的资源。其中一个关键的概念是“内核对象”(Kernel Object,简称kobject)。本文将深入探讨kobject机制…...
【C语言】关键字选择题
前言 题目一: 题目二: 题目三: 题目四: 题目五: 题目六: 前言 关于C语言关键字相关的选择题 题目一: 用在switch语言中的关键字不包含哪个?( ) A .continue B .break C .defa…...

营销中的归因人工智能
Attribution AI in marketing 归因人工智能作为智能服务的一部分,是一种多渠道算法归因服务,根据特定结果计算客户互动的影响和增量影响。有了归因人工智能,营销人员可以通过了解每个客户互动对客户旅程每个阶段的影响来衡量和优化营销和广告…...

ChatGPT 的核心 GPT 模型:探究其生成式预训练变换架构的革新与应用潜力
GPT(Generative Pre-trained Transformer)模型是一种深度学习模型,由OpenAI于2018年首次提出,并在随后的几年中不断迭代发展,包括GPT-2、GPT-3以及最新的GPT-4。GPT模型在自然语言处理(NLP)领域…...

Python | Leetcode Python题解之第10题正则表达式匹配
题目: 题解: class Solution:def isMatch(self, s: str, p: str) -> bool:m, n len(s), len(p)dp [False] * (n1)# 初始化dp[0] Truefor j in range(1, n1):if p[j-1] *:dp[j] dp[j-2]# 状态更新for i in range(1, m1):dp2 [False] * (n1) …...

华大单片机新建工程步骤
1.新建文件夹,比如00_LED 2.拷贝 hc32f460_ddl_Rev2.2.0\driver 到 00_LED 3.拷贝 hc32f460_ddl_Rev2.2.0\mcu\common 到 00_LED 4.拷贝 hc32f460_ddl_Rev2.2.0\example\ev_hc32f460_lqfp100_v2\gpio\gpio_output\source 到 00_LED 5.拷贝 hc32f460_ddl_Rev2.2.…...
设计模式:桥接模式
定义 桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象与实现分离,使它们可以独立地变化。在桥接模式中,抽象部分(Abstraction)包含对实现部分(Implementor)的引用,实现部分可以通过接口中的方法被抽象部分使用,但是具体的实现细节对于抽象部分来说是隐藏的…...

人脸识别:Arcface--loss+code
之前只接触过传统方法的人脸识别算法,本以为基于深度学习的方法会使用对比损失之类的函数进行训练,但是Arcface算法基于softmax进行了创新,本文未深究其详细的loss公式原理,在大致明白其方向下,运行了代码,…...

Linux-程序地址空间
目录 1. 程序地址空间分布 2. 两个问题 3. 虚拟地址和物理地址 4. 页表 5. 解决问题 6. 为什么要有地址空间 1. 程序地址空间分布 测试一下: #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h>int ga…...

adobe stock会员开通付费付款订阅充值教程/adobe stock免费白嫖一个月
登录adobe stock的官网,点击你想要下载的视频,然后点击免费下载,我们点击免费试用按钮,可以看到非常贵,需要80美金一个月,用fomepay可以免费白嫖一个月 点击获取一张虚拟信用卡,就可以白嫖一个…...

Mysql的基本命令
1 服务相关命令 命令描述systemctl status mysql查看MySQL服务的状态systemctl stop mysql停止MySQL服务systemctl start mysql启动MySQL服务systemctl restart mysql重启MySQL服务ps -ef | grep mysql查看mysql的进程mysql -uroot -hlocalhost -p123456登录MySQLhelp显示MySQ…...

leetcode.24. 两两交换链表中的节点
题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 思路 创建虚拟头节点,画图,确认步骤。 实现 /*** Definition for singly-li…...

后端开发框架Spring Boot快速入门
写在前面 推荐将本文与Spring Boot 相关知识和工具类一文结合起来看,本文为主,上面那篇文章为辅,一起食用,以达到最佳效果,当然,大佬随意。 IDEA创建Spring Boot工程 关于Spring Boot框架项目࿰…...

I2C驱动实验:验证所添加的I2C设备的设备节点
一. 简介 前面一篇文章向设备树中的 I2C1控制器节点下,添加了AP3216C设备节点。文章如下: I2C驱动实验:向设备树添加 I2C设备的设备节点信息-CSDN博客 本文对设备树进行测试,确认设备节点是否成功创建好。 二. I2C驱动实验&a…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...