## 后端变更 - 删除 21 个 sora_*.go 服务文件(service/handler/repository/routes) - 删除 Sora 相关 migration 文件(046/047/063/090) - 清理 config 中的 sora_* 配置项和平台常量 - 清理 wire 依赖注入中的 Sora 组件 - 修复 wire_gen.go 语法错误(缺少逗号和闭合括号) - 移除 go.mod 中的 go-sora2api 依赖 - 更新 ent schema usage_log.go 注释 ## 前端变更 - 删除 SoraView、SoraAdminView 及 8 个 Sora 子组件 - 删除 sora API 层和路由配置 - 清理 UserEditModal 中的 Sora 存储配额 UI - 清理 types/index.ts 中 Sora 相关类型定义 - 清理 stores/app.ts 默认配置 - 清理 i18n 翻译文件 en.ts/zh.ts (~110 行) - 更新相关测试文件 ## 文档更新 - README.md / README_CN.md / README_JA.md: 移除 Sora 状态说明和配置段落 - PROJECT_DIFF.md: 移除 Sora 相关差异描述 ## 验证结果 - ✅ Go 编译通过 (go build ./...) - ✅ TypeScript 类型检查通过 (vue-tsc --noEmit) - ✅ 后端测试全通过 (0 failures) - ✅ 前端测试全通过 (59 files, 329 tests, 0 failures) - ✅ 前端生产构建成功 (23.81s)
12 KiB
12 KiB
Sub2API 合并版本测试验证报告
验证人: QA (Yan) 日期: 2026-05-08 工作目录: d:/project/sub2api-merge
1. 测试执行结果汇总表
| 测试类型 | 命令/方式 | 结果 | 说明 |
|---|---|---|---|
| 后端 Unit Tests | go test -tags=unit ./... |
通过 | 全部通过,无失败 |
| 后端 Integration Tests | go test -tags=integration ./... |
通过 | 全部通过,无失败 |
| 后端 Coverage 收集 | go test -tags=unit -cover ./... |
失败 | internal/config 因 BOM 问题构建失败 |
| 后端 go vet | go vet ./... |
通过 | 无警告 |
| 后端构建 | go build -tags embed -o sub2api ./cmd/server |
通过 | 二进制生成成功 |
| 前端 Unit Tests | npx vitest run |
通过 | 62 文件 / 364 测试全部通过 |
| 前端构建 | pnpm run build |
通过 | 生成成功,有动态导入警告 |
| golangci-lint | golangci-lint run ./... |
未执行 | 本地未安装 |
关键模块覆盖率(unit 测试)
| 模块 | 覆盖率 | 状态 |
|---|---|---|
| internal/prommetrics | 100.0% | 优秀 |
| internal/service | 46.5% | 一般 |
| internal/handler/admin | 22.8% | 偏低 |
| internal/repository | 15.3% | 偏低 |
| internal/server/routes | 77.0% | 良好 |
| internal/middleware | 65.4% | 良好 |
| internal/pkg/response | 95.3% | 优秀 |
| internal/pkg/proxyurl | 100.0% | 优秀 |
| internal/pkg/usagestats | 100.0% | 优秀 |
2. 新增模块测试覆盖缺口
根据 PROJECT_DIFF.md 对新增模块的测试文件检查结果:
已覆盖(测试文件存在且通过)
| 模块路径 | 测试文件 | 状态 |
|---|---|---|
backend/internal/prommetrics/ |
metrics_test.go |
通过,覆盖率 100% |
backend/internal/service/webhook_service.go |
webhook_service_test.go |
通过 |
backend/internal/handler/admin/sora_handler.go |
sora_handler_test.go |
通过 |
backend/internal/service/ops_service.go |
ops_service_batch_test.go, ops_service_prepare_queue_test.go, ops_service_redaction_test.go |
通过 |
backend/internal/service/ops_alert_evaluator_service.go |
ops_alert_evaluator_service_test.go |
通过 |
backend/internal/service/ops_metrics_collector.go |
ops_health_score_test.go, ops_openai_token_stats_test.go |
通过 |
backend/internal/service/ops_settings.go |
ops_settings_advanced_test.go |
通过 |
backend/internal/service/ops_cleanup_service.go |
ops_partition_test.go |
通过 |
backend/internal/service/ops_aggregation_service.go |
ops_query_mode_test.go |
通过 |
backend/internal/service/ops_realtime.go |
ops_log_runtime_test.go, ops_upstream_context_test.go, ops_retry_context_test.go |
通过 |
backend/internal/service/ops_scheduled_report_service.go |
ops_system_log_service_test.go, ops_system_log_sink_test.go |
通过 |
backend/internal/service/sora_gateway_service.go |
sora_gateway_service_test.go |
通过 |
backend/internal/service/sora_generation_service.go |
sora_generation_service_test.go |
通过 |
backend/internal/service/sora_quota_service.go |
sora_quota_service_test.go |
通过 |
backend/internal/service/sora_s3_storage.go |
sora_s3_storage_test.go |
通过 |
backend/internal/service/sora_media_storage.go |
sora_media_storage_test.go |
通过 |
backend/internal/service/sora_media_cleanup_service.go |
sora_media_cleanup_service_test.go |
通过 |
backend/internal/handler/admin/ops_handler.go |
ops_runtime_logging_handler_test.go, ops_system_log_handler_test.go |
通过 |
backend/internal/repository/ops_repo*.go |
ops_repo_dashboard_timeout_test.go, ops_repo_error_where_test.go, ops_repo_latency_histogram_buckets_test.go, ops_repo_openai_token_stats_test.go, ops_repo_system_logs_test.go |
通过 |
frontend/src/views/admin/__tests__/SoraAdminView.spec.ts |
- | 通过(12 测试) |
frontend/src/views/admin/ops/components/__tests__/OpsSettingsDialog.spec.ts |
- | 通过(3 测试) |
frontend/src/views/admin/ops/components/__tests__/OpsOpenAITokenStatsCard.spec.ts |
- | 通过(5 测试) |
测试覆盖缺口
| 模块路径 | 预期测试 | 实际状态 | 风险 |
|---|---|---|---|
backend/internal/handler/admin/ops_dashboard_handler.go |
ops_dashboard_handler_test.go |
缺失 | 中 - 仪表盘数据查询接口无测试 |
backend/internal/handler/admin/ops_alerts_handler.go |
ops_alerts_handler_test.go |
缺失 | 中 - 告警管理接口无测试 |
backend/internal/handler/admin/ops_realtime_handler.go |
ops_realtime_handler_test.go |
缺失 | 低 - 实时数据接口无测试 |
backend/internal/handler/admin/ops_ws_handler.go |
ops_ws_handler_test.go |
缺失 | 低 - WebSocket 连接无测试 |
backend/internal/handler/admin/data_management_handler.go |
data_management_handler_test.go |
缺失 | 中 - 数据管理接口无测试 |
backend/internal/service/sora_account_service.go |
sora_account_service_test.go |
缺失 | 中 |
backend/internal/service/sora_client.go |
sora_client_test.go |
缺失 | 中 |
backend/internal/service/sora_sdk_client.go |
sora_sdk_client_test.go |
缺失 | 中 |
backend/internal/repository/ops_repo_preagg.go |
ops_repo_preagg_test.go |
缺失 | 低 |
backend/internal/repository/ops_repo_trends.go |
ops_repo_trends_test.go |
缺失 | 低 |
backend/internal/repository/ops_repo_metrics.go |
ops_repo_metrics_test.go |
缺失 | 低 |
backend/internal/repository/ops_repo_realtime_traffic.go |
ops_repo_realtime_traffic_test.go |
缺失 | 低 |
backend/internal/repository/ops_repo_request_details.go |
ops_repo_request_details_test.go |
缺失 | 低 |
总结: 新增核心模块(prommetrics、webhook、sora 主要服务、ops 核心服务)测试覆盖较好,但 Handler 层和 Repository 层部分模块测试缺失。整体新增模块测试覆盖率达到约 65%。
3. 构建验证结果
| 组件 | 命令 | 结果 | 问题 |
|---|---|---|---|
| 后端 | go build -tags embed -o sub2api ./cmd/server |
通过 | 无 |
| 前端 | pnpm run build |
通过 | 动态导入警告(非阻塞) |
前端构建警告(非阻塞)
src/stores/app.ts被动态导入同时也被静态导入,导致无法拆分到独立 chunksrc/router/title.ts和src/router/index.ts存在同样问题- 部分 chunk 超过 500KB(AccountsView 544KB, vendor-ui 430KB)
评估: 上述警告不影响功能,属于构建优化建议。
4. CI/CD 配置评估
存在的配置文件
| 文件 | 状态 | 评估 |
|---|---|---|
.github/workflows/backend-ci.yml |
存在 | 有版本匹配问题 |
.github/workflows/security-scan.yml |
存在 | 配置合理 |
.github/workflows/release.yml |
存在 | 未详细检查 |
backend-ci.yml 问题
-
Go 版本不匹配:
- CI 中校验
go1.26.2 - DEV_GUIDE.md 要求 Go 1.25.7
- 当前环境实际安装
go1.26.2 - 建议: 统一文档和 CI 中的版本要求
- CI 中校验
-
缺少前端 CI:
- 没有前端测试/构建的 CI 工作流
- 建议增加
frontend-ci.yml
-
Makefile 依赖:
- CI 使用
make test-unit和make test-integration - Makefile 存在且配置正确
- CI 使用
security-scan.yml 评估
- 包含后端
govulncheck和前端pnpm audit - 有定时扫描(每周一 03:00)
- 配置合理
5. 数据库迁移风险评估
迁移文件完整性
| 功能 | 迁移文件 | 状态 |
|---|---|---|
| Ops 监控核心表 | 026_ops_metrics_aggregation_tables.sql |
存在 |
| Ops 监控 vNext | 033_ops_monitoring_vnext.sql |
存在 |
| Ops 上游错误事件 | 034_ops_upstream_error_events.sql |
存在 |
| Ops 错误日志扩展 | 036_ops_error_logs_add_is_count_tokens.sql |
存在 |
| Ops 告警静默 | 037_ops_alert_silences.sql |
存在 |
| Ops 错误分类标准化 | 038_ops_errors_resolution_retry_results_and_standardize_classification.sql |
存在 |
| Ops 任务心跳 | 039_ops_job_heartbeats_add_last_result.sql |
存在 |
| Ops 系统指标 | 042b_add_ops_system_metrics_switch_count.sql |
存在 |
| Ops 系统日志 | 054_ops_system_logs.sql |
存在 |
| Ops 错误日志端点字段 | 079_ops_error_logs_add_endpoint_fields.sql |
存在 |
| Sora 账号表 | 046_add_sora_accounts.sql |
存在 |
| Sora 定价和媒体类型 | 047_add_sora_pricing_and_media_type.sql |
存在 |
| Sora 客户端表 | 063_add_sora_client_tables.sql |
存在 |
严重风险:迁移 090 与代码矛盾
发现: 090_drop_sora.sql 存在严重问题:
-- Migration: 090_drop_sora
-- Remove all Sora-related database objects.
DROP TABLE IF EXISTS sora_tasks;
DROP TABLE IF EXISTS sora_generations;
DROP TABLE IF EXISTS sora_accounts;
ALTER TABLE groups DROP COLUMN IF EXISTS sora_image_price_360, ...;
ALTER TABLE users DROP COLUMN IF EXISTS sora_storage_quota_bytes, ...;
ALTER TABLE usage_logs DROP COLUMN IF EXISTS media_type;
影响:
- 迁移 046、047、063 创建 Sora 相关表和字段
- 迁移 090 在同一迁移序列中全部删除这些表和字段
- 但代码库中仍包含完整的 Sora 服务模块(
sora_*.go) - 如果按顺序执行所有迁移,Sora 功能将无法运行
风险等级: 高 (HIGH)
建议:
- 确认 090_drop_sora.sql 的意图:是计划下线 Sora 功能,还是误提交?
- 如果保留 Sora 功能,应删除或跳过 090_drop_sora.sql
- 如果确实要下线 Sora,应同步删除代码模块,避免运行时错误
迁移编号冲突
- 存在多个
006_前缀的迁移文件(006_...,006_fix_...,006b_...) - 存在多个
028_前缀的迁移文件 - 存在多个
029_,030_,042_,043_,044_,045_,046_,052_,053_,054_前缀文件 - 项目使用文件名排序执行迁移,相同前缀的文件执行顺序可能不稳定
- 建议: 对相同前缀的迁移文件确认执行顺序是否符合依赖关系
6. 源码质量问题
BOM 问题(阻塞覆盖率)
文件: backend/internal/config/config_validate_gateway.go
问题: 文件开头包含 UTF-8 BOM(EF BB BF),导致 go test -cover 失败:
internal\config\config_validate_gateway.go:1:1: invalid BOM in the middle of the file
影响:
- 常规
go test和go build可以通过(Go 编译器对 BOM 容忍度不同) - 但
go test -cover和golangci-lint可能失败 - 影响 CI 中的覆盖率收集
建议: 移除文件开头的 BOM 字节。
7. 上线建议(GO / NO-GO / CONDITIONAL)
总体结论: CONDITIONAL GO(条件通过,需修复后上线)
必须修复(阻塞上线)
| # | 问题 | 优先级 | 负责人建议 |
|---|---|---|---|
| 1 | 迁移 090_drop_sora.sql 与代码矛盾 | P0 | 与架构师确认意图,删除或调整 |
| 2 | config_validate_gateway.go BOM 问题 | P0 | 移除 BOM,修复覆盖率收集 |
强烈建议修复(上线前)
| # | 问题 | 优先级 | 说明 |
|---|---|---|---|
| 3 | 补充 Handler 层测试 | P1 | ops_dashboard_handler, ops_alerts_handler, data_management_handler 等缺少测试 |
| 4 | 统一 Go 版本文档 | P1 | DEV_GUIDE 与 CI、实际环境版本不一致 |
| 5 | 增加前端 CI 工作流 | P1 | 当前仅后端有 CI,前端无自动化测试 |
建议优化(上线后)
| # | 问题 | 优先级 |
|---|---|---|
| 6 | 补充 sora_account_service, sora_client 等测试 | P2 |
| 7 | 补充 repository 层缺失测试 | P2 |
| 8 | 前端构建 chunk 优化 | P2 |
| 9 | 安装 golangci-lint 到本地环境 | P2 |
| 10 | 统一迁移文件编号避免前缀冲突 | P2 |
附录:执行环境信息
- OS: Windows 10 Enterprise LTSC 2021
- Go: go1.26.2 windows/amd64
- Node: (pnpm 可用,npx vitest 可用)
- PostgreSQL: 端口 5432 (配置存在,测试使用 testcontainers)
- Redis: 端口 6379
- 后端测试总耗时: Unit ~160s, Integration ~140s
- 前端测试总耗时: ~38s