diff --git a/conftest.py b/conftest.py index f0d10b8..c38c109 100644 --- a/conftest.py +++ b/conftest.py @@ -1,58 +1,5 @@ # conftest.py -import json -import os -''' -def safe_serialize(obj): - try: - json.dumps(obj) - return obj - except TypeError: - try: - return str(obj) - except Exception: - return "" - -def serialize_object(obj): - result = {} - for attr in dir(obj): - if attr.startswith("_"): - continue - try: - value = getattr(obj, attr) - result[attr] = safe_serialize(value) - except Exception: - result[attr] = "" - return result - -# Conteneurs pour stocker les dumps -all_data = { - "session": {}, - "tests": [] # chaque test contiendra item + call -} - -def pytest_sessionstart(session): - all_data["session"] = serialize_object(session) - -def pytest_runtest_makereport(item, call): - if call.when != "call": - return - item_dump = serialize_object(item) - call_dump = serialize_object(call) - all_data["tests"].append({ - "nodeid": item.nodeid, - "item": item_dump, - "call": call_dump - }) - -def pytest_sessionfinish(session, exitstatus): - os.makedirs("ci-reports/markdown", exist_ok=True) - print("✅ Dumping runtime_params.json...") - with open("ci-reports/markdown/runtime_params.json", "w") as f: - json.dump(all_data, f, indent=2) -''' - -import json -import os +import json, os, pathlib def safe_serialize(obj): try: @@ -66,16 +13,12 @@ def safe_serialize(obj): def serialize_callspec_between_getparam_and_setmulti(callspec): data = {} - - # Inclure uniquement ce qui est utile if hasattr(callspec, "params"): params = callspec.params if isinstance(params, dict): data["params"] = {str(k): safe_serialize(v) for k, v in params.items()} else: data["params"] = safe_serialize(params) - - # Tu peux ajouter d'autres attributs utiles ici si besoin for attr in ["id", "param_index"]: if hasattr(callspec, attr): try: @@ -84,7 +27,6 @@ def serialize_callspec_between_getparam_and_setmulti(callspec): data[attr] = safe_serialize(value) except Exception: data[attr] = "" - return data runtime_params = [] @@ -92,18 +34,25 @@ runtime_params = [] def pytest_runtest_makereport(item, call): if call.when != "call": return - - entry = { - "nodeid": item.nodeid, - "callspec": None - } - + entry = {"nodeid": item.nodeid, "callspec": None} if hasattr(item, "callspec"): entry["callspec"] = serialize_callspec_between_getparam_and_setmulti(item.callspec) - runtime_params.append(entry) +# === LOG DES PRINTS === +LOGFILE = pathlib.Path("outputs/test-prints.log") + +def pytest_sessionstart(session): + LOGFILE.parent.mkdir(parents=True, exist_ok=True) + LOGFILE.write_text("") # reset au début de la session + +def pytest_runtest_logreport(report): + if report.capstdout and report.capstdout.strip(): + with LOGFILE.open("a") as f: + f.write(f"\033[95m--- {report.nodeid} ({report.when}) ---\033[0m\n") + f.write(report.capstdout + "\n") + def pytest_sessionfinish(session, exitstatus): os.makedirs("markdown", exist_ok=True) with open("markdown/runtime_params.json", "w") as f: - json.dump(runtime_params, f, indent=2) \ No newline at end of file + json.dump(runtime_params, f, indent=2)