【测试理论和实践 4.测试用例】
目录
一、测试用例的概念
1.概念
⭐设计测试用例的原则一
为什么需要测试用例呢,不写测试用例可以进行测试吗?
二、设计测试用例的万能公式
1.常规思考 + 逆向思维 + 发散性思维
⭐设计测试用例的原则二:
2.万能公式
Ⅰ、功能测试
Ⅱ、界面测试
Ⅲ、性能测试
Ⅳ、兼容性测试
Ⅴ、易用性测试
Ⅵ、安全测试
Ⅶ、弱网测试
Ⅷ、安装卸载测试
三、设计测试用例的方法
1.基于需求的设计方法
Ⅰ、明确需求中的功能点
Ⅱ、结合万能公式设计测试点
2.具体的设计方法
Ⅰ、等价类
① 等价类分类
② 根据等价类设计测试用例的方式
Ⅱ、边界值
Ⅲ、场景法
根据场景法设计测试用例的步骤
Ⅳ、正交法
Ⅴ、判定表法
根据判定表法设计测试用例的步骤:
Ⅵ、错误猜测法
Ⅶ、”登录功能“设计测试用例
你透支我似水年华里的太多,
我的爱,我的眼泪,
我的所有感性部分,
我甘愿,我竟然说我甘愿。
—— 25.10.28
一、测试用例的概念
1.概念
测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。
⭐设计测试用例的原则一
测试用例中一个必需部分是对预期输出或结果进行定义
为什么需要测试用例呢,不写测试用例可以进行测试吗?
测试中可能会遇到很多问题,诸如:
• 不知道是否较全面的测试了所有功能
• 测试的覆盖率无法衡量
• 对新版本的重复测试很难实施(即回归测试无法仅通过人工测试的方式进行历史功能的回归)
• 存在大量冗余测试影响测试效率
测试用例的出现就是解决这些问题。另外,测试用例的作用还可以避免测试人员被迫背锅。
二、设计测试用例的万能公式
1.常规思考 + 逆向思维 + 发散性思维
正确设计测试用例的思想:常规思维+逆向思维+发散性思维
⭐设计测试用例的原则二:
1.测试用例的编写不仅应当根据有效和预料到的输入情况,而且也应该根据无效和未预料到的输入情况。
2.检查程序是否“未做其应该做的”仅是成功的一半,测试的另一半是检查程序是否“做了其不应该做的”。(是上一条原则的必然结果)
3.计划测试工作时不应默许假定不会发现错误。
2.万能公式
⭐设计测试用例的万能公式:功能测试 + 界面测试 + 性能测试 + 兼容性测试 + 易用性测试 + 安全测试。
Ⅰ、功能测试
从产品功能角度出发,验证功能是否是正确的。
Ⅱ、界面测试
肉眼可以看到的部分都称为界面,界面涉及到的内容:元素(大小、颜色、形状、材质)都需要测试
Ⅲ、性能测试
性能测试和功能测试的区别是:功能测试检查软件是否做了,而性能测试测试软件做的好不好。通常为一些极端的情况。
Ⅳ、兼容性测试
不同版本(软件、系统)浏览器的兼容性
Ⅴ、易用性测试
是否具备简单易上手的属性(引导提示教程)
Ⅵ、安全测试
是否具备危险材质、气味(硬件),脱敏展示、接口响应数据也要考虑用户数据的安全性,登陆场景也需要将秘密进行加密展示。数据存储用户隐私数据是否加密、SQL注入、越权
示例 —— 水杯测试用例

