feat: add configuration management system
This commit is contained in:
@@ -0,0 +1,35 @@
|
|||||||
|
import { TestConfig } from '../types';
|
||||||
|
|
||||||
|
export const defaultConfig: TestConfig = {
|
||||||
|
baseURL: 'http://localhost:3000',
|
||||||
|
timeout: 5000,
|
||||||
|
retries: 3,
|
||||||
|
environment: 'development',
|
||||||
|
headless: true,
|
||||||
|
slowMo: undefined
|
||||||
|
};
|
||||||
|
|
||||||
|
export const testTimeouts = {
|
||||||
|
short: 2000,
|
||||||
|
medium: 5000,
|
||||||
|
long: 10000,
|
||||||
|
veryLong: 30000
|
||||||
|
};
|
||||||
|
|
||||||
|
export const testThresholds = {
|
||||||
|
performance: {
|
||||||
|
good: 90,
|
||||||
|
needsImprovement: 50,
|
||||||
|
poor: 0
|
||||||
|
},
|
||||||
|
accessibility: {
|
||||||
|
good: 95,
|
||||||
|
needsImprovement: 80,
|
||||||
|
poor: 0
|
||||||
|
},
|
||||||
|
seo: {
|
||||||
|
good: 90,
|
||||||
|
needsImprovement: 70,
|
||||||
|
poor: 0
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import { TestConfig } from '../types';
|
||||||
|
|
||||||
|
export const environments: Record<string, TestConfig> = {
|
||||||
|
development: {
|
||||||
|
baseURL: 'http://localhost:3000',
|
||||||
|
timeout: 5000,
|
||||||
|
retries: 3,
|
||||||
|
environment: 'development',
|
||||||
|
headless: false
|
||||||
|
},
|
||||||
|
staging: {
|
||||||
|
baseURL: 'https://staging.novalon.com',
|
||||||
|
timeout: 10000,
|
||||||
|
retries: 2,
|
||||||
|
environment: 'staging',
|
||||||
|
headless: true
|
||||||
|
},
|
||||||
|
production: {
|
||||||
|
baseURL: 'https://www.novalon.com',
|
||||||
|
timeout: 10000,
|
||||||
|
retries: 1,
|
||||||
|
environment: 'production',
|
||||||
|
headless: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export function getEnvironmentConfig(env: string = 'development'): TestConfig {
|
||||||
|
return environments[env] || environments.development;
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
export const formData = {
|
||||||
|
valid: {
|
||||||
|
name: '测试用户',
|
||||||
|
email: 'test@example.com',
|
||||||
|
phone: '13800138000',
|
||||||
|
message: '这是一条测试消息'
|
||||||
|
},
|
||||||
|
invalid: {
|
||||||
|
email: 'invalid-email',
|
||||||
|
phone: '123',
|
||||||
|
empty: ''
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const performanceThresholds = {
|
||||||
|
loadTime: 3000,
|
||||||
|
domContentLoaded: 2000,
|
||||||
|
firstContentfulPaint: 1500,
|
||||||
|
largestContentfulPaint: 2500,
|
||||||
|
cumulativeLayoutShift: 0.1,
|
||||||
|
firstInputDelay: 100
|
||||||
|
};
|
||||||
|
|
||||||
|
export const accessibilityThresholds = {
|
||||||
|
score: 80,
|
||||||
|
maxViolations: 5
|
||||||
|
};
|
||||||
|
|
||||||
|
export const seoThresholds = {
|
||||||
|
score: 80,
|
||||||
|
minTitleLength: 10,
|
||||||
|
maxTitleLength: 60,
|
||||||
|
minDescriptionLength: 50,
|
||||||
|
maxDescriptionLength: 160
|
||||||
|
};
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
import { PageConfig } from '../types';
|
||||||
|
|
||||||
|
export const testPages: Record<string, PageConfig> = {
|
||||||
|
home: {
|
||||||
|
name: '首页',
|
||||||
|
url: '/',
|
||||||
|
selectors: {
|
||||||
|
title: 'h1',
|
||||||
|
hero: '.hero-section',
|
||||||
|
features: '.features-section'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
about: {
|
||||||
|
name: '关于我们',
|
||||||
|
url: '/about',
|
||||||
|
selectors: {
|
||||||
|
title: 'h1',
|
||||||
|
content: '.about-content'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
contact: {
|
||||||
|
name: '联系我们',
|
||||||
|
url: '/contact',
|
||||||
|
selectors: {
|
||||||
|
title: 'h1',
|
||||||
|
form: '#contact-form',
|
||||||
|
submitButton: 'button[type="submit"]'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
products: {
|
||||||
|
name: '产品',
|
||||||
|
url: '/products',
|
||||||
|
selectors: {
|
||||||
|
title: 'h1',
|
||||||
|
productGrid: '.products-grid',
|
||||||
|
productCard: '.product-card'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
services: {
|
||||||
|
name: '服务',
|
||||||
|
url: '/services',
|
||||||
|
selectors: {
|
||||||
|
title: 'h1',
|
||||||
|
servicesList: '.services-list',
|
||||||
|
serviceItem: '.service-item'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cases: {
|
||||||
|
name: '案例',
|
||||||
|
url: '/cases',
|
||||||
|
selectors: {
|
||||||
|
title: 'h1',
|
||||||
|
casesGrid: '.cases-grid',
|
||||||
|
caseCard: '.case-card'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
news: {
|
||||||
|
name: '新闻',
|
||||||
|
url: '/news',
|
||||||
|
selectors: {
|
||||||
|
title: 'h1',
|
||||||
|
newsList: '.news-list',
|
||||||
|
newsItem: '.news-item'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export function getPageConfig(pageKey: string): PageConfig {
|
||||||
|
return testPages[pageKey] || testPages.home;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getAllPageConfigs(): PageConfig[] {
|
||||||
|
return Object.values(testPages);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user