AI_UIAutomation/scripts/stress-find-cards.ts

57 lines
2.7 KiB
TypeScript

/**
* 滑动查找压测:反复用 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<string, { found: number; miss: number; err: number; ms: number[] }> = {};
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); });