mcpField
Q
qe-test-automation-strategy

qe-test-automation-strategy

github.com/proffesor-for-testingテスト・品質51984 回インストール今日更新
リポジトリ

qe-test-automation-strategy について

テスト自動化の設計や改善に取り組む人向けのスキルです。テストピラミッド、F.I.R.S.T. 原則、設計パターン、CI/CD 統合に加え、不安定なテストの管理方法も扱います。

主な機能

  1. 01テストピラミッドに沿った層の計画
  2. 02F.I.R.S.T. 原則の適用
  3. 03Page Object Model などのパターン活用
  4. 04CI/CD との統合
  5. 05不安定なテストの分離と管理

活用シーン

  1. 01新しいテスト自動化フレームワークの設計
  2. 02テストスイートの実行時間短縮
  3. 03不安定なテストの影響軽減
  4. 04CI/CD のテストフィードバック改善

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/proffesor-for-testing/agentic-qe --skill qe-test-automation-strategy

インストール後、Claude Code で/qe-test-automation-strategyを入力して読み込まれたか確認します。

詳細

テスト自動化戦略

<default_to_action> テスト自動化を設計または改善するときは、次のことを行います。

  1. テストピラミッドに従います:70%をユニットテスト、20%を統合テスト、10%をE2Eテストにします
  2. F.I.R.S.T.の原則を適用します:Fast(高速)、Isolated(独立)、Repeatable(再現可能)、Self-validating(自己検証可能)、Timely(適時)
  3. パターンを使用します:ページオブジェクトモデル、ビルダーパターン、ファクトリーパターン
  4. CI/CDに統合します:すべてのコミットでテストを実行し、早期に失敗させ、明確なフィードバックを返します
  5. 不安定なテストを管理します:隔離して修正するか、削除します。決して無視しません

よくあるアンチパターンをすばやく検出する方法:

  • アイスクリームコーン型(E2Eテストが多く、ユニットテストが少ない)→ ピラミッド型に反転します
  • 遅いテスト(スイートの実行に10分超)→ 並列化し、外部依存をモックします
  • 不安定なテスト → タイミングを修正し、データを分離するか、隔離します
  • テストの重複 → フィクスチャを共有し、ページオブジェクトを使用します
  • 壊れやすいセレクター → data-testidやセマンティックロケーターを使用します

成功に欠かせない要素:

  • 迅速なフィードバックを目指します(全スイートで10分未満)
  • 自動化はテストを支援するものであり、判断に取って代わるものではありません
  • テストインフラストラクチャにも、本番コードと同じように投資します </default_to_action>

クイックリファレンスカード

使用する場面
  • 新しい自動化フレームワークを構築するとき
  • 既存のテスト効率を改善するとき
  • 不安定なテストの負担を軽減するとき
  • CI/CDパイプラインの速度を最適化するとき
テストピラミッド
層割合速度分離性例
ユニット70%< 1ms完全純粋関数、ロジック
統合20%< 1s部分的API、データベース
E2E10%< 30sなしユーザージャーニー
F.I.R.S.T.の原則
原則意味方法
Fastすばやく実行外部依存をモックします
Isolated共有状態がないテストごとに新しいフィクスチャを使います
Repeatable毎回同じ結果ランダムデータを使いません
Self-validating合否が明確出力ではなくアサーションを使います
Timelyコードと同時に作成後回しにせず、TDDを行います
アンチパターン
問題症状解決策
アイスクリームコーン型E2Eテストが80%、ユニットテストが10%ピラミッド型に反転します
遅いスイートCIに30分以上かかる並列化し、不要なテストを削減します
不安定なテスト失敗がランダムに発生隔離し、タイミングを修正します
結合したテスト実行順序に依存データを分離します
壊れやすいセレクターCSSの変更で壊れるdata-testidを使用します

ページオブジェクトモデル

// pages/LoginPage.js
class LoginPage {
  constructor(page) {
    this.page = page;
    this.emailInput = '[data-testid="email"]';
    this.passwordInput = '[data-testid="password"]';
    this.submitButton = '[data-testid="submit"]';
    this.errorMessage = '[data-testid="error"]';
  }

  async login(email, password) {
    await this.page.fill(this.emailInput, email);
    await this.page.fill(this.passwordInput, password);
    await this.page.click(this.submitButton);
  }

  async getError() {
    return this.page.textContent(this.errorMessage);
  }
}

// Test uses page object
test('shows error for invalid credentials', async ({ page }) => {
  const loginPage = new LoginPage(page);
  await loginPage.login('[email protected]', 'wrong');
  expect(await loginPage.getError()).toBe('Invalid credentials');
});

CI/CD統合

name: Test Pipeline
on: [push, pull_request]

jobs:
  unit-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm run test:unit -- --coverage
        timeout-minutes: 5
      - uses: codecov/codecov-action@v3

  integration-tests:
    needs: unit-tests
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:15
    steps:
      - run: npm run test:integration
        timeout-minutes: 10

  e2e-tests:
    needs: integration-tests
    runs-on: ubuntu-latest
    steps:
      - run: npx playwright test
        timeout-minutes: 15

不安定なテストの管理

// Quarantine flaky tests
describe.skip('Quarantined - INC-123', () => {
  test('flaky test awaiting fix', () => { /* ... */ });
});

// Agent-assisted stabilization
await Task("Fix Flaky Tests", {
  tests: quarantinedTests,
  analysis: ['timing-issues', 'data-isolation', 'race-conditions'],
  strategies: ['add-waits', 'isolate-fixtures', 'mock-externals']
}, "qe-flaky-test-hunter");

エージェント支援による自動化

// Generate tests following pyramid
await Task("Generate Test Suite", {
  sourceCode: 'src/',
  pyramid: { unit: 70, integration: 20, e2e: 10 },
  patterns: ['page-object', 'builder', 'factory'],
  framework: 'jest'
}, "qe-test-generator");

// Optimize test execution
await Task("Optimize Suite", {
  algorithm: 'johnson-lindenstrauss',
  targetReduction: 0.3,
  maintainCoverage: 0.95
}, "qe-regression-risk-analyzer");

// Analyze flaky patterns
await Task("Flaky Analysis", {
  testHistory: 'last-30-days',
  detectPatterns: ['timing', 'data', 'environment'],
  recommend: 'stabilization-strategy'
}, "qe-flaky-test-hunter");

エージェント連携のヒント

メモリ名前空間
aqe/automation/
├── test-pyramid/*        - Coverage by layer
├── page-objects/*        - Shared page objects
├── flaky-registry/*      - Quarantined tests
└── execution-metrics/*   - Suite performance data
フリート連携
const automationFleet = await FleetManager.coordinate({
  strategy: 'test-automation',
  agents: [
    'qe-test-generator',         // Generate pyramid-compliant tests
    'qe-test-executor',          // Parallel execution
    'qe-coverage-analyzer',      // Coverage gaps
    'qe-flaky-test-hunter',      // Flaky detection
    'qe-regression-risk-analyzer' // Smart selection
  ],
  topology: 'hierarchical'
});

関連スキル


覚えておくこと

ピラミッド:ユニットテスト70%、統合テスト20%、E2Eテスト10%。 すべてのテストでF.I.R.S.T.の原則に従います。E2Eテストにはページオブジェクトモデルを使用します。速度を上げるために並列化します。不安定なテストは無視せず、隔離します。テストコードは本番コードと同じように扱います。

エージェントを活用する場合: エージェントは、ピラミッドに準拠したテストを生成し、不安定なパターンを検出し、実行時間を最適化して、テストインフラストラクチャを保守します。自動化の品質を高めるためにエージェントを活用します。

コメント