Platform

Solutions

Resources

Platform

Solutions

Resources

Platform

Solutions

Resources

Blog

User Journey Testing: How to Test the Paths Users Take

Modhana Priya

Published on

User Journey 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 →

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

Table of contents

Lorem ipsum

Lorem ipsum

Lorem ipsum

Lorem ipsum

Lorem ipsum

You can have a checkout where every unit test passes and still lose sales. The login works. The product page loads. Items go into the basket and the payment form accepts the card. But somewhere between “add to basket” and “thanks for your order”, something breaks, and none of your tests noticed because none of them followed a customer all the way through.

That’s the gap user journey testing fills. Instead of checking features one at a time, you follow the steps a real person takes to get something done, from the first click to the result they came for.

This guide is practical. We’ll cover how to choose which journeys to test, how to write journey tests that don’t fall apart every release, how to handle test data and environments, how to run journey tests in your pipeline, the mistakes that make journey suites flaky, and what AI has changed.

User Journey Testing



What is User Journey Testing?

User journey testing checks a complete task a user wants to do, from start to finish, going through every part of the system in the same order the user would. Signing up, placing an order, submitting a claim and opening an account are all journeys.

The key difference is between testing a feature and testing a journey:


Feature Test

User Journey Test

What it checks

One piece works, like the payment form accepting a valid card

A user can get all the way from browsing to a paid, confirmed and saved order

Where it looks

Inside one feature

Across every page, service and system the task touches

Bugs it finds

Problems inside that feature

Problems between features, where two parts each work but don’t agree on the data passed between them

Question it answers

Does this part work?

Can someone actually finish what they came to do?

Because it follows the real path, journey testing tells you two things at once: whether the parts work together, and whether a user can actually get through.

At release time, that second question is the one that counts.



How to Choose Which User Journeys to Test

You don’t need a journey test for every possible route through your app. Trying to cover everything gives you a slow, fragile suite that nobody trusts.

Pick the journeys that matter most, and test those properly.

Start With What the Business Needs to Happen

Write down the outcomes the business relies on, like payments taken, claims submitted, patients admitted or accounts opened.

Each one points to a journey worth testing. Screens that don’t lead to anything important can usually wait.

Look at How Often it Happens and How Bad a Failure Would Be

A journey that runs thousands of times a day, or one where a failure costs money or breaks a rule, needs thorough coverage. A rarely used, low-stakes path can get less.

Give Your Top Journeys Names

Most apps have a handful of journeys that matter most, and your product owner can probably list them off the top of their head.

If a journey doesn’t have a name, nobody owns testing it.

Test What Goes Wrong, Not Just What Goes Right

For your most important journeys, test the declined card, the timed-out session and the out-of-stock item too. That’s where real users get stuck.

You end up with a short, ranked list, something like this:

Journey

How Often

Cost of Failure

Coverage

Guest checkout

Thousands a day

Lost sales

Deep, including declined payments and stock issues

Returning customer checkout

Thousands a day

Lost sales

Deep

Account sign-up

Hundreds a day

Fewer new customers

Main path plus validation errors

Returns request

Dozens a day

Complaints and support calls

Main path

Update marketing preferences

A few a day

Low

Light



Example: Testing an Online Purchase Journey

It’s easy to underestimate how much one journey touches, so here’s an online shop purchase broken down:

Step

What the User Does

What Happens Behind the Scenes

1

Searches and opens a product

The catalogue and pricing services are called

2

Adds it to the basket

The basket updates and stock is checked

3

Goes to checkout

The user logs in or continues as a guest

4

Enters a delivery address

The address is checked and delivery options are worked out

5

Pays

The payment gateway is called, tax is added for the right country, and both approvals and declines need handling

6

Sees the confirmation

The order is saved, stock goes down and a confirmation email is sent

A proper journey test checks the steps the user sees, the calls between the systems and what gets saved along the way. Did stock actually go down? Was the right tax charged? Does the order exist?

