# 登录功能测试用例 > **版本**: v1.0 | **日期**: 2026-07-06 | **状态**: 待执行 > **依据文档**: PRD v1.2 §4.5 身份认证与统一入口 > **测试环境**: 本地开发环境 --- ## 1. 测试范围 | 模块 | 接口 | 说明 | |------|------|------| | 企微免密登录 | `/api/auth_wecom/jsdk-login` | 企微JS-SDK免认证登录 | | 账号密码登录 | `/api/agents/login` | 坐席/管理员账号密码+OTP登录 | | MFA验证 | `/api/mfa/verify` | OTP验证码验证 | --- ## 2. 前置条件 ### 2.1 测试账号 | 角色 | user_id | 密码 | MFA状态 | 说明 | |------|---------|------|---------|------| | 坐席 | `sxn` | `admin123` | 已绑定 | IT支持组组长 | | 管理员 | `sxn` | `admin123` | 已绑定 | 同上,具有admin权限 | | 普通员工 | `test_user` | - | 未绑定 | 仅user角色 | ### 2.2 环境要求 - 后端服务运行在 `http://127.0.0.1:8000` - 前端服务:坐席端 `http://127.0.0.1:5177`,管理后台 `http://127.0.0.1:5178` - Redis 服务正常运行 - PostgreSQL/SQLite 数据库正常运行 --- ## 3. 测试用例 ### 3.1 企微免密登录 (/jsdk-login) | TC_ID | 测试场景 | 前置条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 | |-------|----------|----------|----------|----------|----------|------| | JSDK-01 | 企微用户具有坐席角色,免密登录 | user_id 具有 agent 角色 | 1. 前端调用 jsdk-login 传入 userid
2. 后端查询角色列表 | 返回 token 和 roles=["agent"] | | 待测试 | | JSDK-02 | 企微用户具有管理员角色,免密登录 | user_id 具有 admin 角色 | 同上 | 返回 token 和 roles=["admin"] | | 待测试 | | JSDK-03 | 企微用户具有坐席+管理员角色 | user_id 同时具有 agent 和 admin | 同上 | 返回 token 和 roles=["admin","agent"] | | 待测试 | | JSDK-04 | 企微用户仅具有user角色 | user_id 只有 user 角色 | 同上 | 返回 403 错误:"您没有坐席或管理员权限" | | 待测试 | | JSDK-05 | 企微用户无任何角色 | user_id 不在 user_roles 表 | 同上 | 返回 403 错误 | | 待测试 | ### 3.2 账号密码登录 (/agents/login) | TC_ID | 测试场景 | 前置条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 | |-------|----------|----------|----------|----------|----------|------| | PWD-01 | 正确账号密码+OTP登录 | 坐席账号、已绑定MFA | 1. 输入正确账号密码
2. 点击登录
3. 输入正确OTP | 返回 token,进入工作台 | | 待测试 | | PWD-02 | 正确账号密码+错误OTP | 坐席账号、已绑定MFA | 1. 输入正确账号密码
2. 点击登录
3. 输入错误OTP | 返回错误:"OTP验证码错误" | | 待测试 | | PWD-03 | 正确账号密码+无OTP | 坐席账号、已绑定MFA | 1. 输入正确账号密码
2. 点击登录(不输入OTP) | 返回 require_otp: true,提示输入OTP | | 待测试 | | PWD-04 | 错误账号 | 不存在的账号 | 输入错误的user_id | 返回错误:"用户不存在" | | 待测试 | | PWD-05 | 错误密码 | 正确的user_id,错误密码 | 输入错误的password | 返回错误:"本地密码错误" | | 待测试 | | PWD-06 | 账号密码登录(未绑定MFA) | 坐席账号、未绑定MFA | 输入正确的账号密码 | 直接返回 token,无需OTP | | 待测试 | ### 3.3 MFA 验证 | TC_ID | 测试场景 | 前置条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 | |-------|----------|----------|----------|----------|----------|------| | MFA-01 | 正确OTP验证码 | 已绑定MFA的坐席 | 调用 /api/mfa/verify | 返回验证成功 | | 待测试 | | MFA-02 | 错误OTP验证码 | 已绑定MFA的坐席 | 输入错误的OTP | 返回验证失败 | | 待测试 | | MFA-03 | 已验证状态(30分钟内) | 之前已通过OTP验证 | 再次调用需要MFA的接口 | 无需再次OTP | | 待测试 | --- ## 4. 执行记录 | 执行日期 | 测试人员 | 环境 | 备注 | |----------|----------|------|------| | 2026-07-06 | | 本地开发环境 | 首轮测试 | --- ## 5. 缺陷记录 | 缺陷ID | 对应TC | 描述 | 严重程度 | 状态 | |--------|--------|------|----------|------| | | | | | | --- ## 6. 修订历史 | 版本 | 日期 | 变更内容 | 修改人 | |------|------|----------|--------| | v1.0 | 2026-07-06 | 初始版本 | Claude |