Files
easy_tdx_max/web-ui/e2e
awayingsandClaude Code fb35677802 feat: 自选列表新增「近3日/近1周/近2周」涨跌幅三列(issue #7)
交易日偏移口径:T = 上证指数日线(交易日历)中 <= 今天的最后一天,
D_n = T 往前 n 个交易日,锚点 = 个股日线(/bars 同款 QFQ)中
date <= D_n 的最后一根 bar。后端只回锚点收盘价,涨跌幅由前端用
SSE 实时价现算,盘中三列随报价免费跳动、无需轮询本接口。

- 新增 GET /watchlist/returns + 纯计算模块 web/returns.py(零 IO,单测覆盖
  停牌回退/次新 null/除权日 QFQ/非交易日回退等口径)
- 个股日线与交易日历均进程内缓存(当日不变、次日失效),重复刷新零行情请求;
  日历缺今天(serve 盘前启动)时按 60s 间隔重取,避免 T 整体前移
- 取数并发 ≤ 4(TDX 防封红线);单只失败只落 error,不影响整表
- 前端 +3 列(着色复用 dirClass/fmtPctSigned),e2e 同步断言

与 issue 定稿的两处偏差(/simplify 收敛,"减少不必要的改动"):
- 删除 windows 查询参数:列名与窗口一一对应(issue 亦将"用户自定义窗口"
  列为 out of scope),固定 3/5/10
- 个股缓存由磁盘 JSON 改为进程内 dict:可观测行为不变(当日不重复请求),
  但 serve 重启后当天首次请求会重取一次

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-11 11:39:10 +08:00
..

easy-tdx Web UI — Playwright E2E

无头浏览器端到端测试,覆盖:市场看板(五大指数 SSE)、自选增删、回测全流程 (取行情→净值图→绩效表→成交记录)、「附加分析」开关(WF 逐窗柱状图 + 一条龙 评估卡)、策略库保存。

Mock 方案:后端合成数据(EASY_TDX_E2E_MOCK=1),不是 page.route 拦截

两种可行路径的取舍:

后端 mock(已选) Playwright page.route 拦截
回测/WF/评估/自选/策略库 走真实后端代码schema 变更会被 E2E 捕获 静态 JSON,会与后端 schema 漂移
SSE /stream/quotesEventSource QuoteStreamer 真轮询合成数据,SSE 全链路被覆盖 无法稳定 mock(需流式 body
任务型端点(提交→轮询→done 天然支持 要手写状态机
代价 后端多一个 src/easy_tdx/web/e2e_mock.py(约 400 行,由单测守护契约) 无后端改动

实现:playwright.config.tswebServerEASY_TDX_E2E_MOCK=1 启动 easy-tdx serve --port 8001lifespan 把 TDX/MAC 客户端替换为合成数据客户端 (确定性随机游走、按 (market, code) 播种,逐轮结果完全一致)。 EASY_TDX_CONFIG_DIR 指向每轮独立的临时目录——自选/策略库/任务从空开始, 断言可以写死,也不污染真实 ~/.easy_tdx

本地跑法

# 仓库根(Python 侧,一次性)
pip install -e ".[web]"          # fastapi + uvicorn

cd web-ui
npm install
npx playwright install chromium  # 首次下载浏览器(约 115MB
npm run build                    # 必须:serve 从 ../web-ui/dist 托管前端
npm run test:e2e                 # = npx playwright test(无头)
  • Python 解释器自动探测仓库 .venv;没有 .venv 时用 EASY_TDX_PYTHON 环境变量指定(CI 里是系统 python)。
  • 调试:npx playwright test --headed,或 --ui 打开交互式运行器; 失败时自动留 trace/截图在 e2e/.results/(已 gitignore)。
  • 想复用已启动的 serve:直接跑即可(reuseExistingServer,本地非 CI 默认开), 但注意该 serve 必须带 EASY_TDX_E2E_MOCK=1 才有合成行情。

CI

.github/workflows/ci.ymlfrontend job 在 typecheck+build 后追加: 安装 Python + pip install -e ".[web]"npx playwright install chromiumnpm run test:e2e(mock 模式,不需要任何真实行情连接)。

用例清单

文件 覆盖
dashboard.spec.ts 五大指数区块渲染 + SSE 首帧价格 + 市场统计卡
watchlist.spec.ts 自选加入(含名称补全)/删除/空态
backtest.spec.ts 策略下拉 + 回测全流程 + WF 柱状图 + 一条龙评估卡
strategies.spec.ts 保存策略对话框 + 策略库页可见