Platform

Solutions

Resources

Platform

Solutions

Resources

Platform

Solutions

Resources

Blog

Behavioural Testing: What it is and How to Do it Well

Rishabh Kumar

Published on

Behavioural Testing
eBook CTA Background
RECOMMENDED RESOURCES

The Ultimate Enterprise Guide To Agentic Testing

AI agents can write, fix and triage your tests at scale. See how to use them in QA while keeping people in control of everything that ships.

Get the eBook →

Enterprise guide to agentic testing
eBook CTA Background
RECOMMENDED RESOURCES

The Ultimate Enterprise Guide To Agentic Testing

AI agents can write, fix and triage your tests at scale. See how to use them in QA while keeping people in control of everything that ships.

Get the eBook →

Enterprise guide to agentic testing
eBook CTA Background
RECOMMENDED RESOURCES

The Ultimate Enterprise Guide To Agentic Testing

AI agents can write, fix and triage your tests at scale. See how to use them in QA while keeping people in control of everything that ships.

Get the eBook →

Enterprise guide to agentic testing
eBook CTA Background
RECOMMENDED RESOURCES
Enterprise guide to agentic testing

The Ultimate Enterprise Guide To Agentic Testing

AI agents can write, fix and triage your tests at scale. See how to use them in QA while keeping people in control of everything that ships.

Get the eBook →

Table of contents

Lorem ipsum

Lorem ipsum

Lorem ipsum

Lorem ipsum

Lorem ipsum

A team ships a release with 95% unit test coverage. Every test passes and the build is green. Thirty-six hours later, customer support reports that loan approvals are quietly failing in production.

The cause turns up quickly. A refactor moved one calculation into a different service. Every unit test in that module kept passing, because each one checked the function it called. None of them checked what the customer was actually supposed to get.

The code wasn’t really the problem. What the tests were measuring was. Coverage was high, but nobody had checked the behaviour. Code tells you how something works. Behaviour tells you what it does. If your tests only care about how, you can ship a product that gets the what completely wrong.

That’s the gap behavioural testing closes. In this guide, we’ll explain what behavioural testing is, how it’s different from BDD, black-box and functional testing, how to design behavioural tests, the mistakes to avoid, and why it matters even more now that AI is writing so much code.

Behavioural Testing



What is Behavioural Testing?

Behavioural testing is the discipline of verifying that a system produces the outcomes customers expect, when triggered by the inputs and conditions customers actually use, regardless of how the underlying code is structured.

Three properties separate it from adjacent practices.

  • The anchor is the outcome: A behavioural test asserts what the system is supposed to do for the user, not what the code is supposed to compute internally.
    ‍

  • The unit of verification is the workflow: Behavioural tests are scoped to user journeys, namely submit a claim, place an order, admit a patient, bind a policy, rather than to individual functions.
    ‍

  • The framing is independent of implementation: A behavioural test that passes against the current implementation should still pass against a clean rewrite of the same functionality. If a refactor breaks the test, either the test is wrong or the refactor changed behaviour.
    ‍

A useful working definition is that behavioural testing verifies expected behaviour against actual behaviour, with workflows as the unit and customer outcomes as the anchor.

Implementation Bound Vs Behavioural Test

Implementation Bound Test

Behavioural Test

Verifies the function called

Verifies the customer outcome

Breaks on refactor

Survives refactor

Passes while the product fails

Fails when the product fails

Measures how

Measures what


Here’s the difference in practice.

This test is tied to the code:

@Test
void calculatesApprovalScore() {
    double score = loanScorer.calculate(applicant);
    assertEquals(742.5, score, 0.01);
}
@Test
void calculatesApprovalScore() {
    double score = loanScorer.calculate(applicant);
    assertEquals(742.5, score, 0.01);
}
@Test
void calculatesApprovalScore() {
    double score = loanScorer.calculate(applicant);
    assertEquals(742.5, score, 0.01);
}
@Test
void calculatesApprovalScore() {
    double score = loanScorer.calculate(applicant);
    assertEquals(742.5, score, 0.01);
}

