Test Automation Strategy | Coverage and CI Integration
Build test automation with the testing pyramid: 70% unit, 20% integration, 10% E2E. GitScrum integrates test results with quality visibility.
8 min read
Automated tests enable confidence and speed. GitScrum integrates with test results to show quality status alongside development progress.
Testing Strategy
Testing Pyramid
THE TESTING PYRAMID:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β /\ β
β / \ β
β / E2E\ β Few (slow, expensive) β
β / \ Manual + Automated β
β /ββββββββ\ β
β / \ β
β / Integration\ β Some (medium speed) β
β / \ API, component tests β
β /ββββββββββββββββ\ β
β / \ β
β / Unit \ β Many (fast, cheap) β
β / \ Function-level β
β /ββββββββββββββββββββββββ\ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β RECOMMENDED RATIO: β
β β’ 70% Unit tests β
β β’ 20% Integration tests β
β β’ 10% E2E tests β
β β
β WHY THIS RATIO: β
β βββββββββββββββ β
β UNIT TESTS: β
β β’ Fast (milliseconds each) β
β β’ Easy to maintain β
β β’ Pinpoint failures exactly β
β β’ Run on every commit β
β β
β INTEGRATION TESTS: β
β β’ Test component interaction β
β β’ Catch integration bugs β
β β’ Slower than unit tests β
β β
β E2E TESTS: β
β β’ Full user journey β
β β’ Catch real-world issues β
β β’ Slow and flaky β
β β’ Expensive to maintain β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
What to Automate
AUTOMATION DECISION:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β AUTOMATE IF: β
β ββββββββββββ β
β β Runs frequently (every commit, every deploy) β
β β Critical path (login, checkout, core features) β
β β Repetitive (same test, many data variations) β
β β Regression risk (previously broken, might break again) β
β β Time-consuming manually β
β β
β KEEP MANUAL IF: β
β βββββββββββββββ β
β β Exploratory (discovering unknown issues) β
β β Usability/UX (needs human judgment) β
β β Rare scenarios (one-time verification) β
β β Visual assessment (design quality) β
β β Complex setup with low ROI β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β AUTOMATION ROADMAP: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β PHASE 1: FOUNDATION ββ
β β β’ Unit test framework setup ββ
β β β’ CI pipeline running tests ββ
β β β’ Critical path smoke tests ββ
β β ββ
β β PHASE 2: CORE COVERAGE ββ
β β β’ Unit tests for business logic ββ
β β β’ API integration tests ββ
β β β’ Happy path E2E tests ββ
β β ββ
β β PHASE 3: COMPREHENSIVE ββ
β β β’ Edge case coverage ββ
β β β’ Performance tests ββ
β β β’ Security tests ββ
β β ββ
β β PHASE 4: OPTIMIZATION ββ
β β β’ Parallel test execution ββ
β β β’ Test data management ββ
β β β’ Flaky test elimination ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Test Types
By Layer
TEST TYPES BY LAYER:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β UNIT TESTS: β
β βββββββββββ β
β Test individual functions/methods β
β No external dependencies (mock them) β
β Fast: thousands per minute β
β β
β EXAMPLE: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β test('calculates total with tax', () => { ββ
β β const cart = { items: [{ price: 100 }] }; ββ
β β expect(calculateTotal(cart, 0.1)).toBe(110); ββ
β β }); ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β INTEGRATION TESTS: β
β ββββββββββββββββββ β
β Test component interactions β
β Real database, APIs (or realistic mocks) β
β Medium speed: hundreds per minute β
β β
β EXAMPLE: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β test('creates order in database', async () => { ββ
β β const order = await orderService.create(cartData); ββ
β β const saved = await db.orders.findById(order.id); ββ
β β expect(saved.status).toBe('pending'); ββ
β β }); ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β END-TO-END TESTS: β
β βββββββββββββββββ β
β Full user journey through real UI β
β Real browser, real backend β
β Slow: tens per minute β
β β
β EXAMPLE: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β test('user can complete checkout', async () => { ββ
β β await page.goto('/products'); ββ
β β await page.click('[data-test="add-to-cart"]'); ββ
β β await page.click('[data-test="checkout"]'); ββ
β β await page.fill('#card-number', '4242...'); ββ
β β await page.click('[data-test="pay"]'); ββ
β β await expect(page).toHaveURL('/confirmation'); ββ
β β }); ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Test in CI/CD
Pipeline Integration
TESTS IN CI/CD PIPELINE:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β PIPELINE STAGES: β
β β
β COMMIT β UNIT β INTEGRATION β E2E β DEPLOY β
β β β β β β β
β β β β β βΌ β
β β β β β Production β
β β β β β β
β β β β ββ 10 min (nightly/staging)β
β β β β β
β β β ββ 5 min (every PR merge) β
β β β β
β β ββ 2 min (every commit) β
β β β
β ββ Triggered β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β FAST FEEDBACK LOOP: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β UNIT TESTS: Every push ββ
β β β’ Run in < 5 minutes ββ
β β β’ Block merge if failing ββ
β β β’ Immediate developer feedback ββ
β β ββ
β β INTEGRATION: Every PR ββ
β β β’ Run before merge ββ
β β β’ API and service tests ββ
β β β’ Block if critical failures ββ
β β ββ
β β E2E: Pre-deploy ββ
β β β’ Run on staging ββ
β β β’ Critical user journeys ββ
β β β’ Gate for production deploy ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β QUALITY GATES: β
β β’ Unit: 80%+ coverage, 0 failures β
β β’ Integration: 0 critical failures β
β β’ E2E: Happy path 100% pass β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Test Maintenance
Keeping Tests Healthy
TEST MAINTENANCE:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β FLAKY TEST MANAGEMENT: β
β ββββββββββββββββββββββ β
β Flaky test = sometimes passes, sometimes fails β
β β
β DANGER: Team ignores failures, misses real bugs β
β β
β RESPONSE: β
β 1. Quarantine flaky test (don't delete) β
β 2. Create ticket to fix β
β 3. Fix root cause (timing, data, environment) β
β 4. Return to suite when stable β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β TEST CODE QUALITY: β
β ββββββββββββββββββ β
β β’ Tests are production code β
β β’ Refactor for readability β
β β’ DRY: Shared setup, helper functions β
β β’ Clear naming: describes what's tested β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β REGULAR REVIEW: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β QUARTERLY TEST REVIEW ββ
β β ββ
β β METRICS: ββ
β β β’ Test count: 2,450 (β from 2,100) ββ
β β β’ Coverage: 78% (target: 80%) ββ
β β β’ Suite runtime: 8 min (target: < 10) ββ
β β β’ Flaky tests: 3 (target: 0) ββ
β β ββ
β β ACTIONS: ββ
β β β Fix 3 flaky tests ββ
β β β Add tests for auth module (gap identified) ββ
β β β Delete 15 obsolete tests ββ
β β β Parallelize E2E to reduce runtime ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β DELETE OBSOLETE TESTS: β
β β’ Feature removed? Delete tests. β
β β’ Covered by other tests? Delete. β
β β’ Never catches bugs? Evaluate value. β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Coverage Strategy
Meaningful Coverage
TEST COVERAGE APPROACH:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β COVERAGE TARGETS: β
β βββββββββββββββββ β
β β
β DON'T: Chase 100% coverage everywhere β
β DO: Target high coverage where it matters β
β β
β HIGH COVERAGE (80%+): β
β β’ Business logic β
β β’ Payment processing β
β β’ Security-critical code β
β β’ Complex algorithms β
β β
β MEDIUM COVERAGE (60%+): β
β β’ API endpoints β
β β’ Data transformations β
β β’ Validation logic β
β β
β LOWER COVERAGE OK: β
β β’ Simple CRUD operations β
β β’ Configuration code β
β β’ UI scaffolding β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β COVERAGE REPORT: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β MODULE LINES BRANCHES FUNCTIONS ββ
β β ββββββ βββββ ββββββββ βββββββββ ββ
β β auth/ 92% 88% 95% ββ
β β payments/ 89% 85% 91% ββ
β β api/handlers/ 76% 71% 80% ββ
β β utils/ 68% 62% 75% ββ
β β ui/components/ 45% 40% 52% ββ
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β OVERALL 72% 68% 78% ββ
β β ββ
β β TREND: β Up 3% from last month ββ
β β GAP: auth/ needs branch coverage improvement ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β Coverage shows what's tested, not test quality β
β High coverage β good tests β
β Focus on testing behavior, not lines β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