57 lines
2.7 KiB
TypeScript
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); });
|