It passes as long as calculate() returns the right number, even if that number never reaches the approval decision anymore.

This plain-english one checks the behaviour:





It doesn’t care where the calculation lives. It only passes if the customer actually gets an approval, and the record says so.



The Three Things People Mean by Behavioural Testing

The term is overloaded, and practitioners use it to mean three related but distinct things. Clarifying the distinction stops most conversations going in circles, and it matters here because most published material on this topic collapses these three into one, usually by declaring behaviour testing and black-box testing to be the same thing. They are not.

‍

Three Things People Mean by Behavioural Testing

Behaviour-Driven Development Testing

A specific approach where tests are written in a constrained natural language, often Given-When-Then expressed in Gherkin and executed by frameworks such as Cucumber, SpecFlow, or behave, and shared between business and engineering as living documentation. BDD is a notation, a workflow, and a collaboration practice.

It is one expression of behavioural testing, not the entire discipline, and Given-When-Then steps can be just as implementation-bound as classical scripts.

‍

Given-When-Then Format

Black-Box Behavioural Testing

A perspective in which tests are designed without knowledge of the internal implementation, examining inputs and outputs from the outside. Black-box is a perspective, not a discipline.

It is a useful constraint that stops tests leaking implementation assumptions, but on its own it does not anchor verification to customer outcomes, and a black-box test can still be a low-level functional check that misses workflow-level failures.‍

Modern Behavioural Testing as a Discipline

The interpretation this page uses, namely verification of expected behaviour against actual behaviour, anchored to customer outcomes, scoped to workflows, independent of implementation, and structured for durability across refactors.

It absorbs the strengths of BDD (shared specifications, plain-language expression) and of black-box thinking (implementation independence) and adds two things, an explicit customer-facing anchor and the workflow as the unit of verification.

BDD is a notation, behavioural testing is a discipline, and the first lives inside the second. The rest of this page uses behavioural testing in that third sense.



Why Behavioural Testing Matters More Now Than Ever

Behavioural testing is not a new idea, and the discipline has existed in some form since the earliest acceptance testing of the 1970s. What has changed is the cost of not practising it, and three forces have raised that cost from a nuisance to a structural risk.

‍

  1. Code is Generated Faster Than it Can Be Reviewed

AI assistants and agents produce material portions of contemporary codebases, so the implementation surface changes daily. Tests bound to the implementation break daily and produce false confidence in between failures, while tests bound to customer-facing behaviour survive the rewrite because the behaviour is what the customer is buying.‍


  1. The Expensive Failures Are at Workflow Level

The bugs that take businesses down are not function-level defects, they are workflow breaks, namely a claim that cannot be submitted, an order that cannot be completed, a login that succeeds and fails on the next page. These live in the integration between functions, where behavioural tests scoped to workflows catch them and unit tests scoped to functions do not.‍


  1. Regulation Has Started Asking Different Questions

Regulators in financial services, healthcare, insurance, and increasingly the broader AI space are asking not just whether you tested but whether what you tested matches what the customer experiences.

A verification report mapped to customer workflows and signed off on release day is a defensible answer in a way that a coverage percentage on internal code structures is not.



Behavioural Testing vs Functional Testing

Functional testing is the big category, and behavioural testing is one way of doing it. Functional testing checks that the system does what it should. Non-functional testing checks how well it does it, like speed or accessibility.

Behavioural testing is functional testing that focuses on customer outcomes and workflows. A test that checks a button click changes a field is functional, but not really behavioural. A test that checks a customer who completes checkout gets an order confirmation is both.

When code changes fast, behavioural tests are the most useful kind of functional test. Narrower functional checks still have their place at the unit level.



Behavioural Testing vs Behaviour-Driven Development

