View all services
Talk to QA Advisor
/Blog/UAT Testing Sample: A Worked Example You Can Copy
Functional Testing6 min read

UAT Testing Sample: A Worked Example You Can Copy

A filled-in UAT test case, negative case, execution log, defect record and sign-off criteria, using one realistic scenario throughout so you can see how the documents connect.

Published September 22, 2026Last updated September 22, 2026
On this page

Most UAT guides explain the phase and stop. This one gives you the artefacts: a filled-in test case, an execution log, a defect record and sign-off criteria, using one realistic scenario throughout so you can see how the documents connect.

The scenario is a B2B invoicing application adding partial payments. It is deliberately ordinary, because the shape of the paperwork matters more than the domain.

The short version
A UAT case needs an id, a business scenario, preconditions, numbered steps in business language, observable acceptance criteria, and a named business tester. Write acceptance criteria a finance clerk can verify from the screen without asking an engineer. Pair every positive case with the rejection it implies, and agree sign-off criteria before execution starts, never during it.

Who should run UAT, and who should not

UAT fails most often before a single case is executed, in the decision about who runs it.

The tester must be someone who does the job the software supports. Not a project manager, not a business analyst who gathered the requirements, and not the QA team. A business analyst knows what was specified, which means they test the specification rather than the work. The person who processes invoices daily knows that customers routinely pay slightly under the invoiced amount and expect the remainder written off, which is the kind of thing that never appears in a requirements document.

Three or four testers is usually the right number for a mid-sized release. Fewer and you get one person's habits. More and coordination costs exceed the coverage gained.

Give them protected time. UAT squeezed around a day job produces rushed passes, because a tester under time pressure looks for reasons to mark something Pass rather than reasons to investigate.

When to run it

UAT sits after system testing and before release, and the sequencing matters more than the calendar.

Entry criteria worth enforcing: system testing complete with no open critical defects, the UAT environment loaded with production-shaped data, and the test pack reviewed by the business before execution starts. Entering UAT with known critical defects wastes the testers' time on failures QA already knows about, and it trains them to expect breakage, which makes them less likely to report the subtle defects you actually need from them.

The environment is the part that slips. UAT on a database of Test Customer 1 through Test Customer 50 will not surface the defect that only appears with a customer name containing an apostrophe, or an invoice dated 31 March in a financial year that ends that day.

What a UAT case must contain

A UAT case is not a QA test case with different wording. QA asks whether the software works. UAT asks whether the business can accept it, so the case is written in business language and executed by someone who does the job.

What every UAT case needs, and why
FieldExampleWhy it matters
Case IDUAT-INV-007Referenced by defects and the sign-off
Business scenarioRecord a partial payment against an open invoiceStates the job, not the feature
Business areaFinance, accounts receivableDecides who signs
PreconditionInvoice INV-2026-0442 exists, status Open, balance 10,000.50Makes the case repeatable
StepsNumbered, in business languageA clerk can follow without training
Acceptance criteriaBalance reduces by payment amount, status becomes Partially PaidTurns sign-off from opinion into fact
TesterNamed individual, not a teamSomeone can be asked what they saw
ResultPass, Fail or BlockedBlocked is not Fail; it needs a different fix

The field people skip is acceptance criteria, and it is the one that decides whether sign-off is a judgement call or a fact. "Payment applies correctly" is an opinion. "Invoice balance reduces by the payment amount and status changes to Partially Paid" can be verified by a finance clerk without asking an engineer.

A worked UAT test case

This is one complete case, filled in as it would be handed to a business tester.

UAT-INV-007 · Record a partial payment against an open invoice
Detail
Business areaFinance, accounts receivable
TesterPriya Nair, Senior Accounts Executive
Build4.2.0-rc3, UAT environment
PreconditionInvoice INV-2026-0442 exists. Status Open. Balance 10,000.50. Customer Northwind Traders is active and not on credit hold.
Step 1Open Invoices and search for INV-2026-0442
Step 2Select Record Payment
Step 3Enter a payment of 4,000.25, method Bank transfer, dated today
Step 4Save the payment
Expected 1Invoice balance shows 6,000.25
Expected 2Invoice status changes from Open to Partially Paid
Expected 3Payment appears in the invoice payment history with today's date and the correct method
Expected 4Customer statement shows the reduced outstanding balance
AcceptanceAll four expected results observed, no rounding difference at any decimal place

