Playwright進階篇(三):測試案例設計與管理指南

testing

測試策略規劃

確定範圍與優先級


測試範圍定義

  1. 功能覆蓋
  2. 核心業務流程
  3. 關鍵用戶場景
  4. 高風險功能區域

優先級評估模型

enum TestPriority {
  Critical = 1,   // 核心功能、關鍵路徑
  High = 2,       // 重要但非關鍵功能
  Medium = 3,     // 一般功能
  Low = 4         // 次要功能、邊緣場景
}

有效的測試案例類型

測試分類策略

  1. 功能測試
    • 驗證系統按預期工作
    • 覆蓋主要業務邏輯
test('用戶登入流程 - 功能測試', async ({ page }) => {
  const loginPage = new LoginPage(page);
  await loginPage.login('validUser', 'validPassword');
  expect(await loginPage.isLoggedIn()).toBeTruthy();
});
  1. 邊界測試
    • 極限值測試
    • 特殊輸入場景
test('登入 - 邊界值測試', async ({ page }) => {
  const loginPage = new LoginPage(page);
  
  // 超長用戶名
  await loginPage.login('a'.repeat(1000), 'password');
  expect(await loginPage.isErrorMessageDisplayed()).toBeTruthy();
  
  // 特殊字符
  await loginPage.login('user@#$%', 'password');
  expect(await loginPage.isErrorMessageDisplayed()).toBeTruthy();
});
  1. 負面測試
    • 錯誤處理
    • 異常場景 csscscscascasc
test('登入 - 負面測試', async ({ page }) => {
  const loginPage = new LoginPage(page);
  
  // 無效憑證
  await loginPage.login('invalidUser', 'wrongPassword');
  expect(await loginPage.isErrorMessageDisplayed()).toBeTruthy();
  
  // 空輸入
  await loginPage.login('', '');
  expect(await loginPage.isLoginButtonDisabled()).toBeTruthy();
});

測試資料管理基礎

測試資料策略


  1. 資料準備
// 測試資料管理
const testUsers = {
  valid: {
    username: 'testuser',
    password: 'securePassword123'
  },
  invalid: {
    username: 'baduser',
    password: 'wrongpassword'
  }
};

// 使用測試資料
test('使用結構化測試資料', async ({ page }) => {
  const loginPage = new LoginPage(page);
  await loginPage.login(
    testUsers.valid.username, 
    testUsers.valid.password
  );
});
  1. 資料隔離
    • 每次測試使用唯一資料
    • 避免測試間相互影響

測試案例組織結構

資料夾與檔案架構

tests/

├── e2e/                  # 端到端測試
│   ├── login.spec.ts
│   └── registration.spec.ts

├── components/           # 元件測試
│   ├── sidebar.spec.ts
│   └── header.spec.ts

├── api/                  # API測試
│   └── user-endpoints.spec.ts

└── utils/                # 公共工具
    ├── test-data.ts
    └── test-helpers.ts

測試分類與標籤

Playwright 標籤實踐

import { test, expect } from '@playwright/test';

test.describe('用戶登入功能', () => {
  // 使用標籤進行分類
  test('正常登入流程', async ({ page }) => {
    // 測試邏輯
  }).tag('@login').tag('@smoke');

  test('錯誤憑證', async ({ page }) => {
    // 測試邏輯
  }).tag('@login').tag('@negative');
});

// 運行特定標籤的測試
// npx playwright test --grep "@smoke"

測試案例文檔化

標準化描述模板

s

test('用戶登入 - 驗證有效憑證', async ({ page }) => {
  /**
   * @description 驗證用戶使用有效憑證成功登入系統
   * @testType 功能測試
   * @priority
   * @precondition 用戶已註冊
   * @expectedResult 成功登入並重定向到儀表板
   */
  const loginPage = new LoginPage(page);
  await loginPage.login('validUser', 'validPassword');
  expect(await loginPage.isLoggedIn()).toBeTruthy();
});

最佳實踐

  1. 保持測試案例獨立
  2. 使用有意義的命名
  3. 包含清晰的描述
  4. 遵循一致的組織結構
  5. 定期審查和維護測試套件



結論

有效的測試案例設計是自動化測試成功的關鍵。通過系統化的方法,我們可以建立全面、可維護且高效的測試套件。

分享這篇文章: