feat: add mobile test data generator

This commit is contained in:
张翔
2026-03-05 14:34:44 +08:00
parent c4d758ad6e
commit 726579a833
+87
View File
@@ -0,0 +1,87 @@
import { Page } from '@playwright/test';
import { getNetworkConfig, NetworkConfig } from '../config/network-configs';
import { getDevice, DeviceConfig } from './devices';
export class MobileTestDataGenerator {
static generateUserAgent(device: string): string {
const deviceConfig = getDevice(device);
return deviceConfig.userAgent || '';
}
static generateNetworkConfig(type: '2G' | '3G' | '4G' | 'WiFi' | 'offline'): NetworkConfig {
const configMap = {
'2G': '2g-slow',
'3G': '3g-fast',
'4G': '4g-lte',
'WiFi': 'wifi-fast',
'offline': 'offline',
};
return getNetworkConfig(configMap[type]);
}
}
export interface TouchEventData {
type: 'tap' | 'swipe' | 'pinch' | 'longPress';
x: number;
y: number;
duration?: number;
distance?: number;
}
export interface PerformanceBaseline {
device: string;
network: string;
LCP: number;
FCP: number;
CLS: number;
FID: number;
TTI: number;
}
MobileTestDataGenerator.generateTouchEvent = function(type: 'tap' | 'swipe' | 'pinch' | 'longPress'): TouchEventData {
const baseData = {
x: Math.floor(Math.random() * 375),
y: Math.floor(Math.random() * 667),
};
switch (type) {
case 'tap':
return { ...baseData, type: 'tap' };
case 'swipe':
return { ...baseData, type: 'swipe', duration: 500 };
case 'pinch':
return { ...baseData, type: 'pinch', distance: 100 };
case 'longPress':
return { ...baseData, type: 'longPress', duration: 1000 };
default:
return { ...baseData, type: 'tap' };
}
};
MobileTestDataGenerator.generatePerformanceBaseline = function(device: string, network: string): PerformanceBaseline {
const deviceMultiplier = {
'mobile-375x667': 1.2,
'mobile-414x896': 1.1,
'tablet-768x1024': 0.9,
'desktop-1920x1080': 0.8,
}[device] || 1;
const networkMultiplier = {
'2g-slow': 3,
'3g-fast': 2,
'4g-lte': 1.5,
'wifi-fast': 1,
}[network] || 1;
const multiplier = deviceMultiplier * networkMultiplier;
return {
device,
network,
LCP: 2500 * multiplier,
FCP: 1800 * multiplier,
CLS: 0.1,
FID: 100 * multiplier,
TTI: 3800 * multiplier,
};
};