These two get mixed up a lot. BDD was introduced in the mid-2000s and combines writing specifications, working together and automated testing. Its main practices are:

  • Describing expected behaviour in plain language, usually Given-When-Then

  • Business and engineering writing specifications together

  • Running those specifications as automated tests through tools like Cucumber or SpecFlow

  • Keeping the specifications up to date as living documentation


A typical BDD scenario looks like this:

Scenario: Customer completes checkout
  Given I am logged in as a returning customer
  And I have a pair of running shoes in my basket
  When I pay with my saved card
  Then I see an order confirmation
  And the order appears in my order history
Scenario: Customer completes checkout
  Given I am logged in as a returning customer
  And I have a pair of running shoes in my basket
  When I pay with my saved card
  Then I see an order confirmation
  And the order appears in my order history
Scenario: Customer completes checkout
  Given I am logged in as a returning customer
  And I have a pair of running shoes in my basket
  When I pay with my saved card
  Then I see an order confirmation
  And the order appears in my order history
Scenario: Customer completes checkout
  Given I am logged in as a returning customer
  And I have a pair of running shoes in my basket
  When I pay with my saved card
  Then I see an order confirmation
  And the order appears in my order history

Behavioural testing is the bigger idea, and BDD is one structured way of doing it. You can spot a BDD team by their Gherkin feature files. A team can also do behavioural testing without BDD, for example by writing plain English tests on a modern platform, with the same focus on outcomes and workflows and none of the Gherkin. Both are fine. What matters is whether the tests focus on customer outcomes and workflows.

BDD Works Well When

BDD Becomes Overhead When

Business analysts and developers write specifications together

The team is small and nobody shares ownership of specifications

Living documentation is a real goal

Keeping feature files and step definitions in sync becomes a job in itself

The team values the Given-When-Then format

Plain English tests give the same focus with less effort

For many teams, the best approach is to do behavioural testing properly and use BDD where the collaboration really pays off.



Behavioural Testing vs Black-Box Testing

This is the distinction most published material on behaviour testing gets wrong, usually by asserting that the two are the same thing. They overlap, and they are not identical.

Black-box testing describes a perspective, namely that the tester examines the system from the outside without knowledge of its internal implementation, contrasted with white-box testing (full access to internal code) and grey-box testing (partial access). Most behavioural tests are black-box, because their value depends on being independent of implementation. But not all black-box tests are behavioural.

A black-box test that probes individual field validations without anchoring to a workflow or a customer outcome is a low-level functional black-box test, not a behavioural test. The distinction is one of focus, namely that black-box constrains what the tester sees while behavioural testing constrains what the test verifies.

Black-Box Test-Design Techniques

Black-box testing comes with well-known techniques for choosing test inputs. Other articles often call these “behavioural testing techniques”, but they’re really black-box design techniques. They help you pick inputs for behavioural tests, but they don’t make a test behavioural on their own.

Technique

How It Works

Example

Equivalence partitioning

Split inputs into groups that should behave the same, then test one value from each group

Ages 0 to 17, 18 to 65 and 66 and over each get one test

Boundary value analysis

Test at and just past the edges of ranges, where bugs tend to hide

For a field that accepts 1 to 100, test 0, 1, 2, 99, 100 and 101

Decision table testing

List combinations of conditions and the expected result for each

Loan approval based on credit score, income and existing customer status

State transition testing

Check the system moves correctly between states

An order going from draft to submitted to approved

Error guessing

Use experience to target likely problem areas

Double clicks, empty fields and very long names

Inside a behavioural test, these techniques help you decide which preconditions and inputs to vary. A decision table that only checks field validations, without a customer outcome, is still black-box functional testing.



Behavioural Testing vs User Acceptance Testing

UAT is a phase. Behavioural testing is a way of testing. They overlap, but they’re not the same thing.

UAT is when real users, or people representing them, check the system meets their needs before it goes live. They’re usually business users, not engineers. Behavioural tests are usually written by engineers or QA, and automated.

