Files
novalon-website/docs/plans/2026-03-06-system-test-fixes.md
T
张翔 feb646efe5 fix: 修复移动端导航菜单选择器问题
feat: 为主导航菜单和页面区块添加ARIA属性

fix: 解决工作时间信息获取问题

perf: 优化页面滚动功能实现

fix: 修正联系页面标题显示问题

test: 运行完整测试套件验证修复效果

docs: 添加修复完成报告
2026-03-07 15:20:40 +08:00

1471 lines
31 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 系统测试修复实施计划
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
**目标:** 修复所有测试失败,实现100%测试通过率,确保系统安全上线
**架构:** 采用并行修复策略,按测试类型集中修复:表单测试 → 性能测试 → SEO和可访问性测试,每个阶段达到100%通过率后进入下一阶段
**技术栈:** Next.js 16, React 19, TypeScript, Playwright, Lighthouse, Zod
---
## 测试现状分析
### 当前测试通过率
- **表单测试**: 80% (16/20通过,4个失败)
- **性能测试**: 74.3% (26/35通过,9个失败)
- **综合审计测试**: 95.3% (61/64通过,3个未运行)
- **总体通过率**: 约85% (相比之前的41.6%有显著改善)
### 失败测试详情
#### 表单测试失败项
1. 联系表单 - 有效数据提交 (Chromium失败)
2. 联系表单 - 必填字段验证 (Chromium失败)
3. 联系表单 - 邮箱格式验证 (Chromium失败)
4. 联系表单 - API错误处理 (Chromium失败)
#### 性能测试失败项
1. 首页 - 页面加载性能 (Chromium, Webkit, Mobile Chrome失败)
2. 关于我们 - 页面加载性能 (Mobile Chrome失败)
3. 联系我们 - 页面加载性能 (Mobile Chrome失败)
4. 产品 - 页面加载性能 (Mobile Chrome失败)
5. 服务 - 页面加载性能 (Webkit, Mobile Chrome失败)
6. 案例 - 页面加载性能 (Webkit, Mobile Chrome失败)
7. 新闻 - 页面加载性能 (Webkit, Mobile Chrome失败)
---
## 阶段1:表单测试修复 (目标:100%)
### Task 1: 修复联系表单API路由实现
**文件:**
- 修改: `src/app/api/contact/route.ts`
**Step 1: 检查现有API路由实现**
```bash
cat src/app/api/contact/route.ts
```
预期: 查看当前API路由实现,了解现有逻辑
**Step 2: 创建或更新API路由文件**
如果文件不存在,创建新文件:
```typescript
import { NextRequest, NextResponse } from 'next/server';
import { submitContactForm } from '../../(marketing)/contact/actions';
export async function POST(request: NextRequest) {
try {
const formData = await request.formData();
const result = await submitContactForm(null, formData);
if (result.success) {
return NextResponse.json(result, { status: 200 });
} else {
return NextResponse.json(result, { status: 400 });
}
} catch (error) {
console.error('Contact form submission error:', error);
return NextResponse.json(
{ success: false, error: '服务器错误,请稍后重试' },
{ status: 500 }
);
}
}
```
**Step 3: 运行表单测试验证API修复**
```bash
cd test-framework
npm run test:dev-audit:forms
```
预期: API错误处理测试通过
**Step 4: 提交修复**
```bash
git add src/app/api/contact/route.ts
git commit -m "fix: implement contact form API route with proper error handling"
```
---
### Task 2: 增强表单验证逻辑
**文件:**
- 修改: `src/app/(marketing)/contact/page.tsx`
**Step 1: 添加实时验证反馈**
在联系表单组件中添加验证状态显示:
```typescript
// 在ContactPage组件中添加验证状态
const [validationStatus, setValidationStatus] = useState<Record<string, boolean>>({});
const handleBlur = (field: keyof ContactFormData, value: string) => {
validateField(field, value);
setValidationStatus(prev => ({ ...prev, [field]: true }));
};
```
**Step 2: 更新Input组件以显示验证状态**
修改Input组件调用:
```typescript
<Input
name="name"
data-testid="name-input"
label="姓名"
id="name"
placeholder="请输入您的姓名"
required
value={formData.name}
onChange={(e) => handleChange('name', e.target.value)}
onBlur={(e) => handleBlur('name', e.target.value)}
error={errors.name}
isValid={validationStatus.name && !errors.name}
/>
```
**Step 3: 运行必填字段验证测试**
```bash
cd test-framework
npm run test:dev-audit:forms -- --grep "必填字段验证"
```
预期: 必填字段验证测试通过
**Step 4: 提交修复**
```bash
git add src/app/(marketing)/contact/page.tsx
git commit -m "feat: enhance form validation with real-time feedback"
```
---
### Task 3: 修复邮箱格式验证
**文件:**
- 修改: `src/app/(marketing)/contact/page.tsx`
**Step 1: 检查邮箱验证正则表达式**
确认当前邮箱验证逻辑:
```typescript
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
```
**Step 2: 增强邮箱验证规则**
更新contactFormSchema中的邮箱验证:
```typescript
const contactFormSchema = z.object({
name: z.string().min(2, '姓名至少需要2个字符'),
phone: z.string().regex(/^1[3-9]\d{9}$/, '请输入有效的手机号码'),
email: z.string()
.min(1, '邮箱不能为空')
.email('请输入有效的邮箱地址')
.regex(/^[^\s@]+@[^\s@]+\.[^\s@]+$/, '请输入有效的邮箱地址'),
subject: z.string().min(2, '主题至少需要2个字符'),
message: z.string().min(10, '留言内容至少需要10个字符'),
});
```
**Step 3: 运行邮箱格式验证测试**
```bash
cd test-framework
npm run test:dev-audit:forms -- --grep "邮箱格式验证"
```
预期: 邮箱格式验证测试通过
**Step 4: 提交修复**
```bash
git add src/app/(marketing)/contact/page.tsx
git commit -m "fix: enhance email validation with stricter rules"
```
---
### Task 4: 完善表单提交成功/失败处理
**文件:**
- 修改: `src/app/(marketing)/contact/page.tsx`
**Step 1: 添加成功消息显示元素**
在表单提交成功后显示成功消息:
```typescript
{isSubmitted && (
<div data-testid="success-message" className="text-center py-8">
<div className="w-16 h-16 bg-green-500 rounded-full flex items-center justify-center mx-auto mb-4">
<CheckCircle2 className="w-8 h-8 text-white" />
</div>
<h4 className="text-xl font-semibold mb-2"></h4>
<p className="text-gray-600"></p>
</div>
)}
```
**Step 2: 添加错误消息显示元素**
在表单提交失败时显示错误消息:
```typescript
{!isSubmitted && showToast && toastType === 'error' && (
<div data-testid="error-message" className="bg-red-50 border border-red-200 text-red-700 px-4 py-3 rounded mb-4">
{toastMessage}
</div>
)}
```
**Step 3: 运行表单提交测试**
```bash
cd test-framework
npm run test:dev-audit:forms -- --grep "有效数据提交"
```
预期: 有效数据提交测试通过
**Step 4: 提交修复**
```bash
git add src/app/(marketing)/contact/page.tsx
git commit -m "feat: add success and error message display for form submission"
```
---
### Task 5: 验证所有表单测试通过
**Step 1: 运行完整表单测试套件**
```bash
cd test-framework
npm run test:dev-audit:forms
```
预期: 所有表单测试100%通过 (20/20)
**Step 2: 检查测试报告**
```bash
npm run test:report
```
预期: 表单测试全部通过,无失败项
**Step 3: 创建阶段完成标记**
```bash
echo "表单测试修复完成 - $(date)" >> test-framework/progress.md
git add test-framework/progress.md
git commit -m "chore: mark form testing phase complete (100% pass rate)"
```
---
## 阶段2:性能测试修复 (目标:100%)
### Task 6: 分析性能测试失败原因
**文件:**
- 查看: `test-framework/shared/config/test-data.ts`
- 查看: `test-framework/shared/utils/performance/PerformanceMonitor.ts`
**Step 1: 检查性能阈值配置**
```bash
cat test-framework/shared/config/test-data.ts | grep -A 10 performanceThresholds
```
预期: 查看当前性能阈值设置
**Step 2: 运行性能测试获取详细指标**
```bash
cd test-framework
npm run test:dev-audit:performance
```
预期: 获取各页面实际性能指标
**Step 3: 分析性能瓶颈**
```bash
# 查看测试结果中的性能指标
cat test-framework/test-framework/reports/results.json | grep -A 5 "performance"
```
预期: 识别主要性能问题(加载时间、LCP、TTI等)
**Step 4: 记录性能基准数据**
```bash
echo "性能基准数据 - $(date)" >> test-framework/performance-baseline.md
npm run test:dev-audit:performance >> test-framework/performance-baseline.md
```
---
### Task 7: 优化图片资源加载
**文件:**
- 修改: `next.config.ts`
- 修改: `src/components/ui/optimized-image.tsx`
**Step 1: 启用Next.js图片优化**
更新next.config.ts
```typescript
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
output: "export",
distDir: "dist",
images: {
unoptimized: false,
formats: ['image/avif', 'image/webp'],
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
},
};
export default nextConfig;
```
**Step 2: 创建优化图片组件**
创建或更新OptimizedImage组件:
```typescript
'use client';
import Image from 'next/image';
import { useState } from 'react';
interface OptimizedImageProps {
src: string;
alt: string;
width?: number;
height?: number;
className?: string;
priority?: boolean;
}
export function OptimizedImage({
src,
alt,
width = 800,
height = 600,
className = '',
priority = false
}: OptimizedImageProps) {
const [isLoading, setIsLoading] = useState(true);
return (
<div className={`relative overflow-hidden ${className}`}>
{isLoading && (
<div className="absolute inset-0 bg-gray-200 animate-pulse" />
)}
<Image
src={src}
alt={alt}
width={width}
height={height}
priority={priority}
loading={priority ? 'eager' : 'lazy'}
onLoad={() => setIsLoading(false)}
className={`transition-opacity duration-300 ${isLoading ? 'opacity-0' : 'opacity-100'}`}
/>
</div>
);
}
```
**Step 3: 更新页面使用优化图片**
在首页和其他页面中使用OptimizedImage组件:
```typescript
import { OptimizedImage } from '@/components/ui/optimized-image';
// 替换现有的img标签为OptimizedImage
<OptimizedImage
src="/images/hero.jpg"
alt="Hero Image"
width={1920}
height={1080}
priority
/>
```
**Step 4: 运行性能测试验证图片优化**
```bash
cd test-framework
npm run test:dev-audit:performance -- --grep "首页"
```
预期: 首页性能指标改善
**Step 5: 提交优化**
```bash
git add next.config.ts src/components/ui/optimized-image.tsx
git commit -m "perf: implement image optimization with WebP/AVIF support"
```
---
### Task 8: 实施代码分割和懒加载
**文件:**
- 修改: `src/app/layout.tsx`
- 修改: `src/components/sections/*.tsx`
**Step 1: 创建动态导入组件**
创建懒加载包装器:
```typescript
'use client';
import { lazy, Suspense } from 'react';
interface LazyComponentProps {
fallback?: React.ReactNode;
}
export function createLazyComponent<T extends object>(
importFunc: () => Promise<{ default: React.ComponentType<T> }>
) {
const LazyComponent = lazy(importFunc);
return function LazyWrapper(props: T & LazyComponentProps) {
const { fallback = <div>Loading...</div>, ...componentProps } = props;
return (
<Suspense fallback={fallback}>
<LazyComponent {...(componentProps as T)} />
</Suspense>
);
};
}
```
**Step 2: 更新页面组件使用懒加载**
在layout.tsx中实施代码分割:
```typescript
import { lazy } from 'react';
// 懒加载重型组件
const HeroSection = lazy(() => import('@/components/sections/hero-section'));
const AboutSection = lazy(() => import('@/components/sections/about-section'));
const ServicesSection = lazy(() => import('@/components/sections/services-section'));
```
**Step 3: 添加预加载关键资源**
在layout.tsx中添加预加载:
```typescript
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="zh-CN">
<head>
<link rel="preload" href="/fonts/AoyagiReisho.ttf" as="font" type="font/ttf" crossOrigin="" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
</head>
<body>{children}</body>
</html>
);
}
```
**Step 4: 运行性能测试验证代码分割**
```bash
cd test-framework
npm run test:dev-audit:performance
```
预期: 页面加载时间改善
**Step 5: 提交优化**
```bash
git add src/app/layout.tsx src/components/sections/*.tsx
git commit -m "perf: implement code splitting and lazy loading for better performance"
```
---
### Task 9: 优化CSS和JavaScript加载
**文件:**
- 修改: `src/app/globals.css`
- 修改: `tailwind.config.*`
**Step 1: 优化Tailwind CSS配置**
更新Tailwind配置以减少CSS体积:
```typescript
import type { Config } from 'tailwindcss';
const config: Config = {
content: [
'./src/pages/**/*.{js,ts,jsx,tsx,mdx}',
'./src/components/**/*.{js,ts,jsx,tsx,mdx}',
'./src/app/**/*.{js,ts,jsx,tsx,mdx}',
],
theme: {
extend: {},
},
plugins: [],
corePlugins: {
preflight: true,
},
};
export default config;
```
**Step 2: 移除未使用的CSS**
清理globals.css中的未使用样式:
```css
@tailwind base;
@tailwind components;
@tailwind utilities;
/* 只保留必要的自定义样式 */
:root {
--foreground-rgb: 0, 0, 0;
--background-start-rgb: 214, 219, 220;
--background-end-rgb: 255, 255, 255;
}
body {
color: rgb(var(--foreground-rgb));
background: linear-gradient(
to bottom,
transparent,
rgb(var(--background-end-rgb))
)
rgb(var(--background-start-rgb));
}
```
**Step 3: 启用CSS压缩**
在next.config.ts中启用CSS压缩:
```typescript
const nextConfig: NextConfig = {
output: "export",
distDir: "dist",
images: {
unoptimized: false,
formats: ['image/avif', 'image/webp'],
},
compress: true,
swcMinify: true,
};
```
**Step 4: 运行性能测试验证CSS优化**
```bash
cd test-framework
npm run test:dev-audit:performance
```
预期: CSS加载时间减少
**Step 5: 提交优化**
```bash
git add src/app/globals.css tailwind.config.* next.config.ts
git commit -m "perf: optimize CSS and JavaScript loading with compression"
```
---
### Task 10: 实施缓存策略
**文件:**
- 修改: `next.config.ts`
- 创建: `public/robots.txt`
- 创建: `public/sitemap.xml`
**Step 1: 配置静态资源缓存**
更新next.config.ts
```typescript
const nextConfig: NextConfig = {
output: "export",
distDir: "dist",
images: {
unoptimized: false,
formats: ['image/avif', 'image/webp'],
},
compress: true,
swcMinify: true,
headers: async () => {
return [
{
source: '/:all*(svg|jpg|png|webp|avif)',
locale: false,
headers: [
{
key: 'Cache-Control',
value: 'public, max-age=31536000, immutable',
},
],
},
{
source: '/:path*',
headers: [
{
key: 'Cache-Control',
value: 'public, max-age=3600, must-revalidate',
},
],
},
];
},
};
```
**Step 2: 创建robots.txt**
```bash
cat > public/robots.txt << 'EOF'
User-agent: *
Allow: /
Sitemap: https://yourdomain.com/sitemap.xml
EOF
```
**Step 3: 创建sitemap.xml**
```bash
cat > public/sitemap.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://yourdomain.com/</loc>
<lastmod>2026-03-06</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://yourdomain.com/about</loc>
<lastmod>2026-03-06</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://yourdomain.com/contact</loc>
<lastmod>2026-03-06</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
</urlset>
EOF
```
**Step 4: 运行性能测试验证缓存策略**
```bash
cd test-framework
npm run test:dev-audit:performance
```
预期: 重复访问加载时间显著减少
**Step 5: 提交优化**
```bash
git add next.config.ts public/robots.txt public/sitemap.xml
git commit -m "perf: implement caching strategy for static resources"
```
---
### Task 11: 优化字体加载
**文件:**
- 修改: `src/app/layout.tsx`
- 修改: `src/app/globals.css`
**Step 1: 使用next/font优化字体加载**
更新layout.tsx
```typescript
import { Inter } from 'next/font/google';
import './globals.css';
const inter = Inter({
subsets: ['latin'],
display: 'swap',
variable: '--font-inter',
});
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="zh-CN" className={inter.variable}>
<body className={inter.className}>{children}</body>
</html>
);
}
```
**Step 2: 添加字体预加载**
在layout.tsx中添加自定义字体预加载:
```typescript
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="zh-CN">
<head>
<link
rel="preload"
href="/fonts/AoyagiReisho.ttf"
as="font"
type="font/ttf"
crossOrigin=""
/>
</head>
<body className={inter.className}>{children}</body>
</html>
);
}
```
**Step 3: 优化字体显示**
在globals.css中添加字体显示优化:
```css
@font-face {
font-family: 'AoyagiReisho';
src: url('/fonts/AoyagiReisho.ttf') format('truetype');
font-display: swap;
}
body {
font-family: var(--font-inter), system-ui, sans-serif;
}
```
**Step 4: 运行性能测试验证字体优化**
```bash
cd test-framework
npm run test:dev-audit:performance
```
预期: 字体加载时间减少,FCP改善
**Step 5: 提交优化**
```bash
git add src/app/layout.tsx src/app/globals.css
git commit -m "perf: optimize font loading with next/font and font-display"
```
---
### Task 12: 验证所有性能测试通过
**Step 1: 运行完整性能测试套件**
```bash
cd test-framework
npm run test:dev-audit:performance
```
预期: 所有性能测试100%通过 (35/35)
**Step 2: 检查性能指标**
```bash
npm run test:report
```
预期: 所有页面性能指标在阈值范围内
**Step 3: 创建阶段完成标记**
```bash
echo "性能测试修复完成 - $(date)" >> test-framework/progress.md
git add test-framework/progress.md
git commit -m "chore: mark performance testing phase complete (100% pass rate)"
```
---
## 阶段3:SEO和可访问性测试修复 (目标:100%)
### Task 13: 运行SEO和可访问性测试获取基线
**Step 1: 运行SEO测试**
```bash
cd test-framework
npm run test:dev-audit:seo
```
预期: 获取SEO测试基线数据
**Step 2: 运行可访问性测试**
```bash
cd test-framework
npm run test:dev-audit:accessibility
```
预期: 获取可访问性测试基线数据
**Step 3: 记录基线数据**
```bash
echo "SEO和可访问性基线数据 - $(date)" >> test-framework/seo-a11y-baseline.md
npm run test:dev-audit:seo >> test-framework/seo-a11y-baseline.md
npm run test:dev-audit:accessibility >> test-framework/seo-a11y-baseline.md
```
---
### Task 14: 优化SEO元数据
**文件:**
- 修改: `src/app/layout.tsx`
- 修改: `src/app/(marketing)/**/page.tsx`
**Step 1: 更新根布局元数据**
在layout.tsx中添加完整的SEO元数据:
```typescript
import type { Metadata } from 'next';
export const metadata: Metadata = {
title: 'Novalon - 专业的数字化解决方案提供商',
description: 'Novalon提供专业的数字化转型、软件开发、技术咨询等服务,帮助企业实现业务创新和增长。',
keywords: ['数字化转型', '软件开发', '技术咨询', '业务创新'],
authors: [{ name: 'Novalon Team' }],
creator: 'Novalon',
publisher: 'Novalon',
formatDetection: {
email: false,
address: false,
telephone: false,
},
metadataBase: new URL('https://yourdomain.com'),
openGraph: {
type: 'website',
locale: 'zh_CN',
url: 'https://yourdomain.com',
title: 'Novalon - 专业的数字化解决方案提供商',
description: 'Novalon提供专业的数字化转型、软件开发、技术咨询等服务',
siteName: 'Novalon',
},
twitter: {
card: 'summary_large_image',
title: 'Novalon - 专业的数字化解决方案提供商',
description: 'Novalon提供专业的数字化转型、软件开发、技术咨询等服务',
},
robots: {
index: true,
follow: true,
googleBot: {
index: true,
follow: true,
'max-video-preview': -1,
'max-image-preview': 'large',
'max-snippet': -1,
},
},
verification: {
google: 'your-google-verification-code',
},
};
```
**Step 2: 更新各页面元数据**
为每个页面添加特定的元数据,例如contact/page.tsx
```typescript
import type { Metadata } from 'next';
export const metadata: Metadata = {
title: '联系我们 - Novalon',
description: '联系Novalon获取专业的数字化转型和软件开发服务咨询',
openGraph: {
title: '联系我们 - Novalon',
description: '联系Novalon获取专业的数字化转型和软件开发服务咨询',
url: 'https://yourdomain.com/contact',
},
};
```
**Step 3: 添加结构化数据**
创建结构化数据组件:
```typescript
// src/components/seo/structured-data.tsx
export function StructuredData({ data }: { data: Record<string, any> }) {
return (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }}
/>
);
}
```
**Step 4: 在页面中使用结构化数据**
在layout.tsx中添加组织结构化数据:
```typescript
import { StructuredData } from '@/components/seo/structured-data';
export default function RootLayout({ children }: { children: React.ReactNode }) {
const organizationData = {
'@context': 'https://schema.org',
'@type': 'Organization',
name: 'Novalon',
url: 'https://yourdomain.com',
logo: 'https://yourdomain.com/logo.svg',
contactPoint: {
'@type': 'ContactPoint',
telephone: '+86-xxx-xxxx-xxxx',
contactType: 'customer service',
},
};
return (
<html lang="zh-CN">
<head>
<StructuredData data={organizationData} />
</head>
<body>{children}</body>
</html>
);
}
```
**Step 5: 运行SEO测试验证优化**
```bash
cd test-framework
npm run test:dev-audit:seo
```
预期: SEO测试通过率提升
**Step 6: 提交优化**
```bash
git add src/app/layout.tsx src/app/(marketing)/**/page.tsx src/components/seo/structured-data.tsx
git commit -m "seo: enhance metadata and add structured data for better SEO"
```
---
### Task 15: 改善可访问性
**文件:**
- 修改: `src/components/ui/*.tsx`
- 修改: `src/app/(marketing)/**/page.tsx`
**Step 1: 添加ARIA标签**
为所有交互元素添加适当的ARIA标签:
```typescript
<Button
type="submit"
data-testid="submit-button"
aria-label="提交联系表单"
disabled={isSubmitting}
>
{isSubmitting ? '发送中...' : '发送消息'}
</Button>
```
**Step 2: 改善键盘导航**
确保所有交互元素可通过键盘访问:
```typescript
// 添加键盘事件处理
const handleKeyDown = (e: React.KeyboardEvent) => {
if (e.key === 'Enter' || e.key === ' ') {
e.preventDefault();
handleClick();
}
};
<div
role="button"
tabIndex={0}
onKeyDown={handleKeyDown}
onClick={handleClick}
aria-label="点击执行操作"
>
</div>
```
**Step 3: 优化颜色对比度**
确保文本和背景颜色符合WCAG AA标准:
```css
/* 确保对比度至少为4.5:1 */
.text-primary {
color: #1C1C1C; /* 与白色背景对比度 > 4.5:1 */
}
.text-secondary {
color: #5C5C5C; /* 与白色背景对比度 > 4.5:1 */
}
```
**Step 4: 添加跳转链接**
为键盘用户提供跳转链接:
```typescript
// 在layout.tsx中添加
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="zh-CN">
<body>
<a
href="#main-content"
className="sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 bg-white px-4 py-2 rounded shadow-lg"
>
</a>
<main id="main-content">
{children}
</main>
</body>
</html>
);
}
```
**Step 5: 运行可访问性测试验证改进**
```bash
cd test-framework
npm run test:dev-audit:accessibility
```
预期: 可访问性测试通过率提升
**Step 6: 提交改进**
```bash
git add src/components/ui/*.tsx src/app/(marketing)/**/page.tsx src/app/layout.tsx
git commit -m "a11y: improve accessibility with ARIA labels and keyboard navigation"
```
---
### Task 16: 验证所有SEO和可访问性测试通过
**Step 1: 运行完整SEO测试套件**
```bash
cd test-framework
npm run test:dev-audit:seo
```
预期: 所有SEO测试100%通过
**Step 2: 运行完整可访问性测试套件**
```bash
cd test-framework
npm run test:dev-audit:accessibility
```
预期: 所有可能性测试100%通过
**Step 3: 运行所有测试验证整体通过率**
```bash
cd test-framework
npm run test:dev-audit
```
预期: 所有测试100%通过
**Step 4: 创建阶段完成标记**
```bash
echo "SEO和可访问性测试修复完成 - $(date)" >> test-framework/progress.md
git add test-framework/progress.md
git commit -m "chore: mark SEO and accessibility testing phase complete (100% pass rate)"
```
---
## 阶段4:最终验证和上线准备
### Task 17: 运行完整测试套件验证
**Step 1: 运行所有测试**
```bash
cd test-framework
npm run test:dev-audit
```
预期: 所有测试100%通过,无失败项
**Step 2: 生成测试报告**
```bash
npm run test:report
```
预期: 生成详细的测试报告
**Step 3: 检查测试覆盖率**
```bash
# 检查是否有未覆盖的测试场景
cat test-framework/test-framework/reports/results.json
```
预期: 确认所有关键场景都有测试覆盖
---
### Task 18: 性能基准测试
**Step 1: 运行Lighthouse审计**
```bash
npm run audit:performance
npm run audit:seo
npm run audit:accessibility
```
预期: 所有Lighthouse审计分数 >= 90
**Step 2: 记录最终性能指标**
```bash
echo "最终性能指标 - $(date)" >> test-framework/final-performance-metrics.md
npm run audit:performance >> test-framework/final-performance-metrics.md
```
**Step 3: 对比性能改善**
```bash
# 对比优化前后的性能指标
diff test-framework/performance-baseline.md test-framework/final-performance-metrics.md
```
预期: 性能指标显著改善
---
### Task 19: 安全审计
**Step 1: 运行安全测试**
```bash
cd test-framework
npm run test -- --grep "security"
```
预期: 所有安全测试通过
**Step 2: 检查依赖安全**
```bash
npm audit
```
预期: 无高危安全漏洞
**Step 3: 修复安全漏洞(如果有)**
```bash
npm audit fix
```
**Step 4: 提交安全修复**
```bash
git add package.json package-lock.json
git commit -m "security: fix vulnerabilities in dependencies"
```
---
### Task 20: 生产环境构建测试
**Step 1: 构建生产版本**
```bash
npm run build
```
预期: 构建成功,无错误
**Step 2: 检查构建输出**
```bash
ls -lh dist/
```
预期: 构建输出文件正常
**Step 3: 本地测试生产构建**
```bash
npm run start
```
预期: 生产版本正常运行
**Step 4: 运行E2E测试验证生产构建**
```bash
cd test-framework
BASE_URL=http://localhost:3000 npm run test
```
预期: 所有E2E测试通过
---
### Task 21: 创建上线检查清单
**Step 1: 创建上线检查清单**
```bash
cat > test-framework/deployment-checklist.md << 'EOF'
# 上线检查清单
## 测试验证
- [ ] 所有单元测试通过 (100%)
- [ ] 所有集成测试通过 (100%)
- [ ] 所有E2E测试通过 (100%)
- [ ] 性能测试通过 (所有指标在阈值内)
- [ ] SEO测试通过 (分数 >= 90)
- [ ] 可访问性测试通过 (分数 >= 90)
- [ ] 安全测试通过 (无高危漏洞)
## 性能指标
- [ ] 首页加载时间 < 2s
- [ ] LCP < 2.5s
- [ ] FID < 100ms
- [ ] CLS < 0.1
- [ ] TTI < 3.5s
## 安全检查
- [ ] 依赖安全审计通过
- [ ] CSRF保护启用
- [ ] XSS防护启用
- [ ] CSP策略配置
- [ ] HTTPS强制跳转
## SEO检查
- [ ] 所有页面有合适的title和description
- [ ] 结构化数据正确配置
- [ ] sitemap.xml已生成
- [ ] robots.txt已配置
- [ ] Open Graph标签正确
## 可访问性检查
- [ ] 所有图片有alt属性
- [ ] 表单有正确的label
- [ ] 键盘导航正常工作
- [ ] ARIA标签正确配置
- [ ] 颜色对比度符合WCAG AA标准
## 部署准备
- [ ] 环境变量配置正确
- [ ] 数据库连接配置正确
- [ ] API端点配置正确
- [ ] CDN配置正确
- [ ] 监控和日志配置正确
## 文档准备
- [ ] README更新
- [ ] API文档更新
- [ ] 部署文档更新
- [ ] 运维文档更新
EOF
```
**Step 2: 验证检查清单**
```bash
# 逐项验证检查清单
cat test-framework/deployment-checklist.md
```
预期: 所有检查项都已完成
**Step 3: 提交检查清单**
```bash
git add test-framework/deployment-checklist.md
git commit -m "docs: add deployment checklist"
```
---
### Task 22: 最终代码审查和提交
**Step 1: 运行代码检查**
```bash
npm run lint
```
预期: 无lint错误
**Step 2: 运行类型检查**
```bash
npx tsc --noEmit
```
预期: 无类型错误
**Step 3: 查看所有变更**
```bash
git diff
```
预期: 确认所有变更都是必要的
**Step 4: 创建最终提交**
```bash
git add .
git commit -m "feat: complete all test fixes and achieve 100% test pass rate
- Fixed form validation and submission (100% pass rate)
- Optimized performance with image optimization, code splitting, and caching (100% pass rate)
- Enhanced SEO with metadata and structured data (100% pass rate)
- Improved accessibility with ARIA labels and keyboard navigation (100% pass rate)
- All tests passing: 100% pass rate achieved
- Ready for production deployment"
```
**Step 5: 创建发布标签**
```bash
git tag -a v1.0.0 -m "Production release with 100% test pass rate"
git push origin v1.0.0
```
---
## 预期成果
### 测试通过率
- **表单测试**: 100% (20/20)
- **性能测试**: 100% (35/35)
- **SEO测试**: 100% (所有SEO测试)
- **可访问性测试**: 100% (所有可访问性测试)
- **总体通过率**: 100%
### 性能指标
- **首页加载时间**: < 2s
- **LCP**: < 2.5s
- **FID**: < 100ms
- **CLS**: < 0.1
- **TTI**: < 3.5s
### 质量指标
- **代码覆盖率**: >= 80%
- **Lighthouse分数**: >= 90
- **无安全漏洞**: 0高危漏洞
- **WCAG合规**: AA级别
## 风险缓解
### 潜在风险
1. **性能优化可能影响现有功能**
- 缓解措施: 充分测试,逐步部署
2. **SEO优化可能需要内容调整**
- 缓解措施: 与产品团队协调,确保内容质量
3. **可访问性改进可能影响UI设计**
- 缓解措施: 与设计团队沟通,平衡美观和可访问性
### 回滚计划
1. 保留优化前的代码分支
2. 准备快速回滚脚本
3. 监控上线后的关键指标
4. 建立紧急响应机制
## 时间估算
- **阶段1(表单测试修复)**: 2-3天
- **阶段2(性能测试修复)**: 5-7天
- **阶段3(SEO和可访问性修复)**: 3-4天
- **阶段4(最终验证和上线准备)**: 2-3天
- **总计**: 12-17天
## 成功标准
1. ✅ 所有测试100%通过
2. ✅ 性能指标达到目标
3. ✅ 安全审计通过
4. ✅ SEO和可访问性达标
5. ✅ 生产构建成功
6. ✅ 上线检查清单完成
7. ✅ 文档更新完整
---
**计划完成时间**: 2026-03-06
**预计上线时间**: 2026-03-23
**负责人**: 张翔
**审核人**: 待定