Update json_to_md.py
This commit is contained in:
+30
-18
@@ -70,38 +70,50 @@ def json_to_md_nested(json_path, md_path, allure_dir=None):
|
||||
f.write("\n")
|
||||
|
||||
|
||||
from collections import defaultdict
|
||||
|
||||
if "collectors" in data:
|
||||
f.write("## 📚 Collectés\n")
|
||||
|
||||
# Grouper par dossier principal (ex: ci-reports/allure → groupe = 'ci-reports/allure')
|
||||
grouped = defaultdict(list)
|
||||
for collector in data["collectors"]:
|
||||
nodeid = collector.get("nodeid", "unknown")
|
||||
path = nodeid.split("::")[0]
|
||||
parts = path.split("/")
|
||||
if len(parts) >= 2:
|
||||
group_key = f"{parts[0]}/{parts[1]}"
|
||||
else:
|
||||
group_key = parts[0]
|
||||
grouped[group_key].append(collector)
|
||||
main_folder = path.split("/")[0] if "/" in path else path
|
||||
grouped[main_folder].append(collector)
|
||||
|
||||
# Trier les groupes par le second niveau du chemin (ex: allure, coverage)
|
||||
sorted_keys = sorted(grouped.keys(), key=lambda x: x.split("/")[1] if "/" in x else x)
|
||||
|
||||
for group in sorted_keys:
|
||||
collectors = grouped[group]
|
||||
for folder, collectors in grouped.items():
|
||||
# Outcome global du dossier
|
||||
has_fail = any(c.get("outcome") != "passed" for c in collectors)
|
||||
emoji = "✅" if not has_fail else "❌"
|
||||
f.write(f"<details>\n<summary>{emoji} {group}</summary>\n\n")
|
||||
folder_emoji = "✅" if not has_fail else "❌"
|
||||
|
||||
f.write(f"<details>\n<summary>{folder_emoji} {folder} ({len(collectors)} tests)</summary>\n\n")
|
||||
|
||||
# Résumé des outputs (optionnel : uniquement pour les failed ou all)
|
||||
outputs = []
|
||||
for collector in collectors:
|
||||
outcome = collector.get("outcome", "unknown")
|
||||
icon = "✅" if outcome == "passed" else "❌"
|
||||
nodeid = collector.get("nodeid", "unknown")
|
||||
short_node = nodeid.split("[")[0]
|
||||
f.write(f"<details>\n<summary>{icon} {short_node}</summary>\n\n")
|
||||
results = collector.get("result", [])
|
||||
if outcome != "passed" and results:
|
||||
outputs.append(f"### ❌ {short_node}\n```\n" + "\n".join(
|
||||
f"{k}: {v}" if isinstance(item, dict) else str(item)
|
||||
for item in results
|
||||
for k, v in item.items() if isinstance(item, dict)
|
||||
) + "\n```")
|
||||
|
||||
if outputs:
|
||||
f.write("### 🧾 Résumé des erreurs ou résultats\n\n")
|
||||
for out in outputs:
|
||||
f.write(out + "\n")
|
||||
|
||||
# Détail complet de tous les tests (triés)
|
||||
collectors_sorted = sorted(collectors, key=lambda c: c.get("nodeid", "").split("[")[0])
|
||||
for collector in collectors_sorted:
|
||||
outcome = collector.get("outcome", "unknown")
|
||||
emoji = "✅" if outcome == "passed" else "❌"
|
||||
nodeid = collector.get("nodeid", "unknown")
|
||||
short_node = nodeid.split("[")[0]
|
||||
f.write(f"<details>\n<summary>{emoji} {short_node}</summary>\n\n")
|
||||
f.write(f"- **outcome:** `{outcome}`\n")
|
||||
results = collector.get("result", [])
|
||||
if results:
|
||||
|
||||
Reference in New Issue
Block a user