TesterArmyTesterArmy
  • Pricing
Sign inGet started
HomeBlogHow to Write Test Cases in Plain English

How to Write Test Cases in Plain English

When an agent runs your tests, the plain-English description is the test. How to write flows that run reliably: intent, visible names, one journey each.

TesterArmy
TesterArmy
August 22, 20265 min read

When tests were code, "writing test cases" meant two artifacts: a human-readable case in a spreadsheet, and the automation someone later wrote from it, which promptly drifted apart. Agent-based testing collapses the two: the plain-English description is the executable test. That makes the writing itself a skill worth twenty minutes of theory, because a well-written flow runs reliably and reads like documentation, while a sloppy one produces the same ambiguity a confused new hire would face. These principles come from watching thousands of flows run through TesterArmy's agent; the product-specific reference lives in our writing-test-steps docs.

Describe what a user does, in what order, and what success looks like

A complete flow has three parts: a starting point, actions in sequence, and an observable outcome. The most common failure is omitting the third: "sign up and complete onboarding" tells the agent what to do and never says what should be true afterward. Compare:

Weak: "Test the signup flow."

Strong: "Go to the signup page, create an account with a new email, complete the onboarding steps, and verify the dashboard shows the welcome message with the account's name."

The strong version is not longer for ceremony; every added clause is something the agent can act on or check. If a colleague could perform the flow from your description alone and know whether it worked, the agent can too.

Name things the way the screen names them

The agent looks at the rendered page, so refer to what is visible: "click Upgrade to Pro" beats "click the CTA", and "open Settings from the avatar menu" beats "navigate to the settings module". You never need selectors or internal component names, and using them makes flows worse, since the agent resolves your words against what a user would see. When two elements share a label, disambiguate the way you would for a person: "the Delete button inside the billing section".

One flow, one journey

Resist the mega-flow that signs up, configures a workspace, invites a teammate, upgrades, and cancels, in one run. When it fails at step 19, you learn little, and every earlier step is a dependency risk for the later assertions. Split by user intent: "invite a teammate and verify they appear as pending" is one journey with one verdict. Short flows also parallelize, which keeps runs fast, and they map cleanly to the groups you will schedule differently anyway (smoke versus regression is exactly this split).

Write outcomes as observations, and calibrate their strictness

Assertions in plain English are things a user could verify by looking: "the order confirmation shows the correct total", "an email with a reset link arrives in the inbox", "the item no longer appears in the list". Two calibration rules keep them honest. Be strict about meaning ("the total is $29") where the value matters, and tolerant about presentation ("a success message appears") where design changes often; over-specifying decor is how flows generate noise on every copy tweak. And prefer positive observations to absences where possible, since "the error banner does not appear" passes for many wrong reasons.

Handle variability by stating the rule

Real apps have A/B tests, cookie banners, and rotating promos. Tell the flow how to behave, once: "dismiss the cookie banner if it appears", "if a promo modal opens, close it before continuing". Stating conditionals like this is what keeps unattended runs (especially nightly ones) quiet without weakening the real assertions.

Where the data comes from

Flows that create things should bring their own materials or use managed ones. "Sign up with a new email" works unattended in TesterArmy because the agent has managed inboxes; it can register with a fresh address and retrieve the verification code itself, and the same applies to SMS. For flows that need existing state ("log in as an admin"), name the role and keep the credentials in the project's auth settings rather than in the flow text.

A worked example

Weak: "Test checkout."

Strong: "Starting logged out on the home page, search for 'desk lamp', open the first result, add it to the cart, and check out as a guest with the test card. Verify the confirmation page shows one item, the correct price, and an order number, and that a confirmation email arrives."

That flow is executable by an agent, reviewable by a PM, and stable across redesigns, because everything in it is stated at the level of user meaning. Which is the deeper point of the plain-English model: your tests end up written in the language your team already uses to discuss the product, and the gap between "what we said it should do" and "what we test" closes to zero. Why that model holds up as the product changes is the story of agentic testing more broadly.

FAQ

Is plain-English testing the same as BDD/Gherkin? Gherkin is structured syntax (Given/When/Then) that engineers then implement in code; the English is a label for the automation. In agent-based testing the English is the automation, with no implementation layer to write or drift.

How precise do I need to be? As precise as you would be with a capable colleague: name what is visible, state the outcome, disambiguate where two things look alike. The agent asks for nothing more exotic.

Can non-engineers write these? Yes, and that is much of the point. The people who know what must work (PMs, support, founders) can put those flows under test directly.

ON THIS PAGE

  • Describe what a user does, in what order, and what success looks like
  • Name things the way the screen names them
  • One flow, one journey
  • Write outcomes as observations, and calibrate their strictness
  • Handle variability by stating the rule
  • Where the data comes from
  • A worked example
  • FAQ

SHARE THIS ARTICLE

  • X

Check other TesterArmy insights

August 20, 2026

Introducing the Issues Tab: One Row Per Bug, No Matter How Many Runs Found It

Agent-found bugs now land in one deduplicated list instead of scattered run reports. Every issue carries expected vs actual, repro steps, and a replay of the exact moment it broke - and leaves the list as a Linear ticket, a prompt for your coding agent, or resolved.

Read article
August 18, 2026

We Benchmarked 10 Vision Models on Clicking What They See

All ten models answered every visual understanding question correctly. Grounding the click is where the field splits, and where GPT-5.6 Luna won on accuracy, precision, and cost.

Read article
July 22, 2026

Introducing Scout: API Testing Built for AI Agents

We built Scout, an open source CLI that gives coding agents a safe harness for testing APIs. Point it at an OpenAPI spec and it sweeps, fuzzes, and records findings - with guardrails on by default. In this walkthrough it finds three real bugs in the Swagger Petstore.

Read article
TesterArmyTesterArmy

AI-powered QA testing for modern teams. Ship faster with confidence.

SOC 2 Type 2 badge
GDPR badge

© 2026 TesterArmy, Inc.

Solutions
  • AI app testingAI app testing
  • EcommerceEcommerce
  • Expo app testingExpo app testing
  • MobileMobile
  • Production monitoringProduction monitoring
  • React Native testingReact Native testing
  • WebWeb
  • WordPress testingWordPress testing
Quick links
  • HomeHome
  • DemoDemo
  • FeaturesFeatures
  • How it worksHow it works
  • FAQFAQ
  • PricingPricing
  • Get a demoGet a demo
  • About usAbout us
  • Contact usContact us
Resources
  • DocumentationDocumentation
  • BlogBlog
  • API referenceAPI reference
  • Getting startedGetting started
Legal
  • Privacy policyPrivacy policy
  • Terms of serviceTerms of service
TesterArmyTesterArmy
  • Pricing
Sign inGet started
Quick links
  • HomeHome
  • DemoDemo
  • FeaturesFeatures
  • How it worksHow it works
  • FAQFAQ
  • PricingPricing
  • Get a demoGet a demo
  • About usAbout us
  • Contact usContact us