Update json_to_md.py
This commit is contained in:
+28
-43
@@ -14,41 +14,26 @@ def stringify(obj):
|
||||
return f"`{str(obj)}`"
|
||||
|
||||
def extract_params(test):
|
||||
# 1. Cas où les params sont déjà extraits dans l'objet test
|
||||
if "params" in test and test["params"]:
|
||||
params = test["params"]
|
||||
if isinstance(params, dict):
|
||||
return "\n".join(f" - `{k}` = `{v}`" for k, v in params.items())
|
||||
return f" - `{params}`"
|
||||
|
||||
# 2. Extraction depuis le nodeid (format: test_name[params])
|
||||
if "params" in test:
|
||||
return stringify(test["params"])
|
||||
nodeid = test.get("nodeid", "")
|
||||
if "[" not in nodeid:
|
||||
return None
|
||||
|
||||
params_str = nodeid.split("[")[-1].rstrip("]")
|
||||
if not params_str:
|
||||
return None
|
||||
|
||||
# Détection du format (nommé ou positionnel)
|
||||
raw_params = nodeid.split("[")[-1].rstrip("]")
|
||||
lines = []
|
||||
if "=" in params_str: # Format nommé: key=value
|
||||
for param in params_str.split("-"):
|
||||
named = all("=" in p for p in raw_params.split("-"))
|
||||
if named:
|
||||
for param in raw_params.split("-"):
|
||||
if "=" in param:
|
||||
key, val = param.split("=", 1)
|
||||
lines.append(f" - `{key.strip()}` = `{val.strip()}`")
|
||||
name, value = param.split("=", 1)
|
||||
lines.append(f" - `{name.strip()}`: `{value.strip()}`")
|
||||
else:
|
||||
lines.append(f" - `{param.strip()}`")
|
||||
else: # Format positionnel: value1-value2
|
||||
for i, val in enumerate(params_str.split("-"), 1):
|
||||
lines.append(f" - Param {i}: `{val.strip()}`")
|
||||
|
||||
lines.append(f" - `{param.strip()}`")
|
||||
else:
|
||||
for i, value in enumerate(raw_params.split("-"), 1):
|
||||
lines.append(f" - Param {i}: `{value.strip()}`")
|
||||
return "\n".join(lines)
|
||||
|
||||
def clean_filename(filename):
|
||||
"""Enlève le préfixe tests\ des noms de fichiers"""
|
||||
return filename.replace("tests\\", "").replace("tests/", "")
|
||||
|
||||
def json_to_md_nested(json_path, md_path):
|
||||
with open(json_path) as f:
|
||||
data = json.load(f)
|
||||
@@ -71,40 +56,40 @@ def json_to_md_nested(json_path, md_path):
|
||||
for test in data["tests"]:
|
||||
nodeid = test.get("nodeid", "")
|
||||
parts = nodeid.split("::")
|
||||
filename = clean_filename(parts[0])
|
||||
filename = parts[0]
|
||||
funcname = parts[1].split("[")[0]
|
||||
grouped[filename][funcname].append(test)
|
||||
|
||||
for filename, funcs in grouped.items():
|
||||
f.write(f"<details>\n <summary>📁 {filename}</summary>\n\n")
|
||||
f.write(f"<details>\n<summary>📁 {filename}</summary>\n\n")
|
||||
for funcname, tests in funcs.items():
|
||||
f.write(f" <details>\n <summary>🔧 Fonction: `{funcname}`</summary>\n\n")
|
||||
f.write(f"<details>\n<summary>🔧 Fonction: `{funcname}`</summary>\n\n")
|
||||
for idx, test in enumerate(tests, 1):
|
||||
outcome = test.get("outcome", "unknown")
|
||||
icons = {"passed": "✅", "failed": "❌", "skipped": "⏭️", "error": "❗"}
|
||||
emoji = icons.get(outcome, "❔")
|
||||
f.write(f" <details>\n <summary>{emoji} #{idx}</summary>\n\n")
|
||||
f.write(f"<details>\n<summary>{emoji} #{idx}</summary>\n\n")
|
||||
|
||||
param_string = extract_params(test)
|
||||
if param_string:
|
||||
f.write(f" - **Paramètres:**\n{param_string}\n")
|
||||
f.write(f"- **Paramètres:**\n{param_string}\n")
|
||||
|
||||
f.write(f" - **Statut:** {emoji} `{outcome}`\n")
|
||||
f.write(f"- **Statut:** {emoji} `{outcome}`\n")
|
||||
duration = test.get("call", {}).get("duration")
|
||||
f.write(f" - **Durée:** `{duration:.6f}` s\n" if duration else " - **Durée:** `None`\n")
|
||||
f.write(f"- **Durée:** `{duration:.6f}` s\n" if duration else "- **Durée:** `None`\n")
|
||||
|
||||
if outcome != "passed":
|
||||
f.write(" - **Détails:**\n")
|
||||
f.write(" <details>\n <summary>Détails</summary>\n\n")
|
||||
f.write("- **Détails:**\n")
|
||||
f.write("<details>\n<summary>Détails</summary>\n\n")
|
||||
for key in ['duration', 'outcome', 'crash', 'traceback', 'longrepr']:
|
||||
value = test.get("call", {}).get(key)
|
||||
f.write(f" - **{key}:**\n")
|
||||
f.write(" ```\n")
|
||||
f.write(f" {value if value else 'None'}\n")
|
||||
f.write(" ```\n\n")
|
||||
f.write(" </details>\n")
|
||||
f.write(" </details>\n\n")
|
||||
f.write(" </details>\n\n")
|
||||
f.write(f"- **{key}:**\n")
|
||||
f.write("```\n")
|
||||
f.write(f"{value if value else 'None'}\n")
|
||||
f.write("```\n\n")
|
||||
f.write("</details>\n")
|
||||
f.write("</details>\n\n")
|
||||
f.write("</details>\n\n")
|
||||
f.write("</details>\n\n")
|
||||
|
||||
def main():
|
||||
|
||||
Reference in New Issue
Block a user