Files
wecom_it_smart_desk/docs/03-测试文档/03-功能测试用例/testing-测试/Token多IP异常检测测试用例.md
Simon facc04aa65 chore: docs 结构整改 + compose 双目录对齐(合并重建提交)
本提交为 .git 对象库损坏后的重建提交,内容等价于原先三个本地提交
(5e2fd4c2 / 57a53c98 / 5d7e1873)的累积结果,未做任何额外改动。

一、docs 结构整改(整改 #14)
根因:重构时新结构为 untracked 文件,执行 git stash(未带 -u)未纳入,
随后 git reset 拉回 HEAD 旧 tracked 树,导致旧树复活、新旧两棵目录
树并存于 docs/,共 791 文件、双分类体系冲突。

修复动作:
- b2 同名异主题文件改名迁移保全 9 个
- C 类 39 个孤立文件按主题正确归类
- A/B1 类 222 个重复文件删除(新结构已有内容副本)
- 9 个旧独有空目录删除
- 270 处内部引用按 verified 映射改写
- 整改记录 #14 登记于 04-运维文档/部署运维

结果:docs 791 → 569 文件,顶层仅规范 8 类 + 治理文件,单树恢复。
残留:约 20 处指向从未存在文件的陈旧死链,归入独立文档卫生任务。

二、compose 双目录对齐(消除踩坑 A)
- docker-compose.yml:nginx 前端挂载全部由根目录 frontend-*/dist
  改为 src/frontend-*/dist(h5 / agent / admin / terminal)
- docker-compose.dev.yml:dev 服务 build context 与卷同步改 src/
- 效果:本地 docker compose up 不再把根目录 stale dist 挂回,
  与线上一致,分叉隐患消除(已 docker compose config 校验通过)

防复发铁律:
- 重构须提交;仓库修复须 git stash -u 或先 commit
- 新结构须 git add 并提交,避免再次 untracked 复活
- H5 改动只动 src/frontend-h5/,禁改根目录遗留 frontend-*/
2026-08-07 22:31:32 +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