8.7 KiB
8.7 KiB
实现计划:ETL 全流程前后端联调(etl-fullstack-integration)
概述
基于 admin-web-console 已完成的前后端代码,进行端到端联调验证。全程使用 Playwright 浏览器模拟真实用户操作(登录、配置、提交、监控),不直接调用 API。通过管理后台 UI 提交 api_full 全流程 ETL 任务(自定义窗口 2025-11-01~当前时间,30天切分,force-full,全选常用任务),实时监控执行过程,收集性能数据,执行黑盒数据一致性测试(全链路检查器 scripts/ops/etl_consistency_check.py + FlowRunner 内置 ConsistencyChecker),最终生成综合报告。
任务
-
1. 服务启动与健康检查
-
1.1 启动后端服务(
apps/backend/,uvicorn :8000),确认 API 可达- 使用
controlPwshProcess启动uvicorn app.main:app --host 0.0.0.0 --port 8000,cwd 为apps/backend/ - 等待服务就绪,验证
http://localhost:8000/docs可访问 - Requirements: 1.1
- 使用
-
1.2 启动前端服务(
apps/admin-web/,pnpm dev :5173),确认页面可访问- 使用
controlPwshProcess启动pnpm dev,cwd 为apps/admin-web/ - 等待 Vite 就绪,验证
http://localhost:5173可访问 - Requirements: 1.2
- 使用
-
1.3 浏览器登录与健康检查
- 使用 Playwright 打开
http://localhost:5173,应自动跳转到/login - 在登录表单中输入用户名
admin、密码admin123,点击登录按钮 - 验证登录成功后跳转到任务配置页面(
/) - 确认侧边栏导航菜单正常渲染(任务配置、任务管理、ETL 状态、数据库、日志、环境配置、运维面板)
- Requirements: 1.3, 1.4, 1.5
- 使用 Playwright 打开
-
-
[-] 2. 浏览器操作:任务配置与提交
-
2.1 在任务配置页面填写全流程参数
- 在任务配置页面(
/),选择 Flow 为api_full(API → ODS → DWD → DWS → INDEX) - 选择处理模式为
full_window(全窗口) - 设置时间窗口模式为"自定义",填入开始时间
2025-11-01、结束时间 当前时间 - 设置窗口切分为"按天",切分天数为
30 - 勾选
force_full(强制全量) - 在任务选择区域,全选
is_common=True的常用任务(共 41 个) - 确认 CLI 命令预览区域显示完整参数(--flow api_full --processing-mode full_window --window-start ... --window-end ... --window-split day --window-split-days 30 --force-full --tasks ...)
- Requirements: 2.1
- 在任务配置页面(
-
2.2 通过浏览器提交任务执行
- 点击"直接执行"按钮(SendOutlined 图标),触发
POST /api/execution/run - 确认页面显示任务提交成功的提示消息
- 记录返回的 execution_id(从页面响应或跳转中获取)
- Requirements: 2.2, 2.4
- 点击"直接执行"按钮(SendOutlined 图标),触发
-
-
3. 浏览器操作:执行监控与 DEBUG
-
3.1 在任务管理页面监控执行状态
- 导航到"任务管理"页面(
/task-manager),点击侧边栏"任务管理"菜单 - 在"队列"Tab 中确认刚提交的任务状态为
running - 点击 running 状态的任务行,打开 WebSocket 实时日志流抽屉
- 持续观察日志输出,每 30 秒检查一次页面状态
- 检测日志中的 ERROR / CRITICAL / Traceback / Exception / WARNING 关键字
- 如果连续 30 分钟无新日志输出,报告超时警告
- 任务完成(success/failed/cancelled)时停止监控
- Requirements: 3.1, 3.2, 3.3, 3.4, 3.5
- 导航到"任务管理"页面(
-
3.2 对执行过程中发现的错误/警告进行 DEBUG 分析
- 从日志流中收集所有 ERROR 和 WARNING 日志行及其上下文
- 分析错误类型:API 超时、数据库连接、数据质量、配置问题等
- 如果任务失败,切换到"历史"Tab 查看完整执行详情和日志
- 记录 DEBUG 发现到报告中
- Requirements: 3.2, 3.5
-
-
4. 性能计时与报告生成
-
4.1 从浏览器获取执行日志,提取精细计时数据
- 在"任务管理"→"历史"Tab 中,点击已完成的任务查看执行详情
- 通过
GET /api/execution/{id}/logs获取完整日志(可通过浏览器或 API 辅助) - 从日志中提取每个窗口切片(30天)的开始/结束时间
- 计算每个切片的耗时
- 识别 ODS / DWD / DWS / INDEX 各阶段的耗时
- 标注 Top-5 耗时最长的阶段/任务
- Requirements: 4.1, 4.2, 4.3, 4.4
-
4.2 生成综合联调报告,输出到 SYSTEM_LOG_ROOT
- 报告包含:执行概要(参数、时间、退出码)
- 报告包含:性能报告(各切片耗时对比、Top-5 瓶颈)
- 报告包含:DEBUG 报告(如有错误/警告)
- 黑盒测试结果摘要将在任务 5.3 中追加
- 输出路径:
{SYSTEM_LOG_ROOT}/{date}__etl_integration_report.md - 路径通过
SYSTEM_LOG_ROOT环境变量获取,缺失时报错 - Requirements: 6.1, 6.2, 6.4, 6.5
-
-
5. 黑盒数据一致性测试
-
5.1 运行全链路检查器,执行 API→ODS→DWD→DWS 四层数据一致性检查
- 运行
uv run python scripts/ops/etl_consistency_check.py(cwd 为项目根目录C:\NeoZQYY) - 脚本自动从
LOG_ROOT找到最近一次 ETL 日志,解析本次执行的任务列表 - 脚本自动从
FETCH_ROOT读取 API JSON 落盘文件 - 脚本连接数据库(
PG_DSN),逐表逐字段比对:- API JSON vs ODS:字段完整性 + 值采样比对(随机 5 条记录),
ETL_META_COLS白名单列排除 - ODS vs DWD:行数对比 + 字段映射 + 值比对(含 EX 表合并),
SCD2_COLS白名单列排除 - DWD vs DWS:聚合表行数非空检查 + 数值列健全性(NULL 率、负值、min/max)
- API JSON vs ODS:字段完整性 + 值采样比对(随机 5 条记录),
- 白名单处理:API 空字符串
""vs DBNone视为等价,标记为 whitelist,不计入失败 - 报告自动输出到
ETL_REPORT_ROOT(环境变量,缺失时报错) - 备选触发方式:可通过
etl-data-consistencyHook 手动触发(效果等同) - Requirements: 5.1, 5.2, 5.3, 5.4, 5.5
- 运行
-
5.2 检查 FlowRunner 内置一致性报告
- FlowRunner 在 ETL 执行完成后已自动调用
_run_post_consistency_check()生成报告到ETL_REPORT_ROOT - 确认内置报告已生成,检查 API vs ODS 和 ODS vs DWD 的通过/失败统计
- 内置检查使用
ODS_META_COLUMNS白名单(含record_index)和KNOWN_NO_SOURCE按表白名单 - 对比两份报告的结论是否一致(全链路检查器 vs FlowRunner 内置检查)
- Requirements: 5.1, 5.2, 5.3
- FlowRunner 在 ETL 执行完成后已自动调用
-
5.3 将黑盒测试结果摘要写入综合联调报告
- 在任务 4.2 生成的联调报告中追加"黑盒测试报告"章节
- 包含:API vs ODS 通过数/总数、ODS vs DWD 通过数/总数、DWD vs DWS 表概览
- 包含:白名单差异数量统计、失败表清单
- 引用全链路检查报告的完整路径
- Requirements: 6.3
-
-
6. 服务清理
- 6.1 关闭浏览器,停止后端和前端服务,清理资源
- 关闭 Playwright 浏览器实例
- 停止 uvicorn 后端进程(
controlPwshProcessstop) - 停止 pnpm dev 前端进程(
controlPwshProcessstop) - 报告联调完成状态
- 6.1 关闭浏览器,停止后端和前端服务,清理资源
说明
- 本 Spec 为运维联调任务,不涉及新功能代码开发
- 不编写属性测试或单元测试,联调本身即为集成验证
- 全程使用 Playwright 浏览器模拟真实用户操作:登录、页面导航、表单填写、按钮点击、日志查看等均通过浏览器完成
- 黑盒测试使用两套工具:
- 全链路检查器
scripts/ops/etl_consistency_check.py:覆盖 API→ODS→DWD→DWS 四层,联调主要使用 - FlowRunner 内置
ConsistencyChecker(quality/consistency_checker.py):ETL 执行后自动运行,覆盖 API→ODS + ODS→DWD
- 全链路检查器
- 白名单机制:
ETL_META_COLS(ODS 元数据列)、SCD2_COLS(SCD2 管理列)排除在值比对之外;API 空字符串""vs DBNone视为等价 etl-data-consistencyHook(.kiro/hooks/etl-data-consistency.kiro.hook)可作为手动触发全链路检查的替代方式- 黑盒测试在 ETL 全流程执行完成后、服务清理前执行,确保数据库中有最新数据可供对比
- 全选常用任务 = 任务注册表中
is_common=True的所有任务(共 41 个) - "全部门店":当前系统仅有 site_id=1(默认管理员绑定),如需多门店需逐个执行
- 监控允许空闲等待,最长 30 分钟无新日志才报超时
- 报告输出路径遵循 export-paths 规范:全链路检查报告输出到
ETL_REPORT_ROOT,联调综合报告输出到SYSTEM_LOG_ROOT - 全链路检查器需要
PG_DSN、FETCH_ROOT、LOG_ROOT、ETL_REPORT_ROOT环境变量,缺失时报错