home / skills / georgekhananaev / claude-skills-vault / testing-automation-expert

testing-automation-expert skill

/.claude/skills/testing-automation-expert

This skill designs scalable test strategies for Python and TypeScript apps, covering unit to E2E testing, contract, mutation, and CI/CD integration.

npx playbooks add skill georgekhananaev/claude-skills-vault --skill testing-automation-expert

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

Files (6)
SKILL.md
8.6 KB
---
name: testing-automation-expert
description: Production-grade testing strategies for robust, maintainable systems. Covers unit/integration/E2E testing, contract testing, accessibility, mutation testing, and CI/CD patterns. Supports Python (pytest) and TypeScript (Jest/Vitest/Playwright).
author: George Khananaev
---

# Testing Automation Expert

Master production-grade testing strategies for Python and TypeScript applications. QA Architect level - design test ecosystems that scale.

## When to Use

- Designing test strategies for features/projects
- Setting up pytest, Jest, Vitest, or Playwright
- Improving test coverage and quality
- Contract testing, accessibility, mutation testing
- CI/CD test pipeline optimization
- Test architecture review or refactoring

## Triggers

- `/test-plan` - Design test strategy for a feature/project
- `/fixture-refactor` - Optimize test fixture architecture
- `/e2e-setup` - Set up Playwright E2E testing
- `/test-audit` - Review test coverage and quality
- `/contract-test` - Set up Pact contract testing

## Reference Files

Load the appropriate reference based on need:

| Category | Framework | Reference |
|----------|-----------|-----------|
| Python | pytest | `references/python-pytest.md` |
| TypeScript | Jest | `references/typescript-jest.md` |
| TypeScript | Vitest | `references/typescript-vitest.md` |
| E2E | Playwright | `references/e2e-playwright.md` |
| Advanced | Contract/A11y/Mutation | `references/specialized-testing.md` |

## Test Quality Checklists

### Pre-Implementation Checklist

- [ ] **Test strategy defined** - unit, integration, E2E, contract boundaries clear
- [ ] **Fixtures planned** - factory functions, DB setup, cleanup
- [ ] **Mocking strategy** - mock at boundaries only, not internals
- [ ] **Coverage targets** - minimum 80% branches/lines/functions
- [ ] **CI integration** - tests run on every PR with sharding if >10min
- [ ] **Flakiness detection** - pytest-randomly / random test order enabled

### Unit Test Checklist

- [ ] Tests isolated - no shared state between tests
- [ ] One assertion focus - test one behavior per test
- [ ] Descriptive names - `should_return_error_when_user_not_found`
- [ ] AAA pattern - Arrange, Act, Assert clearly separated
- [ ] Edge cases covered - null, empty, boundary values
- [ ] No external dependencies - DB, network, filesystem mocked
- [ ] Property-based tests - Hypothesis/fast-check for edge case discovery

### Integration Test Checklist

- [ ] Real dependencies - use Testcontainers (not SQLite for Postgres!)
- [ ] Transaction rollback - isolate tests with rollback
- [ ] API contract tested - request/response shapes verified
- [ ] Error paths tested - timeout, connection errors
- [ ] Auth flows tested - token generation, validation
- [ ] Declarative assertions - dirty-equals for complex JSON

### E2E Test Checklist

- [ ] Critical paths covered - login, checkout, core flows
- [ ] Page Object Model - locators abstracted into classes
- [ ] Resilient selectors - role/label over CSS/xpath
- [ ] Network mocking - test error states without real API
- [ ] Visual regression - Docker for consistent screenshots
- [ ] Cross-browser - Chrome, Firefox, Safari, mobile
- [ ] Auth state reuse - save/load storage state
- [ ] Trace artifacts - uploaded for CI debugging

### Architecture Checklist (Microservices)

- [ ] Contract tests - Pact CDCT between services
- [ ] API fuzzing - schemathesis against OpenAPI spec
- [ ] Mutation testing - mutmut/Stryker validates test quality
- [ ] Accessibility - axe-core in E2E pipeline
- [ ] Performance baselines - k6/Locust load tests
- [ ] CI sharding - parallel machines for >10min suites

### Test Maintenance Checklist

- [ ] No flaky tests - deterministic, no `sleep()`
- [ ] Fast execution - unit <5s, integration <30s, E2E <2min
- [ ] Readable failures - clear error messages
- [ ] DRY fixtures - reusable factories, not copy-paste
- [ ] Regular cleanup - delete obsolete tests
- [ ] Quarantine flaky - `.flaky.spec.ts` until fixed

## Testing Pyramid

```
         /\
        /E2E\        Few, slow, high confidence
       /-----\
      /Integ. \      Some, moderate speed
     /---------\
    / Contract  \    Service boundaries
   /-------------\
  /    Unit       \  Many, fast, isolated
 /------------------\
```

| Type | Count | Speed | Scope |
|------|-------|-------|-------|
| Unit | 60% | <100ms | Single function |
| Contract | 10% | <1s | Service interface |
| Integration | 20% | <5s | Service + DB |
| E2E | 10% | <30s | Full user flow |

## Test Organization

```
tests/
├── conftest.py / setup.ts   # Root fixtures
├── factories/               # Test data factories
│   └── user.factory.ts
├── fixtures/                # Static test data
│   └── users.json
├── unit/                    # Fast, isolated
│   ├── services/
│   └── utils/
├── integration/             # DB, external services
│   ├── api/
│   └── repositories/
├── contract/                # Pact consumer/provider
│   ├── consumer/
│   └── provider/
├── e2e/                     # Full user flows
│   ├── pages/               # Page objects
│   ├── specs/
│   └── a11y/                # Accessibility tests
└── load/                    # k6/Locust scripts
    └── api-load.js
```

