44e77dcb0e
**重构前**(旧编号 02-11): - docs/02-产品需求/ → 00 产品规划/PRD - docs/03-技术架构/ → 01-05 子目录散落 - docs/04-原型设计/ → 01-02 产品设计(HTML 原型) - docs/05-原型设计/ → screens/ - docs/06-测试素材/ → 02-E2E / 03-功能 / 04-版本测试 - docs/07-项目管理/ → 任务说明书/日报/计划 - docs/08-安全审计/ → 审计报告 - docs/09-堡垒运维/ → toolbox / deploy - docs/10-项目管理/ → 任务说明书(重复) - docs/11-历史归档/ → deploy-nas-archived **重构后**(新编号 00-07,语义化): - docs/00-产品开发流程与文档管理规范.md - docs/00-版本迭代总览.md - docs/01-产品文档/ (PRD/原型/认证/会话/AI 服务/坐席/集成) - docs/02-技术文档/ (技术方案/架构图/重构记录/前端改造/实现配置) - docs/03-测试文档/ (E2E/功能用例/版本报告/缺陷单) - docs/04-运维文档/ (部署运维/运维指南) - docs/05-运营文档/ (品牌推广/用户手册) - docs/06-安全审计/ (审计报告) - docs/07-项目管理/ (任务说明书/日报/计划/看板) **净收益**: - 目录编号与产品文档管理规范对齐(按文档阶段 01-07 编号) - 消除 02-产品需求 与 10-项目管理 的编号重叠 - 子目录按文档类型分组(如 01-产品文档/00-产品规划、01-产品文档/01-认证与登录) - 把运维/安全/项目管理从 0X 散落改为 04/06/07 合计 494 文件 + 78495 行 / - 14076 行
5.5 KiB
5.5 KiB
Token多IP异常检测 - 测试用例
任务ID: 待分配 关联文档: 技术设计-Token多IP异常检测.md 测试环境: 开发环境 / 测试环境
1. 测试概述
1.1 测试目标
验证Token多IP异常检测功能的正确性,确保:
- 正常多设备使用不触发误报
- 异常多IP使用能正确触发告警
- 告警内容准确
1.2 测试范围
| 模块 | 测试内容 |
|---|---|
| record_token_ip | IP记录逻辑 |
| detect_anomaly | 异常检测逻辑 |
| 告警发送 | 企微消息格式 |
2. 测试用例
2.1 单元测试
T001: 单IP使用Token
| 项目 | 内容 |
|---|---|
| 用例ID | T001 |
| 场景 | 同一IP多次使用Token |
| 预置条件 | Redis中无数据 |
| 测试步骤 | 1. 调用 record_token_ip(token="test", ip="10.0.0.1") 2. 获取 token_ips:* key的SCARD值 |
| 预期结果 | IP数量=1,不触发告警 |
| 实际结果 | |
| 状态 | ☐ |
T002: 3个IP使用Token (阈值)
| 项目 | 内容 |
|---|---|
| 用例ID | T002 |
| 场景 | 3个不同IP使用同一Token |
| 预置条件 | Redis中已有token_ips:test包含2个IP |
| 测试步骤 | 1. 调用 record_token_ip(token="test", ip="10.0.0.3") 2. 执行 detect_token_anomaly() 3. 检查告警是否发送 |
| 预期结果 | IP数量=3,触发告警 |
| 实际结果 | |
| 状态 | ☐ |
T003: 5个IP使用Token (严重)
| 项目 | 内容 |
|---|---|
| 用例ID | T003 |
| 场景 | 5个不同IP使用同一Token |
| 预置条件 | Redis中已有token_ips:test包含4个IP |
| 测试步骤 | 1. 调用 record_token_ip(token="test", ip="10.0.0.5") 2. 执行 detect_token_anomaly() |
| 预期结果 | IP数量=5,触发告警(严重) |
| 实际结果 | |
| 状态 | ☐ |
T004: 同一IP多次使用
| 项目 | 内容 |
|---|---|
| 用例ID | T004 |
| 场景 | 同一IP多次调用record_token_ip |
| 预置条件 | Redis中已有token_ips:test包含1个IP |
| 测试步骤 | 1. 调用 record_token_ip(token="test", ip="10.0.0.1") 3次 2. 获取 token_ips:test 的SCARD值 |
| 预期结果 | IP数量仍为1(Set自动去重) |
| 实际结果 | |
| 状态 | ☐ |
T005: Token过期后IP清空
| 项目 | 内容 |
|---|---|
| 用例ID | T005 |
| 场景 | Token过期后IP记录清空 |
| 预置条件 | Redis中token_ips:test存在,TTL=60秒 |
| 测试步骤 | 1. 等待TTL过期 2. 检查key是否存在 |
| 预期结果 | key不存在(自动过期) |
| 实际结果 | |
| 状态 | ☐ |
T006: 重复告警抑制
| 项目 | 内容 |
|---|---|
| 用例ID | T006 |
| 场景 | 同一异常Token在告警周期内再次触发 |
| 预置条件 | 已触发过告警,alerted_key存在 |
| 测试步骤 | 1. 执行 detect_token_anomaly() 2. 检查告警发送次数 |
| 预期结果 | 不重复发送告警 |
| 实际结果 | |
| 状态 | ☐ |
2.2 集成测试
I001: 真实API请求IP记录
| 项目 | 内容 |
|---|---|
| 用例ID | I001 |
| 场景 | 通过API请求触发IP记录 |
| 预置条件 | 后端服务运行中 |
| 测试步骤 | 1. 发送HTTP请求(带X-Forwarded-For) 2. 检查Redis中IP是否记录 |
| 预期结果 | X-Forwarded-For的IP被记录 |
| 实际结果 | |
| 状态 | ☐ |
I002: 定时任务完整流程
| 项目 | 内容 |
|---|---|
| 用例ID | I002 |
| 场景 | 定时任务触发完整检测流程 |
| 预置条件 | 3个异常Token存在 |
| 测试步骤 | 1. 等待定时任务执行(60秒) 2. 检查告警记录 |
| 预期结果 | 3条告警发送 |
| 实际结果 | |
| 状态 | ☐ |
I003: 企微消息格式
| 项目 | 内容 |
|---|---|
| 用例ID | I003 |
| 场景 | 告警消息格式正确 |
| 预置条件 | webhook配置正确 |
| 测试步骤 | 1. 触发告警 2. 检查企微收到的消息 |
| 预期结果 | markdown格式,包含employee_id、ip_count、token_hash |
| 实际结果 | |
| 状态 | ☐ |
3. 测试数据
3.1 测试Token
| Token | employee_id | 说明 |
|---|---|---|
| test-token-001 | user001 | 单IP测试 |
| test-token-002 | user002 | 3IP阈值测试 |
| test-token-003 | user003 | 5IP严重测试 |
| test-token-004 | user004 | 重复告警测试 |
3.2 测试IP
| IP | 类型 | 说明 |
|---|---|---|
| 10.0.0.1 | 内网 | 正常IP |
| 10.0.0.2 | 内网 | 正常IP |
| 10.0.0.3 | 内网 | 异常IP |
| 218.75.34.87 | 公网 | 外部IP |
| 117.147.35.138 | 公网 | 外部IP |
4. 测试环境配置
4.1 环境变量
# 测试环境配置
TOKEN_ANOMALY_THRESHOLD=3
TOKEN_ANOMALY_WINDOW=3600
TOKEN_ANOMALY_AUTO_DISABLE=false
CONTENT_AUDIT_WEBHOOK=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx
4.2 Redis预置
# 预置测试数据
redis-cli SET "user:token:test-token-001" '{"employee_id":"user001",...}'
redis-cli SADD "token_ips:hash001" "10.0.0.1"
redis-cli EXPIRE "token_ips:hash001" 3600
5. 测试结果
| 用例ID | 预期 | 实际 | 状态 | 备注 |
|---|---|---|---|---|
| T001 | 通过 | ☐ | ||
| T002 | 通过 | ☐ | ||
| T003 | 通过 | ☐ | ||
| T004 | 通过 | ☐ | ||
| T005 | 通过 | ☐ | ||
| T006 | 通过 | ☐ | ||
| I001 | 通过 | ☐ | ||
| I002 | 通过 | ☐ | ||
| I003 | 通过 | ☐ |
6. 测试签收
| 角色 | 姓名 | 日期 | 签名 |
|---|---|---|---|
| 开发 | |||
| 测试 | |||
| 审核 |
编制人: 威胁检测工程师 日期: 2026-07-14