Files
cma-management/backend/scripts/verify_10reload_no_freeze_20260903.py

89 lines
3.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""BUG-001 验收:3页面×10次整页刷新,无卡"加载中"超10s(2026-09-03 修复后)
判据: location.href 整页刷新 → 轮询(0.5s)直到 body>100 且非壳页"加载中" → 耗时 <= 10s
"""
import sys, json, time
sys.path.insert(0, "/root/.hermes/profiles/wecom-yanxue/skills/operations/cdp-browser-automation/scripts")
from cdp_helpers import CDPBrowser
CDP = "http://127.0.0.1:9226"
BASE = "https://cma.sxbh.ltd"
def pick_tab(url_needle):
tabs = json.loads(__import__("urllib.request").request.urlopen(CDP + "/json", timeout=5).read())
for t in tabs:
if t.get("type") == "page" and url_needle in t.get("url", ""):
return t
raise LookupError("无匹配tab: " + url_needle)
def fresh_browser(url_needle):
"""复用已登录 tab(每轮重连,防导航断ws)"""
b = CDPBrowser(cdp=CDP, base_url=BASE)
b.use_existing_tab(url_needle)
return b
def reload_and_time(url, url_needle, max_wait=12):
"""整页刷新并计时到渲染完成。返回 (耗时秒, body_len, 超时?)"""
b = fresh_browser(url_needle)
t0 = time.time()
try:
b.js("location.href='" + url + "'")
except Exception:
pass # 导航即断ws属正常
body = ""
waited = 0
last_err = None
while waited < max_wait:
time.sleep(0.5)
waited += 0.5
try:
body = b.js("document.body ? document.body.innerText : ''") or ""
except Exception as e:
last_err = e
try:
b = fresh_browser(url_needle)
body = b.js("document.body ? document.body.innerText : ''") or ""
except Exception as e2:
last_err = e2
body = ""
if len(body) > 100 and "加载中" not in body[:60]:
return round(time.time() - t0, 2), len(body), False, ""
return round(time.time() - t0, 2), len(body), True, str(last_err or "")
targets = [
("/ai-suggestions", "ai-suggestions"),
("/alerts", "alerts"),
("/my-dashboard", "my-dashboard"),
]
N = 10
all_pass = True
for url, needle in targets:
print(f"\n===== {url} =====")
# 预热 1 次(下载新版hash资源入缓存)
try:
t, bl, to, err = reload_and_time(url, needle)
print(f"[预热] {t}s body={bl} timeout={to}")
except Exception as e:
print(f"[预热失败] {e} —— 检查tab是否存在/登录态")
sys.exit(1)
times = []
for i in range(1, N + 1):
try:
t, bl, to, err = reload_and_time(url, needle)
except Exception as e:
print(f"[{i}] 异常: {e}")
all_pass = False
times.append(99.0)
continue
flag = "❌" if to else "✅"
if to:
all_pass = False
times.append(t)
print(f"[{i:02d}] {flag} {t}s body={bl}" + (f" err={err[:60]}" if err else ""))
over = [x for x in times if x > 10]
print(f" 最快{min(times)}s 最慢{max(times)}s 平均{sum(times)/len(times):.2f}s 超10s次数={len(over)}")
print("\n=== 验收结论 ===")
print("PASS: 10连刷无卡'加载中'超10s" if all_pass else "FAIL: 存在卡'加载中'超10s")