API Testing Guide for QA Engineers (2026)

API testing is QA's highest-leverage surface. A bug caught at the API layer is cheaper to fix than the same bug caught in the UI. The API is also where security and performance often break. This guide

June 10, 2026 · 3 min read · Testing Guides

API testing is QA's highest-leverage surface. A bug caught at the API layer is cheaper to fix than the same bug caught in the UI. The API is also where security and performance often break. This guide covers what to test, how to automate, and how to integrate with mobile/web testing.

Why API testing first

  1. Cheaper — HTTP tests run in milliseconds, UI tests in seconds
  2. More reliable — no locator flake, no timing issues
  3. Closer to the bug — if the API returns wrong data, test it directly
  4. Broader coverage — one API often serves many UI surfaces

A typical test pyramid: 70% unit, 20% API, 10% UI. For mobile backends, this holds well.

What to test

Functional correctness

Input validation

Auth and authorization

Rate limiting

Error handling

Idempotency

Concurrency

Performance

Security

Tools

Postman / Newman

GUI for exploration, Newman for CI. Collection-based. Good for manual + some automation. Shared with developers easily.

REST Assured (Java/Kotlin)


given().auth().oauth2(token)
  .when().get("/users/me")
  .then().statusCode(200).body("email", equalTo("test@example.com"));

Pytest + requests (Python)


def test_get_user(token):
    r = requests.get(f"{BASE}/users/me", headers={"Authorization": f"Bearer {token}"})
    assert r.status_code == 200
    assert r.json()["email"] == "test@example.com"

Karate

DSL that reads cleanly, good for non-developers.

k6

Mainly load testing, but capable of functional tests too.

Playwright

Yes, Playwright does API testing:


const response = await request.get('/api/users/me', { headers: { Authorization: `Bearer ${token}` } });
expect(response.status()).toBe(200);

Schema validation

Use OpenAPI / JSON Schema to validate responses. Write schema once, run against every endpoint:


from jsonschema import validate
validate(response.json(), user_schema)

Catches drift: schema evolves, backend changes, test detects mismatch.

Contract testing

Consumer-driven contracts (Pact) verify that backend changes do not break the mobile or web clients that depend on them. Worth the investment for teams with independently-deployed services.

Test data

API tests need data. Options:

Each approach has tradeoffs. For CI parallelism, per-test creation scoped to user is the cleanest.

CI integration

API tests in CI:

Gate merges on API tests passing. Gate deploys on integration tests passing.

How SUSA handles API testing

SUSA captures APIs during exploration (mitmproxy on Android with root, Playwright response events on web). The captured APIs become a surface map:

Then the hammer_abuse scanners run against the captured APIs:


susatest-agent test myapp.apk --security-depth full

Findings appear alongside UI issues. API regressions between releases (new endpoints, modified schemas, removed endpoints) are flagged via SUSA's evolution tracking.

The "test APIs first" mindset

Every UI bug has a shadow in the API. Test both. But when writing new tests, start with the API. Catch the bug at the source. UI tests verify the UI; API tests verify the logic.

Test Your App Autonomously

Upload your APK or URL. SUSA explores like 10 real users — finds bugs, accessibility violations, and security issues. No scripts.

Try SUSA Free