test-automation-strategy

安装量: 95
排名: #8592

安装

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

When designing or improving test automation:

  • FOLLOW test pyramid: 70% unit, 20% integration, 10% E2E

  • APPLY F.I.R.S.T. principles: Fast, Isolated, Repeatable, Self-validating, Timely

  • USE patterns: Page Object Model, Builder pattern, Factory pattern

  • INTEGRATE in CI/CD: Every commit runs tests, fail fast, clear feedback

  • 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

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

| 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

| Fast | Quick execution | Mock external deps

| Isolated | No shared state | Fresh fixtures per test

| Repeatable | Same result every time | No random data

| Self-validating | Clear pass/fail | Assert, don't print

| Timely | Written with code | TDD, not after

Anti-Patterns

| 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

// 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('bad@email.com', 'wrong');
  expect(await loginPage.getError()).toBe('Invalid credentials');
});

CI/CD Integration

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

// 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

// 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

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'
});

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.

返回排行榜