54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
# conftest.py
|
||
import json
|
||
import os
|
||
|
||
def safe_serialize(obj):
|
||
"""Convertit n'importe quel objet Python en une forme JSON-sérialisable"""
|
||
try:
|
||
json.dumps(obj)
|
||
return obj
|
||
except TypeError:
|
||
try:
|
||
return str(obj)
|
||
except Exception:
|
||
return "<unserializable>"
|
||
|
||
def serialize_object(obj):
|
||
"""Sérialise tous les attributs publics d’un objet"""
|
||
result = {}
|
||
for attr in dir(obj):
|
||
if attr.startswith("_"):
|
||
continue
|
||
try:
|
||
value = getattr(obj, attr)
|
||
result[attr] = safe_serialize(value)
|
||
except Exception:
|
||
result[attr] = "<error>"
|
||
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(runtime_params, f, indent=2)
|