feat(tester): support isolated full regression workflow
This commit is contained in:
@@ -40,6 +40,16 @@ FIELDS = (
|
||||
"risk",
|
||||
"driver",
|
||||
"maps_to",
|
||||
"blocked_by",
|
||||
"issue_id",
|
||||
"issue_type",
|
||||
"expected",
|
||||
"observed",
|
||||
"artifact_hash",
|
||||
"environment",
|
||||
"evidence_path",
|
||||
"reproduction",
|
||||
"next_step",
|
||||
)
|
||||
|
||||
|
||||
@@ -112,6 +122,23 @@ def case_index(root: Path) -> dict[str, dict[str, Any]]:
|
||||
return out
|
||||
|
||||
|
||||
def issue_index(run: dict[str, Any]) -> dict[str, dict[str, Any]]:
|
||||
"""Index canonical defects and compatibility test_issues by testcase."""
|
||||
indexed: dict[str, dict[str, Any]] = {}
|
||||
raw = run.get("defects")
|
||||
if not isinstance(raw, list):
|
||||
raw = run.get("test_issues")
|
||||
if not isinstance(raw, list):
|
||||
return indexed
|
||||
for issue in raw:
|
||||
if not isinstance(issue, dict):
|
||||
continue
|
||||
testcase = str(issue.get("testcase") or issue.get("id") or "")
|
||||
if testcase:
|
||||
indexed.setdefault(testcase, issue)
|
||||
return indexed
|
||||
|
||||
|
||||
def export_run_csv(
|
||||
root: Path,
|
||||
run_path: Path | None = None,
|
||||
@@ -123,6 +150,7 @@ def export_run_csv(
|
||||
path = path.resolve()
|
||||
run = load_run(path)
|
||||
cases = case_index(root)
|
||||
issues = issue_index(run)
|
||||
dest = out or path.with_suffix(".csv")
|
||||
dest.parent.mkdir(parents=True, exist_ok=True)
|
||||
with dest.open("w", encoding="utf-8-sig", newline="") as handle:
|
||||
@@ -134,6 +162,9 @@ def export_run_csv(
|
||||
cid = str(item["id"])
|
||||
result = str(item.get("result") or "")
|
||||
case = cases.get(cid) or {}
|
||||
issue = dict(issues.get(cid, {}))
|
||||
if isinstance(item.get("issue"), dict):
|
||||
issue.update(item["issue"])
|
||||
client_suite_value = case.get("client_suite") or (
|
||||
case.get("suite") if test_type(case) == "journey" else ""
|
||||
)
|
||||
@@ -154,6 +185,16 @@ def export_run_csv(
|
||||
"risk": case.get("risk") or "",
|
||||
"driver": case.get("driver") or "",
|
||||
"maps_to": case.get("maps_to") or "",
|
||||
"blocked_by": one_line(item.get("blocked_by")),
|
||||
"issue_id": issue.get("id") or item.get("issue_id") or "",
|
||||
"issue_type": issue.get("issue_type") or item.get("issue_type") or "",
|
||||
"expected": one_line(issue.get("expected") or item.get("expected")),
|
||||
"observed": one_line(issue.get("observed") or item.get("observed")),
|
||||
"artifact_hash": issue.get("artifact_hash") or item.get("artifact_hash") or "",
|
||||
"environment": one_line(issue.get("environment") or item.get("environment")),
|
||||
"evidence_path": one_line(issue.get("evidence_path") or item.get("evidence_path")),
|
||||
"reproduction": one_line(issue.get("reproduction") or item.get("reproduction")),
|
||||
"next_step": one_line(issue.get("next_step") or item.get("next_step")),
|
||||
}
|
||||
)
|
||||
return dest
|
||||
|
||||
Reference in New Issue
Block a user