测试分类
今天小编来介绍下测试分类。
那么为什么要有这个测试分类呢?
软件测试是软件生命周期中的一个重要环节,具有较高的复杂性,对于软件测试,可以从不同的角度/维度加以分类,使开发者在软件开发过程中的不同层次,不同阶段对测试工作进行更好的执行和管理测试的分类方法
按照测试目标进行分类
这个是值根据测试所要验证的软件质量特性(如功能正确性、界面友好性、性能稳定性等)来划分测试类型
具体类别如下:
注意:有些情况下,会把弱网测试纳入性能测试,安装卸载测试纳入兼容性测试
具体内容如下:
1. 功能测试(Functional Testing)
目标:验证“系统是否做了它该做的事”
内容:
业务流程(注册 → 登录 → 下单)
输入验证(边界值、非法字符)
数据处理(计算、存储、同步)
错误处理(提示、回滚)
示例:
用户输入优惠券码,系统正确抵扣金额,且不可重复使用。
2. 界面测试(UI/UX Testing)
目标:验证“界面是否好看、好用”
内容:
布局、字体、颜色、图标一致性
控件状态(禁用/启用/悬停)
提示文案清晰无错别字
响应式适配(PC/Pad/手机)
示例:
在 iPhone 14 上,“提交订单”按钮完整显示,无遮挡。
3. 性能测试(Performance Testing)
目标:验证“系统是否快、稳、省”
子类型:
负载测试:模拟预期用户量
压力测试:突破系统极限
稳定性测试:长时间运行是否泄漏
示例:
1000 用户并发下单,平均响应时间 ≤ 1.5s,错误率 < 0.1%。
4. 兼容性测试(Compatibility Testing)
目标:验证“系统是否在各种环境下正常工作”
维度:
操作系统(Windows 10/11, macOS, Android 12/13)
浏览器(Chrome, Firefox, Safari, Edge)
设备(iPhone, 华为, 小米, iPad)
分辨率 & 屏幕方向
示例:
在 Safari 16 上,支付页面 JavaScript 不报错。
5. 易用性测试(Usability Testing)
目标:验证“用户是否愿意用、能轻松用”
关注点:
学习成本(新用户能否自助完成)
操作效率(完成任务步骤是否最少)
容错能力(误操作能否撤销)
示例:
90% 的测试用户能在 2 分钟内完成首次发布内容。
6. 安全测试(Security Testing)
目标:验证“系统是否防得住攻击”
常见攻击面:
注入(SQL、XSS)
越权(普通用户访问管理员接口)
敏感信息泄露(日志、URL、缓存)
会话劫持(Token 未加密/未过期)
示例:
输入
' OR '1'='1到登录框,系统返回“用户名或密码错误”,而非数据库报错。
7. 可靠性测试(Reliability Testing)
目标:验证“系统是否扛得住意外”
场景:
网络中断后自动重连
服务宕机后自动恢复
长时间运行无内存泄漏
示例:
APP 在后台运行 72 小时,内存占用无持续增长。
8. 可维护性 & 可移植性测试(Maintainability & Portability)
目标:验证“系统是否易于修改和迁移”
内容:
代码模块化程度
配置与代码分离
部署脚本是否一键完成
是否依赖特定硬件/OS
示例:
将服务从 CentOS 迁移到 Ubuntu,仅需修改 1 个配置文件
按照执行方式分类:
核心分类:两大执行方式
静态测试:
不执行被测软件,而是通过人工或工具对文档、代码、设计等制品进行检查,以发现潜在缺陷
主要方法:
动态测试:
通过实际运行被测程序,输入测试数据、观察输出结果、行为、性能等是否符合预期
主要方法(按技术视角):
主要方法(按自动化程度):
按照测试方法分类:
常用的测试方法有:白盒测试、灰盒测试、黑盒测试
方法概览:
白盒测试(动态)中的常见六种测试方法
覆盖强度关系:
语句覆盖 < 判定覆盖 ≤ 条件覆盖 < 判定-条件覆盖 < 条件组合覆盖 ≤ 路径覆盖
黑盒测试中常用方法:
灰盒测试常用方法:
按照测试阶段分类
通常可以分为以下这5个阶段:
各阶段详解:
1. 单元测试(Unit Testing)
目标:验证最小可测试单元(如一个函数、一个类)的行为是否正确。
特点:
隔离外部依赖(用 Mock/Stub)
执行速度快(毫秒级)
覆盖率高(通常要求分支覆盖 ≥ 80%)
方法:白盒测试(语句/分支覆盖)
工具:
Java: JUnit + Mockito
Python: pytest + unittest.mock
JS: Jest, Mocha
示例:
Java
编辑
// 测试 calculateDiscount(100, true) → 应返回 80
@Test
public void testVipDiscount() {
assertEquals(80, DiscountService.calculateDiscount(100, true));
}责任人:开发人员(TDD/BDD 实践中甚至先写测试)
2. 集成测试(Integration Testing)
目标:验证多个模块或服务在集成后能否协同工作。
常见策略:
自底向上:先测底层模块,逐步集成
自顶向下:先测高层调用,用 Stub 模拟底层
大爆炸集成:所有模块一次性集成(风险高,不推荐)
测试重点:
API 接口契约(请求/响应格式)
数据库读写一致性
第三方服务调用(如支付、短信)
方法:灰盒测试(知道接口,不深究内部逻辑)
工具:
Postman(手动)
RestAssured, Karate(自动化)
TestContainers(集成数据库/中间件)
示例:
调用“创建订单”API → 验证订单服务是否正确调用库存服务扣减库存
责任人:开发(模块间) / 测试(服务间)
3. 系统测试(System Testing)
目标:对完整、集成后的系统进行全面验证,包括功能与非功能需求。
测试类型覆盖(即提到的“万能公式”):
功能测试
界面测试
性能测试
兼容性测试
安全测试
易用性测试
弱网测试
方法:黑盒测试为主
工具:
UI 自动化:Selenium, Cypress, Appium
性能:JMeter, Locust
安全:OWASP ZAP
示例:
用户从注册 → 登录 → 下单 → 支付 → 查看订单,全流程验证
责任人:专职测试人员
4. 验收测试(Acceptance Testing)
目标:确认系统是否满足业务方或最终用户的真实需求,决定是否可上线。
类型:
UAT(User Acceptance Testing):由真实用户或产品经理执行
合同验收测试:按合同条款验证
Alpha 测试:内部用户试用(开发环境)
Beta 测试:外部用户试用(生产环境灰度)
特点:
基于真实业务场景
不关注技术细节
通常手工执行
示例:
财务人员验证“月度报表导出”数据是否与线下账目一致
责任人:产品经理、业务方、最终用户
5. 回归测试(Regression Testing)
目标:确保新代码修改没有破坏已有功能。
触发时机:
修复 Bug 后
新增功能后
重构代码后
策略:
全量回归:成本高,适用于重大版本
选择性回归:基于影响分析(Impact Analysis)
自动化回归:核心主干流程必须自动化
工具:所有自动化测试框架(Selenium, pytest, JUnit 等)
示例:
修改了登录逻辑后,重新执行“注册、登录、找回密码”相关用例
责任人:测试 + 自动化脚本
按照是否手工测试分类
手工测试:
就是由人去一个个的输入用例,观察结果,和机器测试相对应,属于比较原始但是必须的一个步骤
自动化测试:
就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。简单说
自动化测试是把以为驱动的测试行为转化为机器执行的一种过程。自动化测试比如功能测试自动化、
性能测试自动化、安全测试自动化。自动化测试按照测试对象来分的话,还可以分为接口测试、UI测试等
.接口测试的ROI(产出投入比)要比UI测试高
自动化测试优点
节省成本
提高测试人员执行工作效率
保障软件的质量
自动化测试缺点
对测试人员技术要求较高
不能发散性测试
手工测试优点
对测试人员技术要求没有自动化技术要求高
可以进行发散性测试
手工测试缺点
效率低
人员,时间成本比起自动化测试都比较高
按照实施组织划分
核心分类如下:
那么还有其他的一些测试分类,小编就在这里不再做过多介绍了,本次分享就到这里。