Files
qing da8ebbf9e6 docs: 研究整理——同步认证迁至 ca 后的过时描述、补 liblogc 与测试清单
- ARCHITECTURE/MODULES:ca 版本 v1.1.0、共享基础库补 liblogc、tests 描述与实际 9 个文件对齐、docs 篇数 57
- core README/报告/HttpTask 注释:管理员鉴权由"gateway 唯一权威"更正为 ca(v0.9.0 认证迁址后描述滞后)
- ca/gateway README 架构图 static:9200 → fsys:9200、db:8005 → db2:8005
- 主 README 与 blackbox README 补 test_core_confs.py,test_gateway 文档更新为 ca:8443 契约
2026-08-10 15:55:43 +00:00
..
2026-07-28 09:39:37 +08:00
2026-07-28 09:39:37 +08:00
2026-07-28 09:39:37 +08:00
2026-07-28 09:39:37 +08:00
2026-07-28 09:39:37 +08:00

黑盒用户模拟测试

micro_servers 微服务生态的黑盒测试套件。模拟真实用户操作流程,不依赖内部实现,仅通过 HTTP/TCP 公开接口验证各服务行为。

设计原则

  • 零依赖: 仅使用 Python 标准库(http.client、json、urllib、socket、argparse)
  • 用户视角: 每个测试文件模拟一条完整的用户旅程,而非孤立 API 端点
  • 无测试框架: 纯 assert + 计数器,输出 [PASS]/[FAIL]/[SKIP]
  • 独立可运行: 每个 test_xxx.py 可单独执行,也可通过 test_runner.py 统一调度

文件结构

tests/blackbox/
├── README.md           # 本文档
├── config.py           # 服务地址与端口映射
├── helpers.py          # HTTP/TCP 请求封装 + 断言工具 + 计数器
├── test_runner.py      # 统一入口,--url 自动识别目标服务
├── test_gateway.py     # 输入校验/Token契约/代理路径安全/限流/CORS(目标 ca:8443,认证 happy path 待测试钩子)
├── test_captcha.py     # 获取验证码 → 校验 → 一次性消费
├── test_smtp.py        # 发送邮箱验证码 → 校验
├── test_dnfs.py        # 创建笔记 → 查询 → 更新 → 删除(含内容审核)
├── test_db.py          # 日志写入 → 查询 → 统计 → 清理
├── test_ai_review.py   # 内容审核 → 人工反馈纠正
├── test_static.py      # 首页加载 → 文件浏览 → 视频流 → 路径遍历防护
├── test_waf.py         # 正常请求通行 → SQLi/XSS/命令注入/路径遍历/扫描器拦截
└── test_core_confs.py  # core 内嵌 confs(与 Python confs 基线行为对比)

覆盖的用户旅程

1. 注册与登录 (ca + captcha2 + smtp)

用户访问 captcha2:8009 获取图形验证码
    → 提交 captcha_token + answer 校验
    → 访问 smtp:8008 发送邮箱验证码
    → 提交 email + code 完成邮箱验证
    → 访问 ca:8443 POST /register 注册账号
    → 访问 ca:8443 POST /login 登录获取 Token
    → 使用 Token 通过 ca → gateway:8445 代理访问后端服务

2. 笔记管理 (dnfs2 + ai_review + db2)

已登录用户携带 Bearer Token
    → POST /add_note 创建笔记(内容经 ai_review:8007 审核)
    → POST /get_notes 查询笔记列表
    → POST /update_note 更新笔记(内容重新审核)
    → POST /delete_note 删除笔记

3. 内容审核 (ai_review)

提交违规内容 → 应返回 invalid: true
提交正常内容 → 应返回 invalid: false
提交误判反馈 → RAG 知识库更新

4. 集中日志 (db2)

各服务通过 /log/ingest 推送日志
    → /log/query 按条件查询
    → /log/stats 聚合统计
    → /log/purge 按时间清理

5. 前端静态服务 (fsys)

访问首页 → 返回 login.html
访问文件浏览 → /api/filelist 返回目录结构
访问视频流 → 支持 Range 分段请求
路径遍历攻击 → 返回 403

6. WAF 安全防护 (waf)

正常请求 → 通过代理到达 ca
SQL 注入载荷 → 返回 403 blocked by WAF
XSS 跨站脚本 → 返回 403
命令注入 → 返回 403
路径遍历 → 返回 403
扫描器 UA → 返回 403

运行方式

# 运行全部测试
python3 test_runner.py

# 指定服务地址(自动识别服务类型)
python3 test_runner.py --url http://127.0.0.1:8443

# 运行单个服务测试
python3 test_gateway.py
python3 test_captcha.py
# ... 依此类推

# 列出所有可用测试
python3 test_runner.py --list

服务端口默认值

测试条目 目标生产服务 默认端口 绑定地址
gateway(认证) ca 8443 127.0.0.1
static fsys 9200 127.0.0.1
dnfs dnfs2 8006 127.0.0.1
db db2 8005 127.0.0.1
ai_review ai_review 8007 127.0.0.1
captcha captcha2 8009 127.0.0.1
smtp smtp 8008 127.0.0.1
waf waf 443 0.0.0.0

测试条目名沿用历史命名(gateway/static/dnfs/db/captcha),实际命中生产对应端口上的 C++20 重写服务;config.py 中 description 已标注映射。

注意事项

  • 测试依赖服务运行中,请先通过 core 启动全部服务(systemctl start Nidus 或 bash core/_run.sh,按 core/services.yaml 拉起)
  • 注册测试会创建真实数据库记录,测试完成后可手动清理
  • SMTP 测试需要真实的邮件服务配置,若未配置则相关测试标记为 SKIP
  • WAF 测试需要服务监听 443 端口(可能需要 sudo)
  • 所有测试设计为幂等:重复运行不会产生副作用累积