test: add E2E test for PNG + JSON output validation
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
"""E2E 测试(需要 TDengine 容器)。"""
|
||||
|
||||
import json
|
||||
import subprocess
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.mark.e2e
|
||||
def test_e2e_generates_png_and_json():
|
||||
"""跑 e2e Python 子命令,验证 PNG + JSON 输出。"""
|
||||
project_dir = __import__("pathlib").Path(__file__).parent.parent
|
||||
|
||||
# 检查 TDengine 容器是否在运行
|
||||
result = subprocess.run(
|
||||
["docker", "compose", "exec", "-T", "tdengine", "taos", "-s", "SELECT 1"],
|
||||
capture_output=True, text=True, cwd=str(project_dir),
|
||||
)
|
||||
if result.returncode != 0:
|
||||
pytest.skip("TDengine container not running (docker compose up -d first)")
|
||||
|
||||
# 清空旧输出
|
||||
for d in ["render", "logs"]:
|
||||
p = project_dir / d
|
||||
if p.exists():
|
||||
for f in p.iterdir():
|
||||
f.unlink()
|
||||
|
||||
# 跑 e2e Python(不拉容器——假设已有)
|
||||
r = subprocess.run(
|
||||
["uv", "run", "python", "-m", "ts_anomaly_td", "e2e",
|
||||
"--data-dir", "data", "--output-dir", "render", "--log-dir", "logs"],
|
||||
capture_output=True, text=True, cwd=str(project_dir),
|
||||
timeout=300,
|
||||
)
|
||||
|
||||
print("STDOUT:", r.stdout[-2000:])
|
||||
print("STDERR:", r.stderr[-2000:])
|
||||
|
||||
# 验证 PNG
|
||||
pngs = list((project_dir / "render").glob("*.png"))
|
||||
assert len(pngs) >= 1, f"no PNGs found, stdout: {r.stdout[-500:]}"
|
||||
for png in pngs:
|
||||
assert png.stat().st_size > 10240, f"{png.name} too small: {png.stat().st_size} bytes"
|
||||
|
||||
# 验证 JSON 日志
|
||||
logs = list((project_dir / "logs").glob("e2e_*.json"))
|
||||
assert len(logs) >= 1, "no JSON logs found"
|
||||
log_data = json.loads(logs[0].read_text())
|
||||
assert "datasets" in log_data
|
||||
assert len(log_data["datasets"]) >= 1
|
||||
Reference in New Issue
Block a user