# 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 环境变量 ```bash # 测试环境配置 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预置 ```bash # 预置测试数据 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