diff --git a/.gitea/workflows/ci-cd.yml b/.gitea/workflows/ci-cd.yml index 9a2f5f7..bec9e99 100644 --- a/.gitea/workflows/ci-cd.yml +++ b/.gitea/workflows/ci-cd.yml @@ -50,10 +50,12 @@ jobs: exit 1 fi echo "✅ 本次 push commit 标签齐全" - - name: pytest 冒烟 (venv310 数据层核心) + - name: pytest 冒烟 (venv310 数据层+组合引擎) run: | PY=/Users/chufeng/.openclaw/sanguo_projects/sanguo_vnpy_v2/venv310/bin/python - PYTHONPATH="$GITHUB_WORKSPACE" $PY -m pytest tests/data_platform -q + # 2026-08-22 起扩跑 tests/portfolio(issue#35 方案 B):原 13 个 Mac 环境失败 + # 已被依赖治理顺带清零(实测 440 绿 1.74s);组合引擎 440 题进 CI 门禁 + PYTHONPATH="$GITHUB_WORKSPACE" $PY -m pytest tests/data_platform tests/portfolio -q # ---------- NAS 部署(后端代码 + 前端 dist + restart 容器) ---------- nas-deploy: diff --git a/tests/portfolio/test_provider.py b/tests/portfolio/test_provider.py index 0cfae53..017aa23 100644 --- a/tests/portfolio/test_provider.py +++ b/tests/portfolio/test_provider.py @@ -521,23 +521,7 @@ class TestFullMethodSurfaceAlignment: assert seen["count"] == 5 assert seen["panel"] is False - def test_method_surface_no_gap_left(self): - """unified 全部公共方法在实盘 provider(+base)都有(同类洞清零钉死)。""" - import inspect - import re as _re - import pathlib - base_dir = pathlib.Path(__file__).resolve().parents[2] - uni_src = (base_dir / "sanguo_portfolio/providers/local_unified_provider.py" - ).read_text(encoding="utf-8") - uni_methods = set(_re.findall(r"^\s{4}def ([a-z]\w+)\(", uni_src, _re.M)) - provider = SanguoMiniQmtProvider.__dict__ - from bullet_trade.data.providers.miniqmt import MiniQMTProvider - base_methods = set( - n for n, v in vars(MiniQMTProvider).items() - if callable(v) and not n.startswith("__")) - missing = sorted( - m for m in uni_methods - if not m.startswith("_") - and m not in provider and m not in base_methods) - assert missing == [], f"回测有实盘无: {missing}" + # 方法面钉死测试已迁至 test_provider_method_surface.py(单一真相, + # fail-not-skip 牙齿)——本模块的 requires_bullet_trade mark 会让它在 + # bullet_trade 缺失时被 conftest 自动 skip(钉死虚标,issue #35),故移出。 diff --git a/tests/data_platform/test_provider_method_parity.py b/tests/portfolio/test_provider_method_surface.py similarity index 64% rename from tests/data_platform/test_provider_method_parity.py rename to tests/portfolio/test_provider_method_surface.py index 44e7044..54a3168 100644 --- a/tests/data_platform/test_provider_method_parity.py +++ b/tests/portfolio/test_provider_method_surface.py @@ -1,31 +1,25 @@ # -*- coding: utf-8 -*- -"""provider 方法面钉死测试(CI 版,issue #35 方案 A)。 +"""provider 方法面钉死测试(单一真相,issue #35 方案 B)。 背景:2026-08-21 实盘选股挂死+涨跌停过滤失效,根因都是「回测 provider (LocalUnifiedProvider)有、实盘 provider(SanguoMiniQmtProvider)无」的方法缺口 -(累计 5 个洞)。ff05207 在 tests/portfolio/test_provider.py 加了钉死测试,但 -CI 的 pytest 只跑 tests/data_platform → 钉死虚标(issue #35)。本文件把钉死 -**原样复制**进 CI 执行范围,不改 CI workflow、不动其他测试。 +(累计 5 个洞)。ff05207 加钉死测试,但当时 CI 只跑 tests/data_platform → 钉死 +虚标(issue #35)。2026-08-22 起 CI 扩跑 tests/portfolio(原 13 个 Mac 环境失败 +已被依赖治理顺带清零,实测 440 绿 1.74s),本文件成为钉死的**唯一**版本—— +原先两处冗余已删:tests/portfolio/test_provider.py 内旧版(挂模块级 +requires_bullet_trade mark,conftest 会在 bullet_trade 缺失时自动 skip=牙齿弱) +和 tests/data_platform/test_provider_method_parity.py 复制版(方案 A 过渡)。 牙齿自检:bullet_trade 不可用直接 FAIL(而非 skip)——skip 会让钉死在环境 -劣化时无声失效,重蹈 issue #35;单测失败不会中断同批其他测试(pytest 仅 -collection error 才中断),不影响 CI 其他功能。 +劣化时无声失效,重蹈 issue #35。本文件故意**不打** requires_bullet_trade mark, +conftest 的自动 skip 对它不适用。 """ -import os - -# 必须早于 bullet_trade import:0.9.2 默认 provider=jqdata 会拖 jqdatasdk -os.environ.setdefault("DEFAULT_DATA_PROVIDER", "miniqmt") - import pathlib import re def test_method_surface_no_gap_left(): - """unified 全部公共方法在实盘 provider(+MiniQMTProvider base)都有。 - - 与 tests/portfolio/test_provider.py::test_method_surface_no_gap_left - 逐字等价(复制契约:两处必须同步改)。 - """ + """unified 全部公共方法在实盘 provider(+MiniQMTProvider base)都有。""" try: from sanguo_portfolio import SanguoMiniQmtProvider from bullet_trade.data.providers.miniqmt import MiniQMTProvider