/** * 滑动查找压测:反复用 findHomeCard 查找指定设备卡,验证新滑动(Woan swipe_up 几何)是否稳定、有无异常。 * 用法: PLATFORM=android ROUNDS=40 KEYWORDS="Bot,Curtain,Permanent Outdoor Lights,Cam" npx ts-node scripts/stress-find-cards.ts * 每轮:回首页(iOS 先回顶) → 对每个关键字 findHomeCard,记录 找到/未找到/耗时/异常。末尾打印每关键字成功率。 */ import * as dotenv from 'dotenv'; import * as path from 'path'; dotenv.config({ path: path.resolve(__dirname, '../.env') }); import { createDriver } from '../drivers/factory'; import { findHomeCard, scrollHomeToTopIOS, sleep } from '../utils/common'; const ROUNDS = Number(process.env.ROUNDS || 40); const KEYWORDS = (process.env.KEYWORDS || 'Bot,Curtain,Permanent Outdoor Lights,Cam').split(',').map(s => s.trim()).filter(Boolean); async function main() { const driver = createDriver(); await driver.createSession(); const plat = driver.platform; const stat: Record = {}; for (const k of KEYWORDS) stat[k] = { found: 0, miss: 0, err: 0, ms: [] }; console.log(`\n===== 滑动查找压测 [${plat}] ROUNDS=${ROUNDS} 关键字=${KEYWORDS.join('/')} =====`); for (let r = 1; r <= ROUNDS; r++) { for (const k of KEYWORDS) { const t0 = Date.now(); try { await driver.goBackToHomepage().catch(() => {}); await sleep(500); if (plat === 'ios') await scrollHomeToTopIOS(driver).catch(() => {}); const el = await findHomeCard(driver, k); const dt = Date.now() - t0; stat[k].ms.push(dt); if (el) stat[k].found++; else stat[k].miss++; if (!el) console.log(` [R${r}] ✗ 未找到 "${k}" (${(dt / 1000).toFixed(1)}s)`); } catch (e: any) { stat[k].err++; console.log(` [R${r}] ⚠️异常 "${k}": ${e.message}`); } } if (r % 5 === 0) { const line = KEYWORDS.map(k => `${k}:${stat[k].found}/${stat[k].found + stat[k].miss + stat[k].err}`).join(' | '); console.log(`[进度 R${r}/${ROUNDS}] ${line}`); } } console.log(`\n===== 压测结果 [${plat}] =====`); for (const k of KEYWORDS) { const s = stat[k]; const tot = s.found + s.miss + s.err; const avg = s.ms.length ? Math.round(s.ms.reduce((a, b) => a + b, 0) / s.ms.length) : 0; const max = s.ms.length ? Math.max(...s.ms) : 0; const rate = tot ? (100 * s.found / tot).toFixed(1) : '0'; console.log(` ${k.padEnd(28)} 找到 ${s.found}/${tot} (${rate}%) | 未找到 ${s.miss} | 异常 ${s.err} | 均耗时 ${avg}ms 最大 ${max}ms`); } await driver.destroySession(); } main().catch(e => { console.error('压测 ERR:', e.message); process.exit(1); });