Skip to content

System Testing

System testing validates a complete, integrated application against its specified requirements — functional and non-functional — as a black box. The whole system under test is assembled and running; testers work from requirements, not from code.

It answers the question: does this release, as a whole, meet its specification? It is the natural home for end-of-cycle verification before user acceptance.

Requirements + design
│
▼
[ Full system under test ] ← black box, no internal peeking
│
▼
Pass / fail against spec

Use it for

  • End-of-cycle verification against the requirements baseline
  • Cross-functional checks the system as a whole must satisfy
  • Release sign-off evidence

Avoid blurring it with neighbours:

System testing is broader than E2E: it covers functional requirements and non-functional expectations (performance, security, recoverability) at the system level.

Tool Role
Requirement-driven suites (TestRail, Zephyr, Xray) Trace tests to requirements
Playwright / Cypress / Selenium Drive the assembled system
Robot Framework Keyword-driven system/acceptance suites
Postman / Newman / Karate API-level system checks
k6 / JMeter / Gatling Non-functional system checks
OWASP ZAP Security checks at system level
Testcontainers / Docker Compose Stand up the full topology deterministically
Terminal window
# Stand up the whole system, then run the suite against it.
docker compose up -d
npx playwright test
docker compose down -v
// REQ-CHECKOUT-04: an out-of-stock item cannot be purchased.
test('REQ-CHECKOUT-04 blocks out-of-stock checkout', async ({ page }) => {
await seedInventory({ sku: 'ABC', qty: 0 });
await page.goto('/product/ABC');
await expect(page.getByRole('button', { name: /add to cart/i }))
.toBeDisabled();
});
  • Trace every test to a requirement. System testing is evidence against the spec; untraceable tests are noise.
  • Cover non-functional requirements too, not only features — performance, security, recovery at the system level.
  • Use a production-like environment. A system test on a toy config proves little.
  • Automate the regression subset; keep exploratory system testing for humans.
  • Do not re-prove unit logic here. System tests verify the assembled whole, not branches.

Self-assessment quiz

Pick one answer per question, then press Check answers.

  1. System testing validates what, exactly?
  2. How does system testing relate to end-to-end testing?
  3. Why must system tests be traceable to requirements?
  4. Which is NOT appropriate as a system-level concern?