针对单元测试、集成测试、系统测试和验收测试(用户测试)各自的目标和测试内容不同,设计对应的各类测试用例
背景
为了给新项目设计单元测试、集成测试、系统测试和验收测试(用户测试)各个阶段的测试用例。首先需要理清每个阶段的侧重点,各自的目标和测试内容依据是看这位大佬的https://cloud.tencent.com/developer/article/2140352。
然后我们以一个具体的模块为例,来设计不同级别的测试用例。
假设模块:用户登录模块
模块功能描述:
- 输入:用户名、密码
- 处理:验证用户名和密码是否与数据库中的记录匹配。
- 输出:登录成功(并返回用户信息)或登录失败(并返回具体错误原因,如用户名不存在、密码错误等)。
1. 单元测试用例
测试对象:login(username, password)
函数/方法。
用例ID | 测试输入 | 预期输出 | 测试目的 |
---|---|---|---|
UT-001 | 用户名: “admin”, 密码: “correct_password” | 返回:成功,用户信息对象 | 验证正常登录路径 |
UT-002 | 用户名: “admin”, 密码: “wrong_password” | 返回:失败,错误信息“密码错误” | 验证密码错误处理 |
UT-003 | 用户名: “non_existent_user”, 密码: “any” | 返回:失败,错误信息“用户名不存在” | 验证用户名不存在处理 |
UT-004 | 用户名: “”, 密码: “any” | 返回:失败,错误信息“用户名不能为空” | 验证空用户名处理(边界/数据有效性) |
UT-005 | 用户名: “admin”, 密码: “” | 返回:失败,错误信息“密码不能为空” | 验证空密码处理(边界/数据有效性) |
UT-006 | 用户名: null , 密码: null | 抛出明确的异常(如“参数不能为null”) | 验证错误处理(异常路径) |
UT-007 | 用户名: 超长字符串(如1000个字符) | 返回:失败,错误信息“用户名长度超限” | 验证输入长度限制(边界测试) |
测试依据:函数内部的代码逻辑、注释、该模块的详细设计文档。
2. 集成测试用例
测试对象:用户登录模块 + 数据库模块(或用户信息管理模块)的接口。
用例ID | 测试场景/模块交互 | 预期结果 | 测试目的 |
---|---|---|---|
IT-001 | 登录模块调用数据库查询接口,传入正确的用户名 | 数据库返回正确的用户记录,登录模块成功验证密码 | 验证模块间数据传输正常 |
IT-002 | 登录模块调用数据库查询接口,传入不存在的用户名 | 数据库返回空记录,登录模块正确返回“用户名不存在” | 验证模块对异常数据的协同处理 |
IT-003 | 数据库连接失败 | 登录模块捕获到数据库异常,并返回“系统繁忙,请稍后重试”等友好信息 | 验证错误处理(单模块缺陷对系统的影响) |
IT-004 | 登录成功后,登录模块调用日志记录模块记录登录行为 | 日志系统中成功生成一条登录日志 | 验证与第三方模块的功能协作 |
测试依据:单元测试通过的模块、概要设计文档(定义了模块间的接口)。
3. 系统测试用例
测试对象:完整的“用户登录”功能,包括前端界面、后端服务、数据库等。
用例ID | 测试步骤 | 预期结果 | 测试类型 |
---|---|---|---|
ST-001 | 1. 打开登录页面 2. 输入正确的用户名和密码 3. 点击“登录”按钮 | 1. 页面跳转到系统主页 2. 页面顶部显示欢迎信息,如“欢迎,admin” | 功能测试 |
ST-002 | 1. 输入错误密码后点击登录 | 页面清晰提示“用户名或密码错误”,且密码框被清空 | 功能测试 |
ST-003 | 1. 不输入用户名直接点击登录 | 页面提示“请输入用户名”,光标定位到用户名输入框 | 功能测试/易用性测试 |
ST-004 | 1. 使用浏览器的“后退”按钮 after login | 不应退回到登录页,或退回到登录页后再次前进应直接进入主页(避免安全漏洞) | 安全性测试 |
ST-005 | 1. 模拟100个用户同时登录 | 系统响应时间在可接受范围内(如<3秒),无崩溃 | 性能测试 |
ST-006 | 1. 在不同的浏览器(Chrome, Firefox, Edge)上执行ST-001 | 功能正常,页面布局正确 | 兼容性测试 |
ST-Smoke-001 | 在每次新版本构建后,执行ST-001和ST-002 | 基本登录功能正常 | 冒烟测试 |
ST-Regression-001 | 在修改了密码加密算法后,重新执行所有与登录相关的测试用例 | 所有功能依然正常 | 回归测试 |
测试依据:需求规格说明文档(如:用户必须能够通过用户名和密码登录系统)。
4. 验收测试用例
测试对象:整个系统,从最终用户的角度验证。
用例ID | 测试场景(用户故事形式) | 预期结果(用户期望) | 备注 |
---|---|---|---|
UAT-001 | 作为一名已注册用户, 我希望在首页输入我的账号和密码,以便进入系统使用功能。 | 我能顺利进入系统主界面,并看到我定制的仪表盘。 | 对应ST-001 |
UAT-002 | 作为一名已注册用户, 当我输错密码时,我希望系统能明确告诉我原因,以便我重新输入。 | 系统提示“密码错误”,我不会误以为是账号问题。 | 对应ST-002 |
UAT-003 | 作为一名新用户, 当我第一次登录时,系统应提示我修改初始密码。 | 登录后直接跳转到修改密码页面,并强制我完成修改。 | 可能是一项特定的业务需求 |
UAT-004 | 作为管理员, 我查看《用户手册》,其中描述的登录步骤应和实际系统一致。 | 我能够按照手册快速完成登录操作。 | 文档验收 |
UAT-005 | 作为用户, 整个登录过程不应超过5秒。 | 从点击登录到进入主页,感觉流畅,无长时间等待。 | 非功能性需求验收 |
测试依据:用户合同、需求方确认的需求文档、验收标准。
总结
通过以上示例可以看出:
- 单元测试:关注代码内部逻辑,粒度最细。
- 集成测试:关注模块/服务间的接口和协作。
- 系统测试:关注整个系统是否满足需求规格,包括功能和非功能需求。
- 验收测试:从业务和用户角度验证系统是否“可用”和“好用”。
在实际项目中,每种测试的用例都会比示例更详尽,并且会使用不同的测试工具和方法(如JUnit用于单元测试,Selenium用于系统UI测试)。