软件测试(测试用例详解)(三)
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…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

