Behavioural tests are great input for UAT, because they describe expected behaviour in language users can check. Teams with a strong behavioural suite often find UAT gets much lighter, because the suite has already checked what users would.



How to Design a Behavioural Test

Here’s a simple six-step approach you can use in any test programme.

Step

What to Do

Example

1. Start with the customer outcome

Begin with what the customer should get, not the screen, API or field

“The customer gets an order confirmation after checkout”

2. Set the preconditions

What must be true before the test starts (the Given)

The user is logged in and the product is in stock

3. Describe the workflow

What the user does, step by step, to get the outcome (the When)

Search, add to basket, check out, pay

4. Check the outcome

What must be true for the test to pass (the Then)

The confirmation shows, the order is recorded and stock goes down

5. Add variations

Run the same workflow with different user types, products, countries or currencies

UK and EU customers, card and PayPal

6. Check it doesn’t depend on the code

Look for anything tied to today’s code, like a specific selector or function name, and remove it

Replace “click #btn-submit-2” with “click Place order”

A good behavioural test should still pass if someone rewrote the feature from scratch, as long as it behaves the same way.



The Three Anchors of Behavioural Testing

Good behavioural tests are held in place by three things. Tests with all three last. Tests missing one tend to drift.

Anchor

What It Means

What It Catches

Outcomes

The result the customer can see, like a confirmation, payment, status update or document

Changes that break what the customer is paying for, even when the code looks fine

Workflows

The user journey that leads to the outcome, described by what the user is trying to do, not the exact screen layout

Breaks between steps, and it keeps working through UI redesigns

State

The data that matters at key points, like the order record existing, stock going down or a balance updating

Silent failures, like a confirmation showing when no order was actually saved

You need all three. A test that only checks outcomes can pass on a screen that’s lying. A test that only checks workflows can pass when the data in the middle is wrong. A test that checks all three is what real release confidence looks like.



Behavioural Testing Mistakes to Avoid

These six mistakes come up again and again. The first three are common in teams new to behavioural testing. The last three show up in teams that use the language but not the practice.

Mistake

What Goes Wrong

Tests tied to UI selectors

A “behavioural” test that checks CSS selectors, IDs or XPath breaks the next time the UI changes

Checking text instead of outcomes

Checking the page says “Order Confirmed” doesn’t prove the order was saved, the email was sent or other systems were told. The text is needed, but it isn’t enough

Skipping steps in the workflow

Jumping from “logged in” to “order complete” through API calls or the database means the test passes while the real workflow might not

Behavioural words, code-bound tests

Given-When-Then steps whose code is tightly tied to the implementation. You get all the effort of BDD and none of the benefit

Checking internal data customers never see

Checking a cache value or session token ties the test to the code, whatever it’s called

One test trying to check everything

A test with fourteen steps and seventeen checks is slow, fragile and hard to diagnose. Keep each test to one workflow and a few related checks

There’s a difference between skipping steps and setting up preconditions. Using an API to create test data before the workflow starts is fine. Skipping the steps you’re supposed to be testing isn’t.



Tools and Approaches for Behavioural Testing

The tool matters less than whether your tests focus on outcomes, workflows and state. Here’s how the main approaches compare.

Approach

How It Works

Best For

BDD frameworks, like Cucumber, SpecFlow and behave

Given-When-Then scenarios with step definitions in code. How well tests survive change depends on how those steps are written

Teams where business and engineering write specifications together

Natural-language test platforms, like Virtuoso QA

Tests written in plain English that map to workflow steps, with no feature files or step definitions to keep in sync

Teams who want BDD’s focus on behaviour without the overhead, and want more people able to write tests

Workflow modelling tools

Model workflows visually and generate tests from the model

Organisations with heavy audit needs, where the model itself is valuable

Custom DSLs and frameworks

An in-house test language built around your product

Large, mature engineering teams with unusual domains

A team using simple tools well will get better results than a team using fancy tools badly.



