61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
# conftest.py
|
|
import json
|
|
import os
|
|
import sys
|
|
import builtins
|
|
|
|
def serialize(obj):
|
|
try:
|
|
if isinstance(obj, (str, int, float, bool)) or obj is None:
|
|
return obj
|
|
if isinstance(obj, (list, tuple, set)):
|
|
return [serialize(o) for o in obj]
|
|
if isinstance(obj, dict):
|
|
return {str(k): serialize(v) for k, v in obj.items()}
|
|
return str(obj)
|
|
except Exception:
|
|
return "<unserializable>"
|
|
|
|
ALL_PYTEST_DATA = {
|
|
"sys_argv": sys.argv,
|
|
"builtins": list(dir(builtins)),
|
|
"hooks": {},
|
|
"collection": [],
|
|
"test_reports": [],
|
|
"config": {},
|
|
}
|
|
|
|
def pytest_configure(config):
|
|
ALL_PYTEST_DATA["config"] = serialize(vars(config))
|
|
|
|
def pytest_sessionstart(session):
|
|
ALL_PYTEST_DATA["session_start"] = serialize(vars(session))
|
|
|
|
def pytest_collection_modifyitems(session, config, items):
|
|
for item in items:
|
|
try:
|
|
ALL_PYTEST_DATA["collection"].append({
|
|
"nodeid": item.nodeid,
|
|
"keywords": list(item.keywords),
|
|
"module": str(item.module),
|
|
"name": item.name
|
|
})
|
|
except Exception:
|
|
pass
|
|
|
|
def pytest_runtest_logreport(report):
|
|
try:
|
|
ALL_PYTEST_DATA["test_reports"].append({
|
|
"nodeid": report.nodeid,
|
|
"outcome": report.outcome,
|
|
"when": report.when,
|
|
"longrepr": str(report.longrepr),
|
|
})
|
|
except Exception:
|
|
pass
|
|
|
|
def pytest_unconfigure(config):
|
|
os.makedirs("ci-reports/markdown", exist_ok=True)
|
|
with open("ci-reports/markdown/_everything_pytest_saw.json", "w") as f:
|
|
json.dump(ALL_PYTEST_DATA, f, indent=2)
|