Update json_to_md.py
This commit is contained in:
+56
-27
@@ -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"<details>\n")
|
||||
f.write(" " * indent + f"<summary>📄 {name}</summary>\n\n")
|
||||
|
||||
for testname, collector in value:
|
||||
outcome = collector.get("outcome", "unknown")
|
||||
emoji = "✅" if outcome == "passed" else "❌"
|
||||
|
||||
f.write(" " * (indent+1) + f"<details>\n")
|
||||
f.write(" " * (indent+1) + f"<summary>{emoji} {testname}</summary>\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) + "</details>\n\n")
|
||||
f.write(" " * indent + "</details>\n\n")
|
||||
else: # Dossier
|
||||
f.write(" " * indent + f"<details>\n")
|
||||
f.write(" " * indent + f"<summary>📁 {name}</summary>\n\n")
|
||||
print_tree(value, indent + 1)
|
||||
f.write(" " * indent + "</details>\n\n")
|
||||
|
||||
print_tree(tree)
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user