Why Behavioural Testing Matters in the AI Era

  • Code changes all the time, behaviour doesn’t: When AI rewrites code every week, tests tied to the code break or quietly check the wrong thing. The claim still needs paying and the order still needs shipping, so tests tied to that keep working.

  • Regulators want behaviour-level evidence: “Show us what the customer experienced” can’t be answered with code coverage. “This workflow was checked on this release, with this result” can.

  • Trust is the bottleneck: With AI writing code faster, the hard part isn’t writing code, it’s trusting it. A suite that proves customers get the right outcomes in the journeys they actually take is the strongest proof a release team can give.

When AI keeps rewriting the code, behaviour is the one thing you can rely on staying the same.



How Virtuoso QA Helps with Behavioural Testing

Virtuoso QA is built around the same ideas as behavioural testing:

  • Plain English tests at the workflow level: You write what the user does and what should happen, so tests are behavioural from the start, with no feature files, step definitions or fragile selectors.

  • Tests drafted from requirements: Touchstone reads your requirements and Jira stories and drafts tests based on what the customer should get, showing the source for each one. A named person approves every requirement before anything gets built.

  • Reusable modules for business actions: Things like logging in, submitting a claim or applying a discount are built once and reused across hundreds of tests, so the workflow is what gets reused.

  • Fixes you review when the UI changes: When the UI is refactored, often by an AI assistant, Virtuoso QA suggests fixes for your team to accept or reject, and every decision is logged, so behavioural tests keep checking the workflow.

  • Checks beyond the screen: One test can check the UI, call APIs and check the database, so you can confirm the order was actually saved and downstream systems got the update, not just that a confirmation message appeared.

  • Evidence for every release: Every run records the requirement, the result, who approved it and the build, which is exactly the behaviour-level evidence regulators ask for.


Every AI action is suggested for review, run by a deterministic engine and recorded, so you stay in control.

Behavioural tests follow whole journeys, and Virtuoso QA’s end-to-end testing runs those journeys across every system they touch, checking the outcome, the workflow and the data in one test.

Behavioural Testing FAQs

What is behavioural testing?

Is behavioural testing the same as BDD?

Is behavioural testing the same as black-box testing?

What are examples of behavioural tests?

Why do behavioural tests survive refactors?

Can behavioural tests be automated?

See what your next release looks like with Virtuoso

Book a walkthrough on your applications and your workflows. Bring a requirement, a user journey, or a brittle Selenium script, and watch the loop run on something you recognise.

See what your next release looks like with Virtuoso

Book a walkthrough on your applications and your workflows. Bring a requirement, a user journey, or a brittle Selenium script, and watch the loop run on something you recognise.

See what your next release looks like with Virtuoso

Book a walkthrough on your applications and your workflows. Bring a requirement, a user journey, or a brittle Selenium script, and watch the loop run on something you recognise.

Virtuoso QA is establishing the standard of proof for software releases. Its governed QA loop turns business requirements into tests for any browser-based application: AI proposes, a deterministic engine executes, a person approves what matters, and every decision leaves evidence.

Trust Center

AICPA

SOC

WAVE STRONG PERFORMER

@ Copyright 2026 SpotQA, Creators of Virtuoso QA

Virtuoso QA is establishing the standard of proof for software releases. Its governed QA loop turns business requirements into tests for any browser-based application: AI proposes, a deterministic engine executes, a person approves what matters, and every decision leaves evidence.

Trust Center

AICPA

SOC

WAVE STRONG PERFORMER

@ Copyright 2026 SpotQA, Creators of Virtuoso QA

Virtuoso QA is establishing the standard of proof for software releases. Its governed QA loop turns business requirements into tests for any browser-based application: AI proposes, a deterministic engine executes, a person approves what matters, and every decision leaves evidence.

Trust Center

AICPA

SOC

WAVE STRONG PERFORMER

@ Copyright 2026 SpotQA, Creators of Virtuoso QA