## Anti-Patterns

| Don't | Do |
|-------|-----|
| Test implementation details | Test behavior/contracts |
| Hardcode test data | Use factories/fixtures |
| Share state between tests | Isolate with fixtures |
| Mock everything | Mock at boundaries only |
| Use `time.sleep()` | Use `wait_for` or time mocking |
| Use SQLite for Postgres tests | Use Testcontainers |
| Write flaky time-based tests | Use `time-machine` / `vi.useFakeTimers()` |
| Skip edge cases | Use property-based testing |
| Ignore test failures | Fix or remove immediately |
| One giant conftest.py | Split into modules |
| Integration tests for service contracts | Use Pact contract testing |
| Skip accessibility | Add axe-core to E2E |
| Trust coverage alone | Add mutation testing |

## Specialized Testing

### Contract Testing (Microservices)

```python
# Consumer test (Python)
pact = Consumer("UserService").has_pact_with(Provider("AuthService"))
```

See `references/specialized-testing.md` for full Pact patterns.

### API Fuzzing (FastAPI/OpenAPI)

```bash
schemathesis run http://localhost:8000/openapi.json
```

Auto-generates tests from OpenAPI spec - finds edge cases.

### Mutation Testing

```bash
# Python
mutmut run && mutmut results

# TypeScript
npx stryker run
```

Validates test quality - surviving mutants = gaps.

### Accessibility Testing

```typescript
const results = await new AxeBuilder({ page }).analyze();
expect(results.violations).toEqual([]);
```

## Quick Reference

### Python (pytest)

```bash
pytest                              # Run all
pytest -m "not slow"                # Skip slow
pytest --cov=src --cov-report=html  # Coverage
pytest -n auto                      # Parallel
pytest -x --lf                      # Stop first, re-run failed
pytest -p randomly                  # Randomize order (flakiness detection)
```

### TypeScript (Vitest)

```bash
npx vitest                  # Watch mode
npx vitest run              # Run once
npx vitest --coverage       # Coverage
npx vitest --ui             # Browser UI
```

### Playwright

```bash
npx playwright test                 # Run all
npx playwright test --shard=1/4     # CI sharding
npx playwright test --debug         # Debug mode
npx playwright show-trace trace.zip # View trace
```

## Recommended Packages

### Python

```bash
# Core
pip install pytest pytest-asyncio pytest-cov pytest-xdist
pip install pytest-mock pytest-randomly time-machine

# Advanced
pip install syrupy hypothesis dirty-equals
pip install testcontainers[postgres] httpx
pip install schemathesis pact-python mutmut
pip install playwright pytest-playwright axe-playwright-python
pip install locust  # Load testing
```

### TypeScript

```bash
# Vitest (recommended for new projects)
npm install -D vitest @vitest/coverage-v8 @vitest/ui

# Jest (legacy/React Native)
npm install -D jest ts-jest @types/jest

# Shared
npm install -D supertest @types/supertest @faker-js/faker
npm install -D @testcontainers/postgresql

# Playwright
npm init playwright@latest
npm install -D @axe-core/playwright

# Contract & Mutation
npm install -D @pact-foundation/pact
npm install -D @stryker-mutator/core @stryker-mutator/vitest-runner
```

Overview

This skill provides production-grade testing strategies and hands-on patterns for building robust, maintainable test ecosystems. It targets Python (pytest) and TypeScript (Jest, Vitest, Playwright) and covers unit, integration, E2E, contract, accessibility, and mutation testing. The guidance is pragmatic: checklists, CI/CD patterns, recommended packages, and anti-patterns to keep suites fast and reliable.

How this skill works

I inspect the project scope and recommend a layered test pyramid, concrete tooling, and directory organization tuned to your stack. I produce actionable artifacts: a test strategy, pre-implementation checklist, fixture and mocking plan, CI test pipeline configuration, and concrete commands/snippets for pytest, Vitest/Jest, Playwright, Pact, and mutation tools. I also flag anti-patterns and provide remediation steps for flaky or slow suites.

When to use it

  • Designing a test strategy for a new feature, service, or project
  • Setting up or refactoring pytest, Jest, Vitest, or Playwright suites
  • Improving test quality: coverage, mutation testing, and flakiness reduction
  • Adding contract testing between microservices or API fuzzing from OpenAPI
  • Optimizing CI/CD test pipelines: sharding, artifacts, and trace collection

Best practices

  • Follow the testing pyramid: many fast unit tests, few E2E tests for critical paths
  • Mock at service boundaries only; prefer real dependencies for integration tests using Testcontainers
  • Keep unit tests isolated and focused (one behavior per test, AAA pattern)
  • Enforce CI on every PR, shard long suites and upload traces/screenshots for failures
  • Use mutation testing and property-based tests to surface blindspots, not just coverage numbers

Example use cases

  • Create a test plan that defines unit/integration/E2E boundaries and coverage targets
  • Refactor flaky fixtures into factory modules and split conftest/root setup
  • Add Pact consumer/provider tests to validate microservice contracts before deploy
  • Set up Playwright E2E with axe-core for accessibility checks and cross-browser runs
  • Introduce mutation testing (mutmut/stryker) and fix surviving mutants

FAQ

How do I choose between Vitest and Jest?

Use Vitest for modern TypeScript projects and faster native ESM workflows; pick Jest when you need mature React ecosystem plugins or legacy support.

What CI pattern prevents long E2E runs from blocking PRs?

Shard long E2E suites across machines, run critical smoke tests on PR, and schedule full regression suites on merge or nightly pipelines while collecting artifacts for failures.