diff --git a/json_to_md.py b/json_to_md.py
index 058f161a5..41a1456b5 100644
--- a/json_to_md.py
+++ b/json_to_md.py
@@ -70,37 +70,66 @@ def json_to_md_nested(json_path, md_path, allure_dir=None):
f.write("\n")
if "collectors" in data:
- f.write("## 📚 Collectés (Par Fichier)\n\n")
+ f.write("## 🌳 Collectés (Arborescence)\n\n")
- # 1. Filtrage et nettoyage des collectors valides
- valid_collectors = []
+ # 1. Construire l'arborescence
+ tree = {}
for collector in data["collectors"]:
nodeid = collector.get("nodeid", "")
- if "::" in nodeid: # Uniquement les nodeids valides
- filename, testname = nodeid.split("::", 1)
- filename = filename.replace("tests/", "").replace("tests\\", "")
- testname = testname.split("[")[0] # Enlève les paramètres
- valid_collectors.append((filename, testname, collector))
-
- # 2. Groupement par fichier
- files = defaultdict(list)
- for filename, testname, collector in valid_collectors:
- files[filename].append((testname, collector))
-
- # 3. Affichage structuré
- for filename, tests in sorted(files.items()):
- f.write(f"### 📄 {filename}\n")
- for testname, collector in sorted(tests):
- outcome = collector.get("outcome", "unknown")
- emoji = "✅" if outcome == "passed" else "❌"
+ if not nodeid or "::" not in nodeid:
+ continue
- f.write(f"- {emoji} `{testname}`\n")
- if collector.get("result"):
- f.write(" ```\n")
- for item in collector["result"]:
- f.write(f" {str(item)}\n")
- f.write(" ```\n")
- f.write("\n")
+ path, testname = nodeid.split("::", 1)
+ testname = testname.split("[")[0] # Enlever les paramètres
+
+ # Construire la structure de dossiers
+ current = tree
+ parts = path.split("/")
+ for part in parts[:-1]: # Parcourir les dossiers
+ if part not in current:
+ current[part] = {}
+ current = current[part]
+
+ # Ajouter le test
+ filename = parts[-1]
+ if filename not in current:
+ current[filename] = []
+ current[filename].append((testname, collector))
+
+ # 2. Fonction récursive d'affichage
+ def print_tree(node, indent=0):
+ for name, value in sorted(node.items()):
+ if isinstance(value, list): # Fichier avec tests
+ f.write(" " * indent + f"\n")
+ f.write(" " * indent + f"📄 {name}
\n\n")
+
+ for testname, collector in value:
+ outcome = collector.get("outcome", "unknown")
+ emoji = "✅" if outcome == "passed" else "❌"
+
+ f.write(" " * (indent+1) + f"\n")
+ f.write(" " * (indent+1) + f"{emoji} {testname}
\n\n")
+ f.write(" " * (indent+2) + f"- **outcome:** `{outcome}`\n")
+
+ if collector.get("result"):
+ f.write(" " * (indent+2) + "- **result:**\n```\n")
+ for item in collector["result"]:
+ if isinstance(item, dict):
+ for k, v in item.items():
+ f.write(f" {k}: {v}\n")
+ else:
+ f.write(f" {item}\n")
+ f.write("```\n")
+
+ f.write(" " * (indent+1) + " \n\n")
+ f.write(" " * indent + " \n\n")
+ else: # Dossier
+ f.write(" " * indent + f"\n")
+ f.write(" " * indent + f"📁 {name}
\n\n")
+ print_tree(value, indent + 1)
+ f.write(" " * indent + " \n\n")
+
+ print_tree(tree)