除了上述的万能方式以外,还有一些特殊的测试场景
Ⅶ、弱网测试
弱网测试的目的就是尽可能保证用户体验,为了覆盖更多的网络场景,关键的指标点包括:
页面响应时间是否可以接受,关注包括热启动、冷启动时间、页面切换、前后台切换、首字时间,首屏时间等。
页面呈现是否完成一致。
超时文案是否符合定义,异常信息是否显示正常。
是否有超时重连。
安全角度:是否会发生dns劫持、登陆ip更换频繁、单点登陆异常等。
大流量事件风险:是否会在弱网下进行更新apk包、下载文件等大流量动作。
借助工具来模拟实现弱网测试(fiddler):
① 打开弱网设置选项:Performance ——> Simulate Modern Speeds
② 打开设置弱网的脚本:Customize Rules
③ 打开弱网设置:m_SimulateModern,设置上行速率和下行速率,数字越大传输越慢
Ⅷ、安装卸载测试
针对需要进行部署的软件,除了软件功能外,我们还需要关注软件的能够成功安装和卸载
三、设计测试用例的方法
1.基于需求的设计方法
基于需求的设计方法也是总的设计测试用例的方法,在工作中,我们需要参考需求文档/产品规格说明书来设计测试用例。
测试人员接到需求之后,要对需求进行分析和验证,从合理的需求中进一步分析细化需求,从细化的需求中找出测试点,根据这些测试点再去设计测试用例。
以该注册邮箱账号需求为例,我们来设计测试用例。
Ⅰ、明确需求中的功能点
Ⅱ、结合万能公式设计测试点
⭐设计测试用例的万能公式:功能测试 + 界面测试 + 性能测试 + 兼容性测试 + 易用性测试 + 安全测试。
示例:

以上根据需求文档先设计初步的测试用例,而部分的测试用例还需要细化
2.具体的设计方法
Ⅰ、等价类
依据需求将输入(特殊情况下会考虑输出)划分为若干个等价类,从等价类中选出一个测试用例,如果这个测试用例测试通过,则认为所代表的等价类测试通过,这样就可以用较少的测试用例达到尽量多的功能覆盖,解决了不能穷举测试的问题。
① 等价类分类
• 有效等价类:对于程序的规格说明书是合理的、有意义的输入数据构成的集合,利用有效等价类验证程序是否实现了规格说明中所规定的功能和性能
• 无效等价类:根据需求说明书,不满足需求的集合。
② 根据等价类设计测试用例的方式
确定有效等价类和无效等价类
编写测试用例,设计具体测试数据
缺点:等价类只考虑输入域的分类,没有考虑输入域的组合,需要其他的设计方法和补充。
Ⅱ、边界值
边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。
边界值包含:边界值+次边界值
边界值即给定范围的左数据和右数据
选择次边界值的时候需要根据边界值的有效无效情况来定
① 若边界值为有效等价类中的数据,则次边界值为无效等价类中的边界
② 若边界值为无效等价类中的数据,则次边界值为有效等价类中的边界

Ⅲ、场景法
现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。
通过运用场景来对系统的功能点或业务流程的描述,从而提高测试效果的一种方法。用例场景来测试需求是指模拟特定场景边界发生的事情,通过事件来触发某个动作的发生,观察事件的最终结果,从而用来发现需求中存在的问题。我们通常以正常的用例场景分析开始,然后再着手其他的场景分析。场景法一般包含基本流和备用流,从一个流程开始,通过描述经过的路径来确定的过程,经过遍历所有的基本流和备用流来完成整个场景。场景主要包括4种主要的类型:正常的用例场景,备选的用例场景,异常的用例场景,假定推测的场景。
根据场景法设计测试用例的步骤
1.确定基本流
2.确定备选流
3.根据备选流补充测试用例
4.编写测试用例
Ⅳ、正交法
正交法的目的是为了减少用例数目。用尽量少的用例覆盖输入的两两组合。
L+行数(水平数^因素数):L12(2^11)
正交表的构成:因素数、水平数、行数。
因素:对指标的影响条件,通常是正交表中的一列。
水平:因素对应的可选项。

正交表的性质:每一列中,不同的数字出现的次数相等。任意两列中数字的排列方式齐全而且均衡
根据正交表的性质,一般人很难通过手动设计出正交表,
正交法设计测试用例的步骤:
1. 根据需求找到因素和水平
2. 用allparis工具生成正交表
a. 将因素和水平写入Excel表格中
b. allparis目录下创建新的文本文件new.txt,复制Excel中的因素和水平,直接粘贴到文本中保存并退出
c. 使用allparis命令生成正交表:allparis.exe new.txt > zhengjiao.txt
3. 根据正交表编写测试用例
4. 继续补充遗漏的重要测试用例
正交试验设计(Orthogonal experimentaldesign)是研究多因素多水平的一种设计方法,它是根据正交性,由试验因素的全部水平组合中挑选出部分有代表性的点进行试验,通过对这部分试验结果的分析了解全面试验的情况,找出最优的水平组合。正交试验设计是一种基于正交表的,高效率、快速、经济的试验。
Ⅴ、判定表法
通过具体的方法能够将测试用例设计的更加完整和规范。
根据判定表法设计测试用例的步骤:
1. 确认需求中输入条件和输出条件
2. 找出输入条件和输出条件之间的关系
3. 画判定表
4. 根据判定表编写测试用例
Ⅵ、错误猜测法
错误猜测法是对被测试软件设计的理解,过往经验以及个人直觉,推测出软件可能存在的缺陷,从而针对性地设计测试用例的方法。
这个方法强调的是对被测试软件的需求理解以及设计实现的细节把握,还有个人的经验和直觉。
错误推测法和目前流行的“探索式测试方法”的基本思想一致,这类方法在敏捷开发模式下的投入产
出比很高,被广泛应用于测试。
这个方法的缺点是难以系统化,并且过度依赖个人能力。
Ⅶ、”登录功能“设计测试用例
1.明确需求
2.使用万能公式 + 测试用例方法设计测试用例
3.按照测试用例对系统进行测试
4.记录测试
登录功能测试用例设计与执行
1. 明确需求
功能需求
-
用户可以通过用户名/邮箱/手机号和密码登录系统
-
登录成功后跳转到首页或指定页面
-
登录失败给出明确错误提示
-
支持记住密码功能
-
支持验证码机制防止暴力破解
-
支持忘记密码功能
非功能需求
-
安全性:密码加密传输、防止SQL注入、防暴力破解
-
性能:登录响应时间在2秒以内
-
兼容性:支持主流浏览器和移动设备
-
用户体验:界面友好,错误提示清晰
2. 使用万能公式 + 测试用例方法设计测试用例
Ⅰ、功能测试
使用等价类划分法
用户名输入框:
- 有效等价类:已注册用户名、正确邮箱格式、正确手机号格式
- 无效等价类:未注册用户名、错误邮箱格式、错误手机号格式、空值、特殊字符
密码输入框:
- 有效等价类:正确密码(6-20位字符)
- 无效等价类:错误密码、空密码、超短密码(<6位)、超长密码(>20位)
| 用例ID | 测试方法 | 测试场景 | 输入数据 | 预期结果 |
|---|---|---|---|---|
| FUN_001 | 等价类 | 有效用户名+有效密码 | 正确用户名+正确密码 | 登录成功,跳转首页 |
| FUN_002 | 等价类 | 无效用户名+有效密码 | 未注册用户+正确密码 | 提示"用户名或密码错误" |
| FUN_003 | 等价类 | 有效用户名+无效密码 | 正确用户名+错误密码 | 提示"用户名或密码错误" |
| FUN_004 | 等价类 | 空用户名 | 用户名为空+任意密码 | 提示"请输入用户名" |
| FUN_005 | 等价类 | 空密码 | 正确用户名+密码为空 | 提示"请输入密码" |
使用边界值分析法
密码长度边界测试:
| 用例ID | 测试方法 | 密码长度 | 预期结果 |
|---|---|---|---|
| BOUND_001 | 边界值 | 5位密码 | 提示"密码长度6-20位" |
| BOUND_002 | 边界值 | 6位密码 | 登录成功 |
| BOUND_003 | 边界值 | 20位密码 | 登录成功 |
| BOUND_004 | 边界值 | 21位密码 | 提示"密码长度6-20位" |
使用场景法
主要场景:
1. 新用户首次登录
2. 老用户正常登录
3. 用户忘记密码后重置登录
备选场景:
1. 连续登录失败被锁定
2. 验证码错误
3. 会话超时重新登录
使用正交法(验证码相关因素)
| 用例ID | 用户名 | 密码 | 验证码 | 记住密码 | 预期结果 |
|---|---|---|---|---|---|
| ORTH_001 | 正确 | 正确 | 正确 | 是 | 登录成功,记住密码 |
| ORTH_002 | 正确 | 正确 | 错误 | 是 | 提示验证码错误 |
| ORTH_003 | 正确 | 错误 | 正确 | 否 | 提示用户名或密码错误 |
| ORTH_004 | 错误 | 正确 | 正确 | 否 | 提示用户名或密码错误 |
使用判定表法
条件:
-
C1: 用户名正确
-
C2: 密码正确
-
C3: 验证码正确
-
C4: 账号未锁定
动作:
-
A1: 登录成功
-
A2: 提示用户名密码错误
-
A3: 提示验证码错误
-
A4: 提示账号已锁定
| 规则 | C1 | C2 | C3 | C4 | 动作 |
|---|---|---|---|---|---|
| 1 | Y | Y | Y | Y | A1 |
| 2 | Y | Y | Y | N | A4 |
| 3 | Y | Y | N | Y | A3 |
| 4 | Y | N | Y | Y | A2 |
| 5 | N | Y | Y | Y | A2 |
使用错误猜测法
| 用例ID | 测试方法 | 异常操作 | 预期结果 |
|---|---|---|---|
| ERR_001 | 错误猜测 | 登录后浏览器回退 | 保持在登录状态或跳转到首页 |
| ERR_002 | 错误猜测 | 多标签页同时登录 | 正常处理,不出现会话冲突 |
| ERR_003 | 错误猜测 | 登录过程中刷新页面 | 表单数据清空,重新输入 |
Ⅱ、界面测试
| 用例ID | 测试内容 | 预期结果 |
|---|---|---|
| UI_001 | 页面布局合理性 | 各元素对齐,间距合适 |
| UI_002 | 文字显示正确性 | 无乱码,字体大小合适 |
| UI_003 | 图片显示完整性 | Logo、图标显示完整 |
| UI_004 | 色彩搭配协调性 | 色彩协调,符合设计规范 |
| UI_005 | 输入框焦点切换 | Tab键可正常切换焦点 |
| UI_006 | 按钮状态 | hover、active状态正常 |
Ⅲ、性能测试
| 用例ID | 测试场景 | 性能指标 | 预期结果 |
|---|---|---|---|
| PERF_001 | 单用户登录 | 响应时间 < 2s | 通过 |
| PERF_002 | 50用户并发登录 | 响应时间 < 3s,成功率100% | 通过 |
| PERF_003 | 100用户并发登录 | 响应时间 < 5s,成功率>95% | 通过 |
| PERF_004 | 长时间运行 | 内存泄漏检查 | 无内存泄漏 |
Ⅳ、兼容性测试
| 用例ID | 测试环境 | 预期结果 |
|---|---|---|
| COM_001 | Chrome 115+ | 功能正常,界面正常 |
| COM_002 | Firefox 115+ | 功能正常,界面正常 |
| COM_003 | Safari 16+ | 功能正常,界面正常 |
| COM_004 | Edge 115+ | 功能正常,界面正常 |
| COM_005 | iOS Safari | 功能正常,界面适配 |
| COM_006 | Android Chrome | 功能正常,界面适配 |
Ⅴ、易用性测试
| 用例ID | 测试内容 | 预期结果 |
|---|---|---|
| USE_001 | 操作流程简洁性 | 3步内完成登录 |
| USE_002 | 提示信息明确性 | 错误提示清晰易懂 |
| USE_003 | 快捷键支持 | Enter键可提交表单 |
| USE_004 | 忘记密码入口明显 | 容易找到忘记密码链接 |
Ⅵ、安全测试
| 用例ID | 测试内容 | 预期结果 |
|---|---|---|
| SEC_001 | SQL注入防护 | 输入' or '1'='1等,登录失败 |
| SEC_002 | XSS防护 | 输入<script>alert()</script>,脚本不执行 |
| SEC_003 | 密码加密传输 | 抓包查看密码为加密状态 |
| SEC_004 | 暴力破解防护 | 连续错误5次后锁定账号 |
| SEC_005 | 会话安全 | 登录后Session合理,退出后销毁 |
Ⅶ、弱网测试
| 用例ID | 网络条件 | 预期结果 |
|---|---|---|
| NET_001 | 2G网络(250ms延迟) | 登录成功,有加载提示 |
| NET_002 | 3G网络(100ms延迟) | 登录成功,响应正常 |
| NET_003 | 高丢包率(10%) | 登录成功,可能重试 |
| NET_004 | 网络超时(30s) | 显示网络错误提示 |
Ⅷ、安装卸载测试(如为移动端)
| 用例ID | 测试场景 | 预期结果 |
|---|---|---|
| INST_001 | 应用安装后首次登录 | 功能正常 |
| INST_002 | 应用升级后登录 | 保持登录状态或重新登录 |
| INST_003 | 应用卸载重装登录 | 需要重新登录 |
3. 按照测试用例对系统进行测试
测试环境准备
-
测试系统版本: v1.2.3
-
测试数据库: MySQL 8.0
-
测试服务器: CentOS 7.6
-
网络环境: 公司测试网络
-
测试工具:
-
功能测试: Selenium, Postman
-
性能测试: JMeter
-
安全测试: Burp Suite
-
兼容性测试: BrowserStack
-
测试执行策略
-
冒烟测试: 执行高优先级用例(FUN_001~005)
-
功能测试: 执行所有功能测试用例
-
集成测试: 结合用户管理模块测试
-
系统测试: 执行非功能测试用例
-
回归测试: 修复BUG后重新测试
4. 记录测试
测试执行记录表
| 用例ID | 执行日期 | 执行人 | 测试结果 | 缺陷ID | 备注 |
|---|---|---|---|---|---|
| FUN_001 | 2024-01-15 | 张三 | 通过 | - | - |
| FUN_002 | 2024-01-15 | 张三 | 通过 | - | - |
| FUN_003 | 2024-01-15 | 张三 | 通过 | - | - |
| FUN_004 | 2024-01-15 | 张三 | 失败 | BUG001 | 空用户名无提示 |
| BOUND_001 | 2024-01-15 | 张三 | 通过 | - | - |
| SEC_001 | 2024-01-16 | 李四 | 通过 | - | - |
| SEC_002 | 2024-01-16 | 李四 | 通过 | - | - |
缺陷记录表
| 缺陷ID | 严重程度 | 优先级 | 缺陷描述 | 复现步骤 | 期望结果 | 实际结果 |
|---|---|---|---|---|---|---|
| BUG001 | 中 | 高 | 用户名为空时无提示 | 1. 用户名为空 2. 输入密码 3. 点击登录 | 提示"请输入用户名" | 无任何提示,按钮可点击 |
测试报告摘要
-
总用例数: 45
-
执行用例: 45
-
通过用例: 43
-
失败用例: 2
-
阻塞用例: 0
-
通过率: 95.6%
风险评估:
-
高优先级缺陷: 1个(空用户名验证缺失)
-
中优先级缺陷: 1个(移动端布局问题)
-
低优先级缺陷: 0个
测试结论:
登录功能基本稳定,主要功能正常。发现2个需要修复的缺陷,建议修复后重新测试相关用例。性能和安全方面表现良好,满足上线要求。
