# E2E 測試 本文件說明如何執行與撰寫 ConvertX-CN 的端對端測試。 --- ## 概述 E2E 測試模擬真實使用者操作,驗證完整的使用流程。 ### 測試範圍 - ✅ 檔案上傳 - ✅ 格式轉換 - ✅ 檔案下載 - ✅ 使用者認證 - ✅ 歷史記錄 --- ## 執行測試 ### 前置條件 1. 啟動 ConvertX-CN 服務 2. 確保 Docker 可用 ### 執行命令 ```bash # 執行所有 E2E 測試 bun run test:e2e # 使用腳本 ./scripts/run-e2e-tests.sh # 指定測試檔案 bun run test:e2e tests/e2e/upload.test.ts ``` ### 使用 Docker ```bash # 啟動測試環境 docker compose -f compose.test.yml up -d # 執行測試 bun run test:e2e # 清理 docker compose -f compose.test.yml down ``` --- ## 測試結構 ``` tests/e2e/ ├── upload.test.ts # 上傳測試 ├── convert.test.ts # 轉換測試 ├── download.test.ts # 下載測試 ├── auth.test.ts # 認證測試 └── fixtures/ # 測試資料 ├── sample.docx ├── sample.pdf └── sample.png ``` --- ## 撰寫測試 ### 基本範例 ```typescript // tests/e2e/upload.test.ts import { test, expect } from "@playwright/test"; test.describe("File Upload", () => { test.beforeEach(async ({ page }) => { await page.goto("/"); }); test("should upload a file", async ({ page }) => { // 選擇檔案 const fileInput = page.locator('input[type="file"]'); await fileInput.setInputFiles("tests/e2e/fixtures/sample.docx"); // 驗證檔案名稱顯示 await expect(page.locator(".file-name")).toContainText("sample.docx"); }); }); ``` ### 轉換測試 ```typescript // tests/e2e/convert.test.ts test("should convert docx to pdf", async ({ page }) => { // 上傳檔案 await page.setInputFiles('input[type="file"]', "tests/e2e/fixtures/sample.docx"); // 選擇目標格式 await page.selectOption("#output-format", "pdf"); // 點擊轉換 await page.click("#convert-button"); // 等待完成 await expect(page.locator(".status")).toContainText("完成", { timeout: 60000 }); }); ``` ### 認證測試 ```typescript // tests/e2e/auth.test.ts test("should login successfully", async ({ page }) => { await page.goto("/login"); await page.fill("#email", "test@example.com"); await page.fill("#password", "password123"); await page.click("#login-button"); await expect(page).toHaveURL("/"); await expect(page.locator(".user-menu")).toBeVisible(); }); ``` --- ## 設定 ### Playwright 設定 ```typescript // playwright.config.ts import { defineConfig } from "@playwright/test"; export default defineConfig({ testDir: "./tests/e2e", timeout: 60000, use: { baseURL: "http://localhost:3000", screenshot: "only-on-failure", video: "retain-on-failure", }, }); ``` --- ## 除錯 ### 互動模式 ```bash bun run test:e2e --debug ``` ### 檢視報告 ```bash bun run test:e2e --reporter=html npx playwright show-report ``` ### 錄製測試 ```bash npx playwright codegen http://localhost:3000 ``` --- ## 相關文件 - [測試策略](測試策略.md) - [CI/CD](CI-CD.md) - [本地開發](../開發指南/本地開發.md)