Two things to notice. The steps use the language of the job, not the interface: "record a payment of 4,000" rather than "enter 4000 in the txtAmount field". And every expected result is observable by the tester without database access. For more, see our guide to writing better test cases.

The negative case that belongs with it

Business users test the happy path unless you explicitly give them the unhappy one. Pair every positive case with the rejection it implies.

UAT-INV-008 · Reject a payment larger than the outstanding balance
Detail
PreconditionInvoice INV-2026-0442, status Partially Paid, balance 6,000.25
Step 1Open the invoice and select Record Payment
Step 2Enter a payment of 9,000.00
Step 3Save the payment
Expected 1The payment is rejected
Expected 2A message states the payment exceeds the outstanding balance of 6,000.25
Expected 3Invoice balance and status are unchanged
Expected 4No entry is written to payment history
AcceptanceRejection is explicit and the invoice is untouched. A silent failure fails this case.

If your UAT pack is all positive cases, you are not testing acceptance. You are running a demonstration.

The execution log

The log is the evidence trail. It answers, months later, what was actually run and by whom.

UAT execution log, extract
Case IDScenarioTesterDateResultDefect
UAT-INV-005Create invoice with multiple line itemsPriya Nair2026-09-21Pass-
UAT-INV-006Record a full paymentPriya Nair2026-09-21Pass-
UAT-INV-007Record a partial paymentPriya Nair2026-09-22FailUAT-D-014
UAT-INV-008Reject an overpaymentPriya Nair2026-09-22Pass-
UAT-INV-009Partial payment on a foreign currency invoiceRahul Desai2026-09-22BlockedUAT-D-015
UAT-INV-010Credit note against a partially paid invoiceRahul Desai2026-09-23Pass-

Keep the tester's real name, not "business team". When a defect is disputed after release, the value of this log is being able to ask the person who ran it what they saw. For more, see our guide to software tester roles and responsibilities.

A defect record a developer can act on

The commonest failure in UAT defect reports is describing a feeling rather than a reproduction. "Payments are not working properly" costs a developer an hour of guessing.

Poor:

> Partial payments are broken. The balance looks wrong sometimes.

Usable:

> UAT-D-014 · Partial payment rounds the balance to the nearest rupee > > Environment: UAT, build 4.2.0-rc3 > Test case: UAT-INV-007 > Steps: Open invoice INV-2026-0442 with balance 10,000.50. Record a payment of > 4,000.25 by bank transfer. Save. > Expected: Balance shows 6,000.25. > Actual: Balance shows 6,000.00. The 0.25 is lost, not deferred. > Impact: Every invoice with paise-level amounts will drift. Finance cannot reconcile. > Severity: High. Blocks sign-off. > Evidence: screenshot uat-d-014.png, attached.

The difference is not length, it is reproducibility. A developer can act on the second without a conversation.

Turning UAT results into a release decision

The pack is executed, the log is filled in, and someone has to decide whether to ship. That conversation goes better when the numbers are in front of everyone.

From the extract above: six cases executed, four passed, one failed with a high-severity defect, one blocked on environment. That is not a pass. It is also not a reason to stop the release, because the blocked case is an environment gap rather than a product defect, and it can be executed once rates are loaded.

The distinction that saves arguments is between Fail and Blocked. A failure is information about the software. A blocked case is information about your test environment, and counting it as a failure makes the product look worse than it is while hiding a real gap in your setup. Track them separately and report them separately.

Where a defect is deferred rather than fixed, write the deferral down with an owner and a date, inside the sign-off. A deferred defect with no owner is a defect that will be rediscovered in production by a customer.

Sign-off criteria, agreed before execution

Agree what "passed" means before anyone runs a case. Deciding afterwards turns sign-off into a negotiation under release pressure.

  1. Every high-severity case passes. No exceptions, no conditional sign-off.
  2. No open critical or high defects. Medium and low may be deferred with a named owner and a date.
  3. At least 95% of planned cases executed. Unexecuted cases are unknown risk, not passed risk.
  4. Each business area signs for its own scope. Finance signs the payment flows, operations signs the fulfilment flows. One person signing for everything means nobody read it.
  5. Deferred defects are listed in the sign-off itself, not in a separate document that gets lost.
