黑盒 vs 白盒 vs 灰盒测试:一张图讲透
作者:楠风测开 | 5 年测试工程师 本文 2800 字 | 阅读 8 分钟 | 建议收藏 ⭐
前言
Day 1 讲了测试工程师的 4 个阶段,Day 2 讲了用例设计,Day 3 讲了测试金字塔。
今天讲测试工程师必须搞懂的:黑盒、白盒、灰盒测试。
我刚做测试的时候对这三个概念一知半解。直到做测试开发,要看代码、写自动化,才发现——这 3 种测试的思维完全不同。
一、什么是黑盒测试
定义:不关心代码内部实现,只关心输入和输出。
思维模型:把自己当作用户。
黑盒测试 = 用户视角
看到的是:界面、按钮、表单
看不到的:代码、数据库、网络请求
适用场景:功能测试、UI 测试、验收测试
实战案例:登录功能黑盒测试
测试场景:用户输入用户名密码登录
- 输入正确 → 登录成功
- 输入错误用户名 → 提示"用户名不存在"
- 输入错误密码 → 提示"密码错误"
- 用户名为空 → 提示"不能为空"
- 连续输错 3 次 → 锁定账号
优缺点:
✅ 不需要懂代码,入门门槛低
✅ 站在用户视角,能发现体验问题
❌ 覆盖率难统计
❌ 漏测时无法定位代码位置
二、什么是白盒测试
定义:打开"盒子",看代码内部逻辑,针对代码设计测试。
思维模型:把自己当作开发者。
白盒测试 = 开发者视角
看到的是:代码逻辑、分支、循环、变量
适用场景:单元测试、代码覆盖率、Code Review
实战案例:登录密码强度校验白盒测试
def check_password_strength(password):
if len(password) < 8:
return "weak"
if not any(c.isdigit() for c in password):
return "weak"
if not any(c.isalpha() for c in password):
return "weak"
return "strong"
白盒测试用例(基于代码路径):
- 长度 < 8 → "weak"(覆盖第一个 if)
- 长度 >= 8,无数字 → "weak"(覆盖第二个 if)
- 长度 >= 8,有数字,无字母 → "weak"(覆盖第三个 if)
- 长度 >= 8,有数字,有字母 → "strong"
代码覆盖率:100%
优缺点:
✅ 覆盖率可量化
✅ 能发现代码深处的 bug
❌ 需要懂代码,入门门槛高
❌ 不关注用户体验
三、什么是灰盒测试
定义:介于黑盒和白盒之间,既关注输入输出,又关注部分内部逻辑。
思维模型:把自己当作"半个开发者 + 半个用户"。
灰盒测试 = 半个开发者视角
看到的是:API 文档 + 部分代码逻辑
适用场景:接口自动化、API 集成测试、性能测试
实战案例:API 灰盒测试
接口:POST /api/login
请求:{"username": "test", "password": "123456"}
测试用例:
- 正常登录 → 返回 200 和 token
- 用户名错 → 返回 401
- 密码错 → 返回 401
- 密码是 MD5 → 返回 200(看后端)
- SQL 注入 → 返回 400
- 并发 100 → 全部成功
优缺点:
✅ 兼顾功能和代码
✅ 自动化效率高
❌ 需要懂部分代码
四、3 种测试的对比(一张图)
┌──────────┬──────────┬──────────┬──────────┐
│ 维度 │ 黑盒测试 │ 白盒测试 │ 灰盒测试 │
├──────────┼──────────┼──────────┼──────────┤
│ 视角 │ 用户 │ 开发者 │ 半个用户 │
│ 懂代码 │ 不需要 │ 需要 │ 部分需要 │
│ 入门难度 │ 低 │ 高 │ 中 │
│ 自动化效率│ 低 │ 高 │ 中 │
│ 维护成本 │ 高 │ 低 │ 中 │
│ 适合人群 │ 功能测试 │ 测试开发│ 测试开发 │
└──────────┴──────────┴──────────┴──────────┘
核心区别:
黑盒:不看代码
白盒:只看代码
灰盒:又看又看,但都看一点
五、3 种测试的实战对比
同一功能:用户登录
黑盒测试(从用户角度):
- 输入用户名密码 → 登录成功
- 密码错 → 提示"密码错误"
白盒测试(从代码角度):
- check_password 函数 4 个分支都覆盖
- 密码校验逻辑覆盖率 100%
灰盒测试(从接口角度):
- POST /api/login 各种场景
- 看 API 返回值 + 部分后端处理
六、测试工程师应该学哪种?
阶段 1:功能测试(0-1 年)
重点学黑盒测试
理由:入门门槛低,先把业务和用例设计搞扎实
技能:测试用例设计、缺陷跟踪、需求分析
阶段 2:自动化测试(1-3 年)
重点学灰盒测试
理由:接口自动化性价比最高
技能:Python、requests、pytest、CI/CD
阶段 3:测试开发(3-5 年)
重点学白盒测试 + 灰盒测试
理由:要能看懂代码、参与 code review、推动单元测试
技能:Java/Python、单元测试框架、代码覆盖率
核心建议:
3 种都要会,但深耕 1 种。
七、楠风的经验
我做测试 5 年,3 种测试都做过。
实战路径:
2019:黑盒测试 → 学业务、写用例
2020:灰盒测试 → Python + requests
2021:白盒测试 → 推动开发 + 测试自己写
2022:3 种融合 → 测试平台开发
真实数据:
掌握 3 种测试后:
- bug 发现率提升 50%
- 测试效率提升 30%
- 团队协作更顺畅
八、3 个月行动清单
今天
□ 评估自己当前在哪一阶段
□ 找出自己最薄弱的那种测试
本周
□ 学 1 种最薄弱测试的核心方法
□ 在工作中找 1 个功能练手
90 天
□ 黑盒:能写高质量用例
□ 灰盒:能写接口自动化
□ 白盒:能看懂代码、写单元测试
九、写在最后
3 种测试不是对立关系,是互补关系。
黑盒:看用户做了什么
白盒:看代码怎么实现
灰盒:看接口怎么交互
3 种都懂,才能测得全面、写得扎实。
评论区聊聊
你现在主攻哪种测试?
有没有想转型的方向?
我会尽量回复。
关于作者
楠风测开 | 5 年测试工程师 | 测试开发
做测试平台、写技术博客、分享成长路径
如果你想看更多我的内容,可以搜索楠风测开
或者关注我的同名账号
如果这篇文章对你有帮助:
- 点赞 + 收藏 + 评论
- 关注公众号「楠风测开」(同名)
- 评论区告诉我你主攻哪种测试
全文 2800 字 | 阅读 8 分钟 | 建议收藏
【原创声明】本文为楠风测开原创,转载请联系作者授权。