fix(acceptance): 验证有限数值指标
This commit is contained in:
@@ -107,6 +107,24 @@ def test_driver_result_must_supply_assertions_metrics_and_zero_exit(tmp_path):
|
|||||||
runner.ROOT = original_root
|
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):
|
def test_valid_driver_passes_and_its_log_is_redacted(tmp_path):
|
||||||
driver = tmp_path / "driver.py"
|
driver = tmp_path / "driver.py"
|
||||||
driver.write_text(
|
driver.write_text(
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|||||||
import argparse
|
import argparse
|
||||||
import hashlib
|
import hashlib
|
||||||
import json
|
import json
|
||||||
|
import math
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
@@ -377,7 +378,12 @@ def _validate_driver_result(case_id: str, result: Any, required_metrics: tuple[s
|
|||||||
else:
|
else:
|
||||||
for name in required_metrics:
|
for name in required_metrics:
|
||||||
value = metrics.get(name)
|
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}")
|
errors.append(f"RESULT_METRIC_MISSING:{name}")
|
||||||
for name in ("files", "revisions"):
|
for name in ("files", "revisions"):
|
||||||
if not isinstance(result.get(name), list):
|
if not isinstance(result.get(name), list):
|
||||||
|
|||||||
Reference in New Issue
Block a user