🔬 From our work
The UAT rounds that go badly in our experience are the ones where sign-off criteria were written after execution began. Once a release date is in view, every open defect becomes negotiable and the phase stops being a gate. We have not published a quantified study of UAT outcomes, so treat that as an observation from delivery rather than a measured statistic. The practical fix costs nothing: agree the criteria in the same meeting that agrees the scope, and put the deferred-defect list inside the sign-off document rather than alongside it.

Adapting the sample

The structure above transfers to most domains with three changes.

Swap the persona. The tester should be whoever does this task for a living. For a patient-records release that is a ward clerk, not a project manager.

Swap the data. Use production-shaped values, including the awkward ones: long names, non-ASCII characters, amounts with fractional currency, dates near month end. Clean round numbers hide the defects that matter.

Keep the acceptance criteria observable. If verifying a result requires a database query, it is a QA test, not a UAT case. Rewrite it so the business tester can confirm it from the screen in front of them.

Common mistakes

Common UAT mistakes and what they cost
MistakeWhat happensFix
QA team runs UATA second round of QA, business defects missedThe tester must be someone who does the job
Acceptance criteria written as opinionsSign-off becomes a negotiationMake every criterion observable on screen
Only happy paths in the packRejections and edge cases ship untestedPair each positive case with its negative
Clean round test dataRounding and formatting defects surviveUse production-shaped values including fractional amounts
Defects described as feelingsDeveloper guesses at reproductionSteps, expected, actual, evidence
Sign-off criteria agreed lateEvery defect becomes negotiableAgree criteria with scope, before execution
One person signs for everythingNobody actually read their areaEach business area signs its own scope

The most expensive of these is the first. UAT run by the QA team is not user acceptance testing, it is a second round of QA with a different label, and it will miss exactly the defects UAT exists to catch: the ones that are technically correct and wrong for the business.

If you want UAT designed and run by people who do it regularly, our software testing services cover UAT planning, execution and sign-off.

Frequently Asked Questions

What should a UAT test case contain?

A case ID, the business scenario in the language of the job, the business area, a precondition that makes it repeatable, numbered steps, observable acceptance criteria, a named tester and a result. The field teams skip is acceptance criteria, and it is the one that decides whether sign-off is a fact or an opinion.

How do I write UAT acceptance criteria?

Make them observable from the screen without engineering help. "Payment applies correctly" is an opinion. "Invoice balance reduces by the payment amount and status changes to Partially Paid" can be verified by a finance clerk. If confirming a result needs a database query, it is a QA test rather than a UAT case.

Who should perform UAT?

Someone who does the job the software supports. Not the QA team, not a project manager, and not the business analyst who gathered the requirements, because they will test the specification rather than the work. Three or four testers is usually right for a mid-sized release, and they need protected time rather than UAT squeezed around a day job.

What is the difference between UAT and QA testing?

QA asks whether the software works as specified. UAT asks whether the business can accept it. That changes who executes, what language the cases use, and what counts as a failure: something can be technically correct and still fail UAT because it does not match how the work is actually done.

What is the difference between a Failed and a Blocked UAT case?

A failure is information about the software. Blocked means the case could not be executed, usually because of a test environment gap such as missing reference data. Counting blocked cases as failures makes the product look worse than it is while hiding a real gap in your setup, so track and report them separately.

What should a UAT defect report include?

Environment and build, the linked test case, reproduction steps with real data, expected result, actual result, business impact, severity, and evidence such as a screenshot. The difference between a poor report and a usable one is reproducibility, not length. "Payments are broken" costs a developer an hour of guessing.

What are good UAT sign-off criteria?

Every high-severity case passes with no conditional sign-off, no open critical or high defects, at least 95% of planned cases executed, each business area signing for its own scope, and deferred defects listed inside the sign-off document with a named owner and date. Agree all of this before execution starts, because criteria set afterwards become negotiable under release pressure.

What test data should UAT use?

Production-shaped values including the awkward ones: long names, apostrophes, non-ASCII characters, amounts with fractional currency, dates at month and financial year end. A database of Test Customer 1 through 50 will never surface the rounding and formatting defects that UAT exists to catch.

Free Assessment

Get a free QA audit for your project

Identify quality gaps before they become production bugs.

Get Free Audit

Ship software with confidence

Talk to a QA advisor and find out how QAble can help your team build quality in at every stage.

No sales pitch
Technical walkthrough
No lock-in commitment

Talk to QA Advisor

Direct access to QAble's QA specialists.

Response within 24 hours