# 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 def safe_serialize(obj): try: json.dumps(obj) return obj except TypeError: try: return str(obj) except Exception: return "" 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: value = getattr(callspec, attr) if not callable(value): data[attr] = safe_serialize(value) except Exception: data[attr] = "" return data runtime_params = [] def pytest_runtest_makereport(item, call): if call.when != "call": return entry = { "nodeid": item.nodeid, "callspec": None } if hasattr(item, "callspec"): entry["callspec"] = serialize_callspec_between_getparam_and_setmulti(item.callspec) runtime_params.append(entry) def pytest_sessionfinish(session, exitstatus): os.makedirs("ci-reports/markdown", exist_ok=True) with open("ci-reports/markdown/runtime_params.json", "w") as f: json.dump(runtime_params, f, indent=2)