From 726579a8334b4b79c50d788e53baf0416cf34484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Thu, 5 Mar 2026 14:34:44 +0800 Subject: [PATCH] feat: add mobile test data generator --- e2e/src/utils/MobileTestDataGenerator.ts | 87 ++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 e2e/src/utils/MobileTestDataGenerator.ts diff --git a/e2e/src/utils/MobileTestDataGenerator.ts b/e2e/src/utils/MobileTestDataGenerator.ts new file mode 100644 index 0000000..36f06ff --- /dev/null +++ b/e2e/src/utils/MobileTestDataGenerator.ts @@ -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, + }; +}; \ No newline at end of file