# 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): attributes = dir(callspec) try: start_index = attributes.index("getparam") + 1 end_index = attributes.index("setmulti") except ValueError: return {"error": "getparam or setmulti not found in callspec"} selected_attrs = attributes[start_index:end_index] data = {} for attr in selected_attrs: if attr != "indices": try: value = getattr(callspec, attr) if callable(value): continue 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)