探索性测试(Exploratory Testing)

探索性测试(Exploratory Testing)

一句话总结:边学习、边设计、边执行的自由式测试方法。

🌟 快速理解

脚本化测试 vs 探索性测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
脚本化测试(按剧本演戏):
1. 打开登录页面
2. 输入用户名
3. 输入密码
4. 点击登录
5. 验证结果
(严格按步骤执行)

探索性测试(即兴表演):
- 试试能否用邮箱登录?
- 试试能否用手机号登录?
- 试试密码能否复制粘贴?
- 试试能否记住密码?
(自由探索,发现问题)

📌 核心概念

什么是探索性测试?

探索性测试:测试人员同时进行学习、测试设计和测试执行的测试方法。

探索性 vs 脚本化

维度 探索性测试 脚本化测试
测试用例 即时设计 预先设计
灵活性
创造性
适用场景 新功能、复杂场景 回归测试
测试者 经验丰富 任何人

🎯 真实案例

案例:发现隐藏Bug

背景:电商系统登录功能

脚本化测试

1
2
3
✅ 正确的用户名和密码 → 登录成功
✅ 错误的密码 → 提示"密码错误"
✅ 不存在的用户 → 提示"用户不存在"

探索性测试发现的问题

1
2
3
4
5
❌ 连续输错5次密码后,账号被锁定,但没有提示
❌ 密码区分大小写,但没有说明
❌ 登录后按浏览器"后退",可以再次看到登录页面
❌ 在登录页面停留30分钟后,Session过期,但没有提示
❌ 使用特殊字符(如emoji)作为密码,系统崩溃

价值:探索性测试发现了5个脚本化测试遗漏的问题。


✅ 探索性测试技术

1. 基于场景的探索

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 场景:用户忘记密码
def explore_forgot_password():
"""探索忘记密码场景"""
# 1. 点击"忘记密码"
# 2. 输入邮箱
# 3. 检查邮件
# 4. 点击重置链接
# 5. 设置新密码

# 探索问题:
# - 重置链接有效期多久?
# - 重置链接能否重复使用?
# - 新密码能否与旧密码相同?
# - 重置密码后,其他设备的登录状态如何?

2. 基于风险的探索

1
2
3
4
5
6
7
8
9
# 高风险区域:支付功能
def explore_payment():
"""探索支付功能"""
# 探索问题:
# - 支付过程中断网会怎样?
# - 支付成功但页面未跳转会怎样?
# - 重复点击支付按钮会怎样?
# - 支付金额为0会怎样?
# - 支付金额为负数会怎样?

3. 基于数据的探索

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 探索不同类型的输入
def explore_input_validation():
"""探索输入验证"""
test_inputs = [
"", # 空字符串
" ", # 空格
"a" * 1000, # 超长字符串
"😀", # Emoji
"<script>alert()</script>", # XSS
"' OR '1'='1", # SQL注入
"../../etc/passwd", # 路径遍历
None, # Null
123, # 数字
[1, 2, 3], # 数组
]

for input_data in test_inputs:
response = test_function(input_data)
# 观察系统行为

📋 探索性测试流程

Session-Based Test Management (SBTM)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1. 制定测试章程(Charter)
- 目标:探索登录功能
- 时间:90分钟
- 范围:用户认证流程

2. 执行测试会话(Session)
- 边探索边记录
- 发现问题立即记录
- 尝试不同场景

3. 总结报告(Debrief)
- 测试了什么
- 发现了什么问题
- 学到了什么
- 下一步计划

🛠️ 探索性测试工具

工具 用途 推荐度
Session Tester 会话管理 ⭐⭐⭐⭐
Rapid Reporter 快速记录 ⭐⭐⭐⭐⭐
Mind Map 思维导图 ⭐⭐⭐⭐
Screen Recorder 屏幕录制 ⭐⭐⭐⭐⭐

📊 最佳实践

1. 制定测试章程

1
2
3
4
5
6
7
测试章程模板:
================
目标:探索 [功能名称]
时间:[时长]
范围:[测试范围]
重点:[关注点]
风险:[潜在风险]

2. 记录测试过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
测试记录模板:
================
时间:2024-01-15 14:00-15:30
测试者:张三
章程:探索登录功能

测试内容:
1. 尝试用邮箱登录 ✅
2. 尝试用手机号登录 ✅
3. 尝试连续输错密码 ❌ 发现Bug #123

发现问题:
- Bug #123:连续输错5次密码后账号被锁定,但没有提示

学到的知识:
- 系统支持邮箱和手机号登录
- 密码区分大小写
- 有账号锁定机制

下一步:
- 探索密码重置流程
- 探索第三方登录

3. 结合自动化测试

1
2
3
4
5
6
7
8
9
10
# 探索性测试发现问题后,编写自动化测试
def test_account_lockout_notification():
"""测试账号锁定提示(探索性测试发现的问题)"""
# 连续输错5次密码
for i in range(5):
response = login("test@example.com", "wrong_password")

# 第6次应该提示账号被锁定
response = login("test@example.com", "wrong_password")
assert "账号已被锁定" in response["error"]

🔗 相关主题

  • [[手工测试]] - 探索性测试的一种
  • [[自动化测试]] - 与探索性测试互补
  • [[回归测试]] - 探索性测试发现的问题需要回归测试

💡 快速参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
探索性测试速查表
================

定义:边学习、边设计、边执行的测试方法

核心特征:
🎯 即时设计测试用例
🔍 自由探索
💡 创造性思维
📝 边测试边记录

探索技术:
1. 基于场景的探索
2. 基于风险的探索
3. 基于数据的探索

SBTM流程:
1. 制定测试章程
2. 执行测试会话
3. 总结报告

推荐工具:
- Rapid Reporter(记录)
- Mind Map(思维导图)
- Screen Recorder(录屏)

最佳实践:
1. 制定测试章程
2. 记录测试过程
3. 结合自动化测试
4. 定期总结

适用场景:
✅ 新功能测试
✅ 复杂场景测试
✅ 发现隐藏Bug
✅ 用户体验测试

探索 vs 脚本:
- 探索:灵活、创造性
- 脚本:规范、可重复