Files
awoooi/docs/testing/PLAYWRIGHT_CONFIG.md
OG T 7478dc0254 feat(phase6-9): Complete modular architecture and Agent Teams
Phase 6.4 - Modular Architecture:
- Add lewooogo-brain adapters for LLM providers
- Add lewooogo-data dual memory (Redis + PostgreSQL)
- Implement consensus engine for multi-agent decisions
- Add incident memory service for historical context

Phase 9 - Agent Teams (Claude Agent SDK):
- Add base agent class with Claude Sonnet 4 integration
- Implement action planner, blast radius, and security agents
- Add agent API endpoints and proposal workflow
- Integrate ADR-009 OpenClaw Agent Teams architecture

DevOps & CI/CD:
- Add GitHub Actions CI/CD workflows (ci.yaml, cd.yaml)
- Add pre-commit hooks and secrets baseline
- Add docker-compose for local development
- Update Kubernetes network policies

Frontend Improvements:
- Add auto-healing error boundary component
- Update i18n messages for agent features
- Enhance dual-state incident card with execution feedback

Documentation:
- Add 7 ADRs covering MCP, design system, architecture decisions
- Update ARCHITECTURE_MEMORY.md with modular design
- Add GLOBAL_RULES.md and SOUL.md for project identity

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-23 18:40:36 +08:00

264 lines
5.2 KiB
Markdown
Raw Permalink 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.
# Playwright E2E 測試配置
> **版本**: v1.0
> **建立日期**: 2026-03-20
> **負責人**: CPO
> **CEO 指示 #5**: 啟用截圖與錄影加速除錯
---
## 配置檔案
```typescript
// apps/web/playwright.config.ts
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
testDir: './e2e',
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined,
reporter: [
['html', { outputFolder: 'playwright-report' }],
['json', { outputFile: 'playwright-report/results.json' }],
],
use: {
baseURL: process.env.BASE_URL || 'http://localhost:3000',
trace: 'on-first-retry',
// ⚠️ CEO 指示 #5: 截圖與錄影必須啟用
screenshot: 'on', // 每個測試都截圖
video: 'on-first-retry', // 失敗時錄影
// 本地化設定
locale: 'zh-TW',
timezoneId: 'Asia/Taipei',
},
projects: [
// Desktop Chrome (主要)
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
viewport: { width: 1920, height: 1080 },
},
},
// Desktop Firefox
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},
// Desktop Safari
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},
// Mobile Chrome
{
name: 'Mobile Chrome',
use: { ...devices['Pixel 5'] },
},
// Mobile Safari
{
name: 'Mobile Safari',
use: { ...devices['iPhone 12'] },
},
],
// 本地開發伺服器
webServer: process.env.CI ? undefined : {
command: 'pnpm dev',
url: 'http://localhost:3000',
reuseExistingServer: !process.env.CI,
},
// 輸出目錄
outputDir: 'test-results/',
// 截圖設定
expect: {
toHaveScreenshot: {
// 允許 1% 像素差異
maxDiffPixelRatio: 0.01,
},
},
});
```
---
## 截圖與錄影配置
### 截圖模式
| 模式 | 說明 | 建議場景 |
|------|------|---------|
| `'off'` | 不截圖 | - |
| `'on'` | 每個測試都截圖 | **開發/CI (建議)** |
| `'only-on-failure'` | 失敗時截圖 | 大規模測試 |
### 錄影模式
| 模式 | 說明 | 建議場景 |
|------|------|---------|
| `'off'` | 不錄影 | - |
| `'on'` | 每個測試都錄影 | 深度除錯 |
| `'retain-on-failure'` | 失敗時保留 | **CI (建議)** |
| `'on-first-retry'` | 重試時錄影 | **CI (建議)** |
---
## 視覺回歸測試
### 基準截圖
```typescript
// e2e/dashboard.spec.ts
import { test, expect } from '@playwright/test';
test('dashboard renders correctly', async ({ page }) => {
await page.goto('/dashboard');
await page.waitForLoadState('networkidle');
// 全頁截圖比對
await expect(page).toHaveScreenshot('dashboard-full.png', {
fullPage: true,
maxDiffPixelRatio: 0.01,
});
// 特定元素截圖
const hostCard = page.locator('[data-testid="host-card"]').first();
await expect(hostCard).toHaveScreenshot('host-card.png');
});
```
### 基準圖存放
```
apps/web/e2e/
├── dashboard.spec.ts
├── dashboard.spec.ts-snapshots/
│ ├── dashboard-full-chromium.png
│ ├── dashboard-full-firefox.png
│ ├── dashboard-full-webkit.png
│ └── host-card-chromium.png
└── ...
```
---
## CI 整合
### GitHub Actions
```yaml
# .github/workflows/e2e.yaml
name: E2E Tests
on:
pull_request:
branches: [main]
jobs:
e2e:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: pnpm install
- name: Install Playwright browsers
run: pnpm exec playwright install --with-deps
- name: Run E2E tests
run: pnpm exec playwright test
env:
BASE_URL: http://localhost:3000
# 上傳測試報告
- uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report
path: apps/web/playwright-report/
retention-days: 30
# 上傳截圖與錄影
- uses: actions/upload-artifact@v4
if: failure()
with:
name: test-results
path: apps/web/test-results/
retention-days: 7
```
---
## 測試報告
### HTML 報告
```bash
# 本地查看報告
pnpm exec playwright show-report
```
### 報告內容
- 所有測試結果 (通過/失敗/跳過)
- 每個測試的截圖
- 失敗測試的錄影
- 錯誤堆疊追蹤
- 測試執行時間
---
## 除錯工作流程
### 失敗測試處理
1. 查看 CI Artifacts 下載測試報告
2. 開啟 HTML 報告查看失敗原因
3. 觀看錄影了解失敗時的畫面狀態
4. 比對截圖差異找出視覺問題
5. 本地重現並修復
### 本地除錯
```bash
# 有頭模式執行 (可看到瀏覽器)
pnpm exec playwright test --headed
# 除錯模式 (可暫停/單步)
pnpm exec playwright test --debug
# 只執行失敗的測試
pnpm exec playwright test --last-failed
```
---
## 變更記錄
| 日期 | 版本 | 變更 | 作者 |
|------|------|------|------|
| 2026-03-20 | v1.0 | 初版建立 | CPO |
---
*此文件由 CPO 維護E2E 測試必須遵守此配置。*