1. 黑盒测试(功能测试、数据驱动测试或基于规格说明的测试)
1.1核心思想
不关心内部实现:将被测系统视为一个黑盒,只关注输入与输出是否符合预期。
基于需求:测试依据是需求文档、功能规格说明书。
1.2测试目标
验证系统功能是否符合用户需求。
检查边界条件、异常处理、用户交互等。
1.3适用阶段
系统测试(System Testing)
验收测试(Acceptance Testing)
1.4典型技术
等价类划分(Equivalence Partitioning)
边界值分析(Boundary Value Analysis)
决策表测试(Decision Table Testing)
示例
//python # 测试一个计算器的加法功能(无需知道内部算法) def test_add(): assert add(2, 3) == 5 # 正常输入 assert add(-1, 5) == 4 # 负数处理 assert add(0, 0) == 0 # 边界值
1.5优缺点
优点:贴近用户视角,无需编程技能,适合功能验证。
缺点:无法覆盖代码内部逻辑缺陷,测试覆盖率较低。
2. 白盒测试(结构测试、逻辑测试或基于程序源代码的测试)
2.1核心思想
透明化内部结构:直接分析代码逻辑,设计覆盖所有执行路径的测试用例。
基于代码:需要了解程序的控制流、数据流和实现细节。
2.2测试目标
确保代码逻辑正确性(如条件分支、循环)。
验证代码覆盖率(语句覆盖、分支覆盖等)。
2.3适用阶段
单元测试(Unit Testing)
集成测试(Integration Testing)
2.4典型技术
语句覆盖(Statement Coverage)
路径覆盖(Path Coverage)
条件覆盖(Condition Coverage)
示例
//python def calculate_discount(price, is_member): if is_member and price > 100: # 分支逻辑 return price * 0.9 else: return price # 白盒测试需覆盖所有代码路径 def test_calculate_discount(): assert calculate_discount(200, True) == 180 # 分支1:会员且价格>100 assert calculate_discount(50, True) == 50 # 分支2:会员但价格≤100 assert calculate_discount(200, False) == 200 # 分支3:非会员
2.5优缺点
优点:能发现深层代码缺陷,测试覆盖率更高。
缺点:需要编程能力,维护成本高,可能忽略用户场景。
3. 灰盒测试(介于两者之间)
3.1核心思想
部分透明:结合黑盒与白盒特点,基于有限代码知识设计测试用例。
关注接口与行为:了解系统架构和模块交互,但不深入代码细节。
3.2测试目标
验证模块间交互的正确性。
检测数据流在系统各层的处理逻辑。
3.3适用阶段
集成测试(Integration Testing)
安全测试(Security Testing)
3.4典型技术
API 测试(如 RESTful 接口)
数据库事务验证
渗透测试(部分代码知识辅助攻击)
示例
//Python # 测试用户注册接口(已知接口定义但无需了解内部实现) def test_register_api(): response = post("/api/register", data={"username": "test", "password": "123"}) assert response.status_code == 200 assert "user_id" in response.json() # 验证接口返回格式 # 灰盒补充:检查数据库是否写入记录(已知表结构) assert db.query("SELECT * FROM users WHERE username='test'").count() == 1
3.5优缺点
优点:兼顾功能与部分逻辑验证,适合复杂系统集成。
缺点:需要一定的技术背景,定位问题不如白盒精确。
4.对比总结
维度 黑盒测试 白盒测试 灰盒测试 测试视角 用户视角 开发者视角 架构师/测试工程师视角 代码依赖 不依赖代码 完全依赖代码 部分依赖代码 覆盖范围 功能验证 代码逻辑覆盖 接口与模块交互 实施难度 低 高 中 典型工具 Selenium, Postman JUnit, Pytest Postman, SoapUI 适用人员 功能测试工程师 开发人员 测试工程师/DevOps 实际应用场景
黑盒测试
电商网站购物流程测试(无需关心库存系统实现)。
移动App的UI交互验证。
白盒测试
加密算法的逻辑覆盖测试。
核心业务模块的单元测试。
灰盒测试
微服务API的集成测试(已知接口定义)。
数据库与缓存一致性验证(了解数据流向)。
选择策略
需求不明确 → 优先黑盒测试。
核心算法/安全模块 → 必须白盒测试。
系统集成阶段 → 灰盒测试更高效。
10-25
1万+

06-13
932
