Files
html/tests/l99-mega-test.py
2026-04-12 22:57:03 +02:00

151 lines
6.4 KiB
Python

#!/usr/bin/env python3
"""L99 MEGA TEST — ALL PAGES + SCREENSHOTS + SCENARIOS"""
import json,time,os
from playwright.sync_api import sync_playwright
BASE="https://weval-consulting.com"
SSDIR="/var/www/html/test-report/screenshots"
os.makedirs(SSDIR,exist_ok=True)
PAGES=[
"index.html","login.html","register.html","cgu.html","booking.html","case-studies.html",
"admin.html","admin-v2.html","admin-saas.html",
"agents-archi.html","agents-fleet.html","agents-goodjob.html",
"ai-benchmark.html","architecture.html","apps.html",
"blade-ai.html","blade-center.html","blade-install.html",
"claude-monitor.html","claw-chat.html","claw-code.html",
"command-center.html","crons-monitor.html",
"director.html","director-center.html","director-chat.html",
"enterprise-model.html","enterprise-management.html",
"l99.html","l99-brain.html","l99-saas.html",
"monitoring.html","mega-command-center.html",
"openclaw.html","oss-discovery.html",
"paperclip.html","value-streaming.html",
"wevia.html","wevia-master.html","wevia-console.html","wevia-meeting-rooms.html",
"wevia-widget.html","weval-login.html",
]
SUBS=["crm","paperclip","langfuse","deerflow","analytics","mm","monitor","n8n","git"]
APIS=["/api/nonreg-api.php?cat=all","/api/wevia-master-autoheal.php","/api/wevia-deep-test.php",
"/api/ecosystem-health.php","/api/openclaw-proxy.php","/api/architecture-index.json"]
results={"pages":[],"subs":[],"apis":[],"scenarios":[],"summary":{}}
t0=time.time()
with sync_playwright() as p:
browser=p.chromium.launch(headless=True,args=["--no-sandbox","--ignore-certificate-errors"])
ctx=browser.new_context(ignore_https_errors=True,
record_video_dir="/var/www/html/test-report/videos",
record_video_size={"width":1280,"height":720})
# PHASE 1: ALL PAGES
print(f"PHASE 1: {len(PAGES)} pages")
for pg in PAGES:
page=ctx.new_page()
js_errs=[]
page.on("pageerror",lambda e:js_errs.append(str(e)[:80]))
try:
r=page.goto(f"{BASE}/{pg}",wait_until="networkidle",timeout=15000)
status=r.status if r else 0
size=len(page.content())
title=page.title()[:40]
ss=pg.replace(".html","")+".png"
page.screenshot(path=f"{SSDIR}/{ss}")
ok=(status in[200,302])and size>500
results["pages"].append({"page":pg,"status":status,"size":size,"title":title,"jsErrors":len(js_errs),"errors":js_errs[:3],"screenshot":ss,"pass":ok})
print(f" {'V' if ok else 'X'} {pg} {status} {size}b {len(js_errs)}err")
except Exception as e:
results["pages"].append({"page":pg,"status":0,"error":str(e)[:60],"pass":False})
print(f" X {pg} TIMEOUT")
page.close()
# PHASE 2: SUBDOMAINS
print(f"PHASE 2: {len(SUBS)} subs")
for sub in SUBS:
page=ctx.new_page()
try:
r=page.goto(f"https://{sub}.weval-consulting.com/",wait_until="networkidle",timeout=10000)
ok=r and r.status in[200,302]
results["subs"].append({"sub":sub,"status":r.status if r else 0,"pass":ok})
print(f" {'V' if ok else 'X'} {sub} {r.status if r else 0}")
except:
results["subs"].append({"sub":sub,"status":0,"pass":False})
print(f" X {sub} TIMEOUT")
page.close()
# PHASE 3: APIs
print(f"PHASE 3: {len(APIS)} APIs")
for api in APIS:
page=ctx.new_page()
try:
r=page.goto(f"{BASE}{api}",wait_until="networkidle",timeout=10000)
body=page.content()
ok=r and r.status==200 and "{" in body
results["apis"].append({"api":api,"status":r.status if r else 0,"pass":ok})
print(f" {'V' if ok else 'X'} {api} {r.status if r else 0}")
except:
results["apis"].append({"api":api,"status":0,"pass":False})
print(f" X {api}")
page.close()
# PHASE 4: SCENARIOS
print("PHASE 4: Business scenarios")
scenarios=[
("Login form","login.html","input"),
("WEVIA chat","wevia.html",None),
("OpenClaw providers","openclaw.html","Groq"),
("Architecture data","architecture.html","score"),
("Enterprise model","enterprise-model.html",None),
("OSS tools","oss-discovery.html","skill"),
]
for name,pg,check in scenarios:
page=ctx.new_page()
try:
page.goto(f"{BASE}/{pg}",wait_until="networkidle",timeout=15000)
body=page.content()
if check=="input": ok=bool(page.query_selector("input"))
elif check: ok=check.lower() in body.lower()
else: ok=len(body)>5000
page.screenshot(path=f"{SSDIR}/scenario-{pg.replace('.html','')}.png")
results["scenarios"].append({"name":name,"pass":ok})
print(f" {'V' if ok else 'X'} {name}")
except:
results["scenarios"].append({"name":name,"pass":False})
print(f" X {name}")
page.close()
ctx.close()
browser.close()
# SUMMARY
pp=sum(1 for p in results["pages"] if p["pass"])
sp=sum(1 for s in results["subs"] if s["pass"])
ap=sum(1 for a in results["apis"] if a["pass"])
sc=sum(1 for s in results["scenarios"] if s["pass"])
total=len(results["pages"])+len(results["subs"])+len(results["apis"])+len(results["scenarios"])
tp=pp+sp+ap+sc
results["summary"]={
"ts":time.strftime("%Y-%m-%dT%H:%M:%S"),
"elapsed":round(time.time()-t0),
"pages":f"{pp}/{len(results['pages'])}",
"subs":f"{sp}/{len(results['subs'])}",
"apis":f"{ap}/{len(results['apis'])}",
"scenarios":f"{sc}/{len(results['scenarios'])}",
"total":f"{tp}/{total}",
"pct":round(100*tp/total) if total else 0,
"jsErrorPages":[p["page"] for p in results["pages"] if p.get("jsErrors",0)>0],
"failedPages":[p["page"] for p in results["pages"] if not p["pass"]],
"screenshots":SSDIR,
"videos":"/var/www/html/test-report/videos"
}
json.dump(results,open("/var/www/html/test-report/l99-mega-results.json","w"),indent=2)
print(f"\nPAGES: {results['summary']['pages']}")
print(f"SUBS: {results['summary']['subs']}")
print(f"APIs: {results['summary']['apis']}")
print(f"SCENARIOS: {results['summary']['scenarios']}")
print(f"TOTAL: {results['summary']['total']} ({results['summary']['pct']}%)")
print(f"JS ERRORS: {', '.join(results['summary']['jsErrorPages']) or 'none'}")
print(f"FAILED: {', '.join(results['summary']['failedPages']) or 'none'}")
print(f"TIME: {results['summary']['elapsed']}s")