# AxonHub Scripts 项目脚本工具集,包含测试、部署和开发辅助脚本。 ## 📁 脚本列表 ### E2E 测试脚本 #### `e2e/e2e-test.sh` 一键运行完整的 E2E 测试套件。 ```bash # 运行所有 E2E 测试 ./scripts/e2e/e2e-test.sh # 运行特定测试 ./scripts/e2e/e2e-test.sh tests/auth.spec.ts ``` **功能:** - 自动启动后端服务 - 运行 Playwright E2E 测试 - 测试完成后自动清理 #### `e2e/e2e-backend.sh` 管理 E2E 测试后端服务。 ```bash # 启动后端 ./scripts/e2e/e2e-backend.sh start # 停止后端 ./scripts/e2e/e2e-backend.sh stop # 查看状态 ./scripts/e2e/e2e-backend.sh status # 重启后端 ./scripts/e2e/e2e-backend.sh restart # 清理所有 E2E 文件 ./scripts/e2e/e2e-backend.sh clean ``` **配置:** - 端口: 8099 - 数据库: `scripts/e2e/axonhub-e2e.db` - 日志: `scripts/e2e/e2e-backend.log` ### 数据库迁移测试脚本 #### `migration/migration-test.sh` 测试从指定 tag 到当前分支的数据库迁移。 ```bash # 测试从 v0.1.0 迁移 ./scripts/migration/migration-test.sh v0.1.0 # 跳过 E2E 测试 ./scripts/migration/migration-test.sh v0.1.0 --skip-e2e # 保留测试产物 ./scripts/migration/migration-test.sh v0.1.0 --keep-artifacts # 使用缓存的二进制文件 ./scripts/migration/migration-test.sh v0.1.0 --skip-download ``` **功能:** 1. 从 GitHub 下载指定 tag 的二进制文件 2. 缓存下载的二进制文件 3. 使用旧版本初始化数据库 4. 使用当前版本运行迁移 5. 运行 E2E 测试验证迁移结果 **详细文档:** [MIGRATION_TEST.md](./migration/MIGRATION_TEST.md) #### `migration/migration-test-all.sh` 批量测试多个版本的数据库迁移。 ```bash # 自动测试最近 3 个稳定版本 ./scripts/migration/migration-test-all.sh # 测试指定版本 ./scripts/migration/migration-test-all.sh --tags v0.1.0,v0.2.0,v0.2.1 # 批量测试但跳过 E2E ./scripts/migration/migration-test-all.sh --skip-e2e ``` **功能:** - 自动检测最近的稳定版本 - 批量运行迁移测试 - 生成测试摘要报告 ### Load Balance 日志分析脚本 #### `utils/filter-load-balance-logs.sh` 过滤和分析负载均衡日志,便于分析 load balance 是否如预期工作。 ```bash # 显示最近 10 分钟的负载均衡日志 ./scripts/filter-load-balance-logs.sh --since 10m server.log # 按渠道 ID 过滤 ./scripts/filter-load-balance-logs.sh --channel-id 1 server.log # 显示特定模型的统计信息 ./scripts/filter-load-balance-logs.sh --model gpt-4 --stats server.log # 显示详细的策略分解 ./scripts/filter-load-balance-logs.sh --details --limit 5 server.log # 显示最近 1 小时的决策摘要 ./scripts/filter-load-balance-logs.sh --since 1h --summary server.log # 导出为 CSV ./scripts/filter-load-balance-logs.sh --format csv --limit 1000 server.log > output.csv # 按分数范围过滤 ./scripts/filter-load-balance-logs.sh --min-score 1000 --max-score 2000 server.log # 仅显示排名第一的渠道 ./scripts/filter-load-balance-logs.sh --max-rank 1 server.log ``` **功能:** - 按时间范围过滤日志(--since, --until) - 按渠道 ID 过滤(--channel-id) - 按模型名称过滤(--model) - 按分数范围过滤(--min-score, --max-score) - 按排名过滤(--min-rank, --max-rank) - 显示决策摘要(--summary) - 显示统计信息(--stats) - 显示详细的策略分解(--details) - 仅显示决策日志或渠道详情(--decision-only, --channel-only) - 限制输出条数(--limit) - 多种输出格式:table, json, csv(--format) **日志类型:** - `Load balancing decision completed` - 总体决策信息 - `Channel load balancing details` - 每个渠道的详细信息 ## 📚 文档 - **[QUICK_START.md](./QUICK_START.md)** - E2E 测试快速入门 - **[MIGRATION_TEST.md](./MIGRATION_TEST.md)** - 数据库迁移测试详细文档 - **[USAGE_EXAMPLE.md](./USAGE_EXAMPLE.md)** - 使用示例 ## 🔧 环境要求 ### E2E 测试 - Node.js 和 pnpm - Go 1.21+ - SQLite3 ### 迁移测试 - Go 1.21+ - unzip - curl - SQLite3 - 可选: jq (用于 JSON 解析) ## 📦 目录结构 ``` scripts/ ├── README.md # 本文件 ├── QUICK_START.md # E2E 测试快速入门 ├── MIGRATION_TEST.md # 迁移测试详细文档 ├── USAGE_EXAMPLE.md # 使用示例 │ ├── e2e-test.sh # E2E 测试主脚本 ├── e2e-backend.sh # E2E 后端管理脚本 ├── migration-test.sh # 单版本迁移测试 ├── migration-test-all.sh # 批量迁移测试 │ ├── axonhub-e2e # E2E 测试二进制文件(自动生成) ├── axonhub-e2e.db # E2E 测试数据库(自动生成) ├── e2e-backend.log # E2E 后端日志(自动生成) ├── .e2e-backend.pid # E2E 后端进程 ID(自动生成) │ └── migration-test/ # 迁移测试工作目录(自动生成) ├── cache/ # 二进制文件缓存 │ ├── v0.1.0/ │ │ └── axonhub │ └── v0.2.0/ │ └── axonhub └── work/ # 临时工作目录 ├── axonhub-current ├── migration-test.db ├── migration-test.log └── migration-plan.json ``` ## 🚀 快速开始 ### 运行 E2E 测试 ```bash # 方式 1: 使用 pnpm(推荐) cd frontend pnpm test:e2e # 方式 2: 直接运行脚本 ./scripts/e2e-test.sh ``` ### 测试数据库迁移 ```bash # 测试单个版本 ./scripts/migration-test.sh v0.1.0 # 测试多个版本 ./scripts/migration-test-all.sh ``` ## 🔍 故障排查 ### E2E 测试失败 ```bash # 查看后端日志 cat scripts/e2e-backend.log # 检查后端状态 ./scripts/e2e-backend.sh status # 手动重启后端 ./scripts/e2e-backend.sh restart # 查看测试报告 cd frontend pnpm test:e2e:report ``` ### 迁移测试失败 ```bash # 保留测试产物以便调试 ./scripts/migration-test.sh v0.1.0 --keep-artifacts # 查看迁移日志 cat scripts/migration-test/work/migration-test.log # 查看迁移计划 cat scripts/migration-test/work/migration-plan.json # 检查数据库 sqlite3 scripts/migration-test/work/migration-test.db ``` ### 端口占用 ```bash # 检查端口 8099 是否被占用 lsof -i :8099 # 停止占用端口的进程 ./scripts/e2e-backend.sh stop ``` ### 清理环境 ```bash # 清理 E2E 环境 ./scripts/e2e-backend.sh clean # 清理迁移测试缓存 rm -rf scripts/migration-test/ # 清理前端测试报告 cd frontend rm -rf playwright-report test-results ``` ## 🌟 最佳实践 ### E2E 测试 1. 使用 `pnpm test:e2e` 一键运行所有测试 2. 使用 `pw-test-` 前缀标识测试数据 3. 每个测试应该独立,不依赖其他测试 4. 使用 `waitForGraphQLOperation()` 等待异步操作 ### 迁移测试 1. 在发布前测试所有主要版本的迁移路径 2. 使用 `migration-test-all.sh` 批量测试 3. 保留失败的测试产物以便调试 4. 定期清理缓存目录以释放磁盘空间 ### 数据库迁移测试 (Migration Testing) 测试数据库版本升级迁移: ```bash # 测试从 v0.1.0 迁移到当前分支 ./scripts/migration-test.sh v0.1.0 # 批量测试最近 3 个稳定版本 ./scripts/migration-test-all.sh # 查看详细文档 cat scripts/MIGRATION_TEST.md ``` 详细说明请参考 [MIGRATION_TEST.md](./MIGRATION_TEST.md) ## 📝 环境变量 ### E2E 测试 ```bash AXONHUB_SERVER_PORT=8099 # 后端端口 AXONHUB_DB_DSN="file:..." # 数据库连接 AXONHUB_LOG_OUTPUT="stdio" # 日志输出 AXONHUB_LOG_LEVEL="debug" # 日志级别 AXONHUB_LOG_ENCODING="console" # 日志格式 ``` ### 迁移测试 ```bash GITHUB_TOKEN="your_token" # GitHub API Token(可选) ``` ## 🤝 贡献 如果你发现脚本有问题或有改进建议,欢迎提交 Issue 或 PR。 ## 📄 许可证 与项目主体相同的许可证。