If you only check the clicks, you’ll see every screen load and miss the one thing that matters: the confirmation page showed up, but the order was never saved. That kind of silent failure gets into production and quietly costs you customers.



How to Build User Journey Tests That Don’t Break Every Release

Most teams don’t give up on journey testing because it misses bugs. They give up because the tests keep breaking and fixing them takes longer than they’re worth.

A journey test that fails every time a button moves just teaches people to ignore red builds. So building tests that cope with change is the main job.


  1. Describe What the User Wants, Not Where the Button is

A step tied to a CSS class or XPath breaks as soon as the page is redesigned. A step that describes what the user is doing keeps working when the layout changes.

Here’s the same step written both ways.

This one is tied to the page structure:

driver.findElement(By.cssSelector("div.cart-summary > button.btn-primary-2")).click();
driver.findElement(By.cssSelector("div.cart-summary > button.btn-primary-2")).click();
driver.findElement(By.cssSelector("div.cart-summary > button.btn-primary-2")).click();
driver.findElement(By.cssSelector("div.cart-summary > button.btn-primary-2")).click();


This one describes what the user is trying to do in Plain English (Virtuoso QA):

If the design team moves the button or renames the CSS class, the first step breaks. The second keeps working, as long as the button still says the same thing.


  1. Check What Happened, Not Just What’s on Screen

A test that only looks for “Order confirmed” on the page won’t notice if the order never got saved. Check the data behind the screen too, like the order record existing and stock going down.


  1. Build Journeys from Reusable Steps

Write steps like logging in, adding to basket and checking out once, and reuse them in every journey that needs them. Then if the login page changes, you fix it in one place instead of forty.


  1. One Journey per Test

A test that runs through four journeys and checks twenty things is slow, and when it fails, you can’t easily tell why. Stick to one journey per test, with a handful of checks.


  1. Make Each Test Stand on Its Own

If a journey test relies on whatever the last test left behind, you can’t run it alone or in parallel. Each test should set up its own user, data and starting point, so it can run anywhere, in any order.

Tests built this way keep working through refactors, redesigns and parallel runs, which is what makes a journey suite worth having.



Test Data and Environments for User Journey Testing

Journey tests fail because of bad data and shaky environments more often than because of real bugs. If you treat these as an afterthought, you’ll end up with a flaky suite for reasons that have nothing to do with your app.

Area

What Goes Wrong

What to Do

Test data

The customer, product, stock or payment method changed since the last run, so the test fails for the wrong reason

Create the data each journey needs as part of the test, through APIs or data builders

Leftover state

A half-finished order or full basket from the last run messes up the next one

Clean up between runs so every journey starts fresh

Environment

Tax rules, feature flags or integrations don’t match production, so a pass doesn’t mean much

Match production in the settings that affect the journey

Shared resources

Two tests fight over the same data or login session and fail at random

Give each run its own data or environment

It’s not exciting work, but this is where most journey flakiness comes from, so it pays off more than any clever test design.



User Journey Testing Best Practices

  1. Focus on risk and value: Test your named, high-stakes journeys properly, and be fine with lighter coverage for the rest.

  2. Cover the good, the bad and the unusual: Declined payments and expired sessions are where users get stuck, so test them for your key journeys.

  3. Write steps people can read: If business users can read your tests, they can review them and help keep them right.

  4. Check the UI and the APIs together: Journeys cross screens and services, so your tests should too.

  5. Automate and run in parallel: Journey tests are too slow to run one by one at scale. Running them side by side keeps feedback fast enough to matter.

  6. Keep product and design involved: The people who own a journey should help shape the tests that protect it.



User Journey Testing in CI/CD

If journey tests only run just before a release, you find problems when they’re most expensive to fix. They’re much more useful running automatically in your pipeline, so a broken journey gets caught by the change that broke it.

Pipeline Stage

Which Journeys to Run

What Happens If One Fails

Every commit

A quick set of your top journeys

The developer hears about it straight away

Release candidate

The full journey suite, including unhappy paths

A failing critical journey blocks the release

After deployment

A few key journeys against the live environment

The team can roll back before many users notice

A few things make this work well:

  • Block releases on critical journeys: If people can’t buy something or submit a claim, the release isn’t ready, whatever the unit tests say.

  • Run tests in parallel: Journey tests are slower than unit tests, so splitting them across machines keeps the pipeline moving.

  • Make failures easy to diagnose: A failed journey should come with the step that broke, a screenshot and the logs, so nobody has to rerun the whole thing to work out what happened.



Common User Journey Testing Mistakes

Mistake

Why It Hurts

The Fix

Steps tied to selectors

Every UI change breaks tests, and eventually the team stops fixing them

Describe what the user is doing instead

Only checking the screen

A confirmation can show even when nothing was saved

Check the data behind the screen too

Cramming several journeys into one test

Slow, fragile and hard to debug, so failures get ignored

One journey per test

Tests that depend on each other

A test that expects the previous one to leave it logged in fails at random in parallel runs

Let each test set itself up

Ignoring data and environments

The biggest cause of flaky journey tests

Create data in the test and clean up after

Only testing the happy path

Misses exactly where real users get stuck

Add the declined payment, expired session and out-of-stock cases



How AI Has Changed User Journey Testing

Journey tests used to be the hardest tests to build and the first ones teams gave up on. They were slow to write and broke all the time. AI has changed both of those problems.

More People Can Write Them

With plain English authoring, QA analysts, product owners and business users can write journey tests, not just engineers.

They Don’T Fall Apart After a Redesign

When a page changes, AI can work out which element a step meant and suggest an updated version for someone to approve, so tests don’t need rewriting every release.

Drafting Gets Faster

AI can read user stories and requirements and draft journey tests from them, which a person then checks and approves, so coverage grows without everything being written from scratch.

Working Out Failures is Quicker

AI can point to the step that failed and show the evidence around it, so you don’t have to replay the journey by hand.


The two things that used to make journey testing hard, writing enough tests and keeping them working, are exactly what AI helps with most. That’s why teams can now cover far more journeys than they could a few years ago.



User Journey Testing with Virtuoso QA

Journeys are where test maintenance hurts most, because a single journey crosses lots of pages and services, and a change in any of them can break it. This is how Virtuoso QA handles that:

  • The whole trip in one test: A Virtuoso QA journey can click through the checkout, call the order API and look up the order in the database without switching tools, so you know the purchase happened and not just that the thank-you page appeared.

  • Shared steps for common actions: Logging in, adding to basket or paying can be built once as reusable pieces and dropped into any journey, so a change to the payment page is a single fix.

  • Journeys drafted from your stories: If a product owner has written “a guest can buy a product without creating an account” in Jira, Touchstone can turn that story into a draft journey test that links back to it. Someone on the team checks it over and approves it before it joins your suite.

  • Approval before any test changes: If a redesign moves the checkout button, Virtuoso QA works out what the step meant and proposes an update. It won’t change the journey until someone on your team says yes, and it keeps a note of that decision.

  • Clear answers when a journey breaks: You get the exact step that failed, a screenshot of the page at that moment and the logs, next to the same step from the last time it passed.

  • Every browser your shoppers use: The same journey can run side by side on more than 2,000 browser and OS combinations, triggered from your CI pipeline.


If your journeys run across several systems, from the storefront to payments and order management, take a look at how Virtuoso QA approaches end-to-end testing.



Related Reads

User Journey Testing FAQs

What Is the Difference Between User Journey Testing and End-to-End Testing?

How Is User Journey Testing Different From Feature Testing?

How Do You Identify Which User Journeys to Test?

Why Do User Journey Tests Become Flaky?

Should User Journey Tests Run in CI/CD?

How Does Virtuoso QA Approach User Journey Testing?

Written by

Modhana Priya

QA Advocate

Modhana champions the tester’s point of view, writing about day-to-day practice, test maintenance and the skills QA teams need as automation shifts to natural language and AI.

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