home / skills / proffesor-for-testing / agentic-qe / test-automation-strategy

test-automation-strategy skill

/v3/assets/skills/test-automation-strategy

This skill designs and implements scalable test automation strategies aligned with pyramid, FAST principles, and CI/CD for faster feedback.

npx playbooks add skill proffesor-for-testing/agentic-qe --skill test-automation-strategy

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
6.8 KB
---
name: test-automation-strategy
description: "Design and implement effective test automation with proper pyramid, patterns, and CI/CD integration. Use when building automation frameworks or improving test efficiency."
category: testing-methodologies
priority: high
tokenEstimate: 1000
agents: [qe-test-generator, qe-test-executor, qe-coverage-analyzer, qe-flaky-test-hunter, qe-regression-risk-analyzer]
implementation_status: optimized
optimization_version: 1.0
last_optimized: 2025-12-02
dependencies: []
quick_reference_card: true
tags: [automation, test-pyramid, page-object, first-principles, ci-cd, flaky-tests]
---

# Test Automation Strategy

<default_to_action>
When designing or improving test automation:
1. FOLLOW test pyramid: 70% unit, 20% integration, 10% E2E
2. APPLY F.I.R.S.T. principles: Fast, Isolated, Repeatable, Self-validating, Timely
3. USE patterns: Page Object Model, Builder pattern, Factory pattern
4. INTEGRATE in CI/CD: Every commit runs tests, fail fast, clear feedback
5. MANAGE flaky tests: Quarantine, fix, or delete - never ignore

**Quick Anti-Pattern Detection:**
- Ice cream cone (many E2E, few unit) → Invert to pyramid
- Slow tests (> 10 min suite) → Parallelize, mock external deps
- Flaky tests → Fix timing, isolate data, or quarantine
- Test duplication → Share fixtures, use page objects
- Brittle selectors → Use data-testid, semantic locators

**Critical Success Factors:**
- Fast feedback is the goal (< 10 min full suite)
- Automation supports testing, doesn't replace judgment
- Invest in test infrastructure like production code
</default_to_action>

## Quick Reference Card

### When to Use
- Building new automation framework
- Improving existing test efficiency
- Reducing flaky test burden
- Optimizing CI/CD pipeline speed

### Test Pyramid
| Layer | % | Speed | Isolation | Examples |
|-------|---|-------|-----------|----------|
| **Unit** | 70% | < 1ms | Complete | Pure functions, logic |
| **Integration** | 20% | < 1s | Partial | API, database |
| **E2E** | 10% | < 30s | None | User journeys |

### F.I.R.S.T. Principles
| Principle | Meaning | How |
|-----------|---------|-----|
| **F**ast | Quick execution | Mock external deps |
| **I**solated | No shared state | Fresh fixtures per test |
| **R**epeatable | Same result every time | No random data |
| **S**elf-validating | Clear pass/fail | Assert, don't print |
| **T**imely | Written with code | TDD, not after |

### Anti-Patterns
| Problem | Symptom | Fix |
|---------|---------|-----|
| Ice cream cone | 80% E2E, 10% unit | Invert pyramid |
| Slow suite | 30+ min CI | Parallelize, prune |
| Flaky tests | Random failures | Quarantine, fix timing |
| Coupled tests | Order-dependent | Isolate data |
| Brittle selectors | Break on CSS change | Use data-testid |

---

## Page Object Model

```javascript
// 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 Integration

```yaml
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
```

---

## Flaky Test Management

```typescript
// 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");
```

---

## Agent-Assisted Automation

```typescript
// 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");
```

---

## Agent Coordination Hints

### Memory Namespace
```
aqe/automation/
├── test-pyramid/*        - Coverage by layer
├── page-objects/*        - Shared page objects
├── flaky-registry/*      - Quarantined tests
└── execution-metrics/*   - Suite performance data
```

### Fleet Coordination
```typescript
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'
});
```

---

## Related Skills
- [tdd-london-chicago](../tdd-london-chicago/) - TDD for unit tests
- [api-testing-patterns](../api-testing-patterns/) - Integration patterns
- [cicd-pipeline-qe-orchestrator](../cicd-pipeline-qe-orchestrator/) - Pipeline integration
- [shift-left-testing](../shift-left-testing/) - Early automation

---

## Remember

**Pyramid: 70% unit, 20% integration, 10% E2E.** F.I.R.S.T. principles for every test. Page Object Model for E2E. Parallelize for speed. Quarantine flaky tests - never ignore them. Treat test code like production code.

**With Agents:** Agents generate pyramid-compliant tests, detect flaky patterns, optimize execution time, and maintain test infrastructure. Use agents to scale automation quality.

Overview

This skill designs and implements effective test automation strategies that follow the test pyramid, F.I.R.S.T. principles, and common automation patterns. It helps teams build or improve frameworks, reduce flakiness, and integrate tests into CI/CD for fast feedback. The skill includes guidance, templates, and agent-driven tasks to generate and optimize suites.

How this skill works

The skill inspects code and test coverage to recommend a pyramid distribution (default 70% unit, 20% integration, 10% E2E) and enforces F.I.R.S.T. test qualities: Fast, Isolated, Repeatable, Self-validating, Timely. It suggests patterns (Page Object Model, Builder, Factory), CI/CD job layouts, flaky-test management, and automated agent tasks to generate, analyze, and optimize test suites. It outputs concrete remediation steps, CI examples, and quarantining workflows for flaky tests.

When to use it

  • Starting a new automation framework and defining test strategy
  • Refactoring or improving an existing test suite to increase speed and reliability
  • Integrating tests into CI/CD to ensure fast feedback on commits
  • Reducing flaky test burden and stabilizing intermittent failures
  • Optimizing test execution time and trimming slow or duplicated tests

Best practices

  • Target pyramid distribution: ~70% unit, 20% integration, 10% E2E for cost-effective coverage
  • Follow F.I.R.S.T.: keep tests fast, isolated, repeatable, self-validating, and written timely
  • Use Page Object Model and shared fixtures to avoid duplication and brittle selectors
  • Run tests on every commit, fail fast, and provide clear CI feedback under 10 minutes
  • Manage flaky tests explicitly: quarantine, fix, or delete—never ignore failures

Example use cases

  • Generate a suite of unit, integration, and E2E tests automatically following the pyramid
  • Add a CI pipeline with staged jobs for unit, integration, and E2E tests and timeouts
  • Detect flaky tests from 30-day history and produce stabilization recommendations
  • Refactor end-to-end tests into page objects to reduce duplication and brittleness
  • Parallelize and mock external dependencies to bring a slow suite under 10 minutes

FAQ

What is the ideal test pyramid split?

Aim for roughly 70% unit, 20% integration, and 10% E2E; adjust based on product risk and system boundaries.

How should I handle flaky tests discovered in CI?

Quarantine failing tests for analysis, prioritize fixes for common causes (timing, shared state), or delete redundant tests if unnecessary.