fix(acceptance): 验证有限数值指标

This commit is contained in:
2026-09-09 18:16:21 +08:00
parent 95745da505
commit f9044094a7
2 changed files with 25 additions and 1 deletions
@@ -107,6 +107,24 @@ def test_driver_result_must_supply_assertions_metrics_and_zero_exit(tmp_path):
runner.ROOT = original_root
def test_driver_result_accepts_finite_nonnegative_float_metrics():
base = {
"schema": 1,
"case_id": "S-09",
"status": "PASSED",
"assertions": [{"name": "latency", "status": "PASSED"}],
"metrics": {"api_p95_ms": 61.4481},
"files": [],
"revisions": [],
}
assert runner._validate_driver_result("S-09", base, ("api_p95_ms",)) == []
for invalid in (float("nan"), float("inf"), -0.1, True):
base["metrics"]["api_p95_ms"] = invalid
assert runner._validate_driver_result("S-09", base, ("api_p95_ms",)) == [
"RESULT_METRIC_MISSING:api_p95_ms"
]
def test_valid_driver_passes_and_its_log_is_redacted(tmp_path):
driver = tmp_path / "driver.py"
driver.write_text(
+7 -1
View File
@@ -5,6 +5,7 @@ from __future__ import annotations
import argparse
import hashlib
import json
import math
import os
import re
import subprocess
@@ -377,7 +378,12 @@ def _validate_driver_result(case_id: str, result: Any, required_metrics: tuple[s
else:
for name in required_metrics:
value = metrics.get(name)
if not isinstance(value, int) or isinstance(value, bool) or value < 0:
if (
not isinstance(value, (int, float))
or isinstance(value, bool)
or not math.isfinite(value)
or value < 0
):
errors.append(f"RESULT_METRIC_MISSING:{name}")
for name in ("files", "revisions"):
if not isinstance(result.get(name), list):