Skip to content

Acceptance Testing

Acceptance testing checks whether a system satisfies the business requirements and is fit to release. Where other tests ask “does it work?”, acceptance tests ask “does it do what the customer actually needs, and would they accept it?”. The best-known form is User Acceptance Testing (UAT), performed by or on behalf of end users.

requirements ──► acceptance criteria ──► acceptance tests ──► accept / reject
│ │
└ written by the business └ run against a release candidate

Acceptance testing comes in several flavours: UAT (users sign off), business acceptance (business rules), contract/regulatory acceptance (compliance) and operational acceptance (runbooks, backups, monitoring). It is usually the last gate before release and is driven by criteria agreed up front, not by code.

Robot Framework is a natural fit here: its keyword-driven, plain-language syntax lets business stakeholders read and even author the acceptance criteria using keywords like Given/When/Then, while testers extend them with deeper checks.

Use it for

  • Sign-off before a release, milestone or contractual delivery
  • Validating that delivered behaviour matches the agreed acceptance criteria
  • Business-rule and regulatory/compliance verification
  • Confirming operational readiness (monitoring, rollback, backups)

Avoid it when

  • You want fast feedback during development → push checks down to unit and integration tests
  • There are no written acceptance criteria yet — write those first, with the business
  • You are trying to use UAT to find basic defects; those should never reach the user stage
Tool Ecosystem Notes
Robot Framework Python Keyword-driven acceptance; readable by non-programmers, rich library ecosystem
Cucumber Multi Gherkin Given/When/Then; BDD-style acceptance
SpecFlow / Reqnroll .NET Gherkin on .NET
Behave Python Gherkin + Python step definitions
FitNesse Java/JVM Wiki-based acceptance tables
Gauge Multi Markdown specs, plugin-based
Playwright / Cypress Multi Automate the UAT journeys once criteria are stable
TestRail / Xray / Zephyr Multi Track manual UAT sessions and sign-off
Robot Framework Browser Python Modern Playwright-backed library for RF
Terminal window
pip install robotframework
pip install robotframework-browser # optional: real browser
rfbrowser init
robot --outputdir results tests/
*** Settings ***
Documentation Acceptance tests for the checkout flow
*** Settings ***
Documentation Acceptance: a registered user can complete checkout
Library Browser
*** Variables ***
${BASE_URL} https://staging.example.com
*** Test Cases ***
Registered User Completes Checkout
[Documentation] AC-14: a signed-in user pays and sees confirmation
New Browser chromium headless=true
New Page ${BASE_URL}/login
Fill Text id=email ada@example.com
Fill Text id=password s3cret
Click text=Sign in
Click text=Add to cart
Click text=Checkout
Click text=Pay now
Wait For Elements State text=Order confirmed visible
[Teardown] Close Browser
  • Agree acceptance criteria first. Tests are derived from criteria the business signed off on, not invented after coding.
  • Keep scenarios business-readable. Robot Framework keywords and Gherkin should describe outcomes in the user’s language, not UI mechanics.
  • One scenario, one rule. Each acceptance test should trace to a single requirement (e.g. AC-14).
  • Automate the stable paths. Once criteria settle, move them into an automated Robot Framework or Cucumber suite; keep humans for judgement calls.
  • Never let UAT be the first place a defect is seen. Cheap defects belong to unit and integration tests.
  • Record the sign-off. Acceptance is a decision — capture who accepted and against which criteria.

Self-assessment quiz

Pick one answer per question, then press Check answers.

  1. What does acceptance testing primarily verify?
  2. Which tool is especially well suited to keyword-driven acceptance testing readable by non-programmers?
  3. Where should acceptance criteria come from?
  4. A basic null-pointer defect is found during UAT. What does this indicate?
  5. Why keep acceptance scenarios in business language?