How to Test APIs and Integrations Without Turning Every Check Into an End-to-End Test
Description and use
UI‑centric tests cause ambiguous failures and long regression cycles. Moving rule checks to the API/service layer, using parallel CI, and separating stubs from real sandboxes cut regression time to 2 hours and increased coverage.
Problem
UI‑centric tests that assert backend rules cause costly, noisy failures and slow regression cycles.
Outcome
Layered testing reduced regression time from 4 days to ~2 hours, improved coverage, and provided clearer diagnostics for failures.
Workflow
- Identify the rule to test and its layer.
- Write an API or service‑layer assertion that touches the rule directly.
- Add schema and semantic checks for each API surface.
- Assert async flows by inspecting messages, consumer state, and logs.
- Use stubs for owned logic and real sandboxes for external contracts on separate schedules.
- Run UI tests only for rules that truly require a browser.
- Integrate tests into CI with parallelism and coverage metrics.
- Monitor flakiness sources and adjust polling or timeouts.
- Iterate on test design to keep diagnostics clear and actionable.
Evidence
BookThatApp moved from UI-only to a keyword-driven suite of 1,000+ scripts with API tests running alongside UI, on GitHub Actions, across 5 device configurations, 4 browsers and 4 parallel threads, at >80% coverage. Regression went from 4 days to roughly 2 hours.
In a 34-month study of 559 flaky-test issue reports at SAP HANA covering 2023–2025, timeouts accounted for 18% and async wait for 10% of system-test flakiness.
The rule I use to assign a check to a layer has two parts: which component can produce the failure, and which layer can observe that failure directly.
- Record date: 2026-10-07T10:55:49.957Z