feat: add dev-audit test suites

This commit is contained in:
张翔
2026-03-06 12:22:10 +08:00
parent f41bd12517
commit c63f86c302
4 changed files with 136 additions and 0 deletions
@@ -0,0 +1,29 @@
import { test, expect } from '@playwright/test';
import { HomePage, AboutPage, ContactPage } from '../../shared/pages';
import { AccessibilityTester } from '../../shared/utils/accessibility/AccessibilityTester';
import { accessibilityThresholds } from '../../shared/config/test-data';
import { getPageConfig } from '../../shared/config/test-pages';
test.describe('可访问性测试', () => {
const pages = [
{ name: '首页', PageClass: HomePage },
{ name: '关于我们', PageClass: AboutPage },
{ name: '联系我们', PageClass: ContactPage }
];
pages.forEach(({ name, PageClass }) => {
test(`${name} - 可访问性验证`, async ({ page }) => {
const pageConfig = getPageConfig(name === '首页' ? 'home' : name === '关于我们' ? 'about' : 'contact');
const pageObj = new PageClass(page);
const tester = new AccessibilityTester(page);
await pageObj.navigate();
const result = await tester.runAxeScan(pageConfig.name, pageConfig.url);
console.log(`${name} 可访问性结果:`, result);
expect(result.score).toBeGreaterThanOrEqual(accessibilityThresholds.score);
expect(result.violations.length).toBeLessThanOrEqual(accessibilityThresholds.maxViolations);
});
});
});
@@ -0,0 +1,48 @@
import { test, expect } from '@playwright/test';
import { ContactPage } from '../../shared/pages';
import { formData } from '../../shared/config/test-data';
test.describe('表单验证测试', () => {
test('联系表单 - 有效数据提交', async ({ page }) => {
const contactPage = new ContactPage(page);
await contactPage.navigate();
await contactPage.fillContactForm(formData.valid);
await contactPage.submitForm();
const successMessage = await contactPage.getFormSuccessMessage();
expect(successMessage).toContain('成功');
});
test('联系表单 - 必填字段验证', async ({ page }) => {
const contactPage = new ContactPage(page);
await contactPage.navigate();
await contactPage.fillContactForm({
name: '',
email: '',
phone: '',
message: ''
});
await contactPage.submitForm();
const errorMessage = await contactPage.getFormErrorMessage();
expect(errorMessage).toBeTruthy();
});
test('联系表单 - 邮箱格式验证', async ({ page }) => {
const contactPage = new ContactPage(page);
await contactPage.navigate();
await contactPage.fillContactForm({
name: '测试用户',
email: formData.invalid.email,
phone: '13800138000',
message: '测试消息'
});
await contactPage.submitForm();
const errorMessage = await contactPage.getFormErrorMessage();
expect(errorMessage).toContain('邮箱');
});
});
@@ -0,0 +1,31 @@
import { test, expect } from '@playwright/test';
import { HomePage, AboutPage, ContactPage, ProductsPage, ServicesPage, CasesPage, NewsPage } from '../../shared/pages';
import { PerformanceMonitor } from '../../shared/utils/performance/PerformanceMonitor';
import { performanceThresholds } from '../../shared/config/test-data';
test.describe('性能审计测试', () => {
const pages = [
{ name: '首页', PageClass: HomePage },
{ name: '关于我们', PageClass: AboutPage },
{ name: '联系我们', PageClass: ContactPage },
{ name: '产品', PageClass: ProductsPage },
{ name: '服务', PageClass: ServicesPage },
{ name: '案例', PageClass: CasesPage },
{ name: '新闻', PageClass: NewsPage }
];
pages.forEach(({ name, PageClass }) => {
test(`${name} - 页面加载性能`, async ({ page }) => {
const pageObj = new PageClass(page);
const monitor = new PerformanceMonitor(page);
await pageObj.navigate();
const metrics = await monitor.measurePageLoad();
console.log(`${name} 性能指标:`, metrics);
expect(metrics.loadTime).toBeLessThan(performanceThresholds.loadTime);
expect(metrics.domContentLoaded).toBeLessThan(performanceThresholds.domContentLoaded);
});
});
});
+28
View File
@@ -0,0 +1,28 @@
import { test, expect } from '@playwright/test';
import { HomePage, AboutPage, ContactPage } from '../../shared/pages';
import { SEOValidator } from '../../shared/utils/seo/SEOValidator';
import { seoThresholds } from '../../shared/config/test-data';
test.describe('SEO检查测试', () => {
const pages = [
{ name: '首页', PageClass: HomePage },
{ name: '关于我们', PageClass: AboutPage },
{ name: '联系我们', PageClass: ContactPage }
];
pages.forEach(({ name, PageClass }) => {
test(`${name} - SEO验证`, async ({ page }) => {
const pageObj = new PageClass(page);
const validator = new SEOValidator(page);
await pageObj.navigate();
const result = await validator.validateSEO();
console.log(`${name} SEO结果:`, result);
expect(result.score).toBeGreaterThanOrEqual(seoThresholds.score);
expect(result.metaTags.title).toBe(true);
expect(result.metaTags.description).toBe(true);
});
});
});