Files
wecom_it_smart_desk/docs/03-测试文档/03-功能测试用例/testing-测试/Token多IP异常检测测试用例.md
T
Simon 44e77dcb0e chore(docs): docs/ 目录全面重新编号 + 重组
**重构前**(旧编号 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 行
2026-08-03 18:46:55 +08:00

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