Virtual customers
Pretend customers who use your running app to find what a test cannot.
A written test checks the thing you thought to check. A virtual customer does not: it signs in to your running app as one of your personas, works it in character, and reports what it ran into. It asserts nothing and proves nothing. What it produces is findings.
That difference is the whole point. The bugs that reach your customers are rarely the ones somebody forgot to write a test for — they are the ones nobody imagined.
A virtual customer's profile: who it signs in as, what it wants, what it can reach, how it behaves, and a panel showing the findings from its last run.
Character is the setting that matters
Each virtual customer is given a disposition, and it changes everything about how the run goes.
| Disposition | How it behaves |
|---|---|
| Realistic | Works towards its goal the way a competent person would. |
| Newcomer | Has never seen your app. Anything only findable if you already know it is unfindable. |
| Careless | Busy and distracted. Half-remembers, submits twice, types odd-but-legal things. |
| Stale | Comes back after a while. Some of what it remembers no longer exists. |
| Auditor | Pursues no goal. Reads the same fact from several places and compares them. Changes nothing. |
| Adversarial | Probes what it should not be allowed to do. Getting in somewhere is the finding. |
| Accountable | Doing the job for real, and stopping to ask rather than acting and reporting after. |
Careless is the one to run if you only run one. It is where most real production bugs actually live.
What it wants, and what it is told
A virtual customer's goals come from the scenarios that name its persona — it is handed the plain description of what that person is trying to do, and nothing else. Never the steps. Finding its way around your app is the behaviour being tested, so telling it the route would defeat the exercise.
If no scenario names it and no goals are set, the screen says so plainly: there is nothing to want, and a run would stop where it started.
Where it is allowed to act
By default, everywhere except production. Reaching your live app is opt-in — you name it deliberately, and you are accountable for having done so.
Only accountable is accepted in production, for the obvious reason: careless and adversarial are exactly what you do not want loose among real customers.
Running one
Start one yourself, or put it on a schedule. A scheduled customer signs in and works your app at an unannounced moment inside a window you set — so what it finds is found without anybody watching for it.
A clean run proves nothing. It means not this time, not this way. Virtual customers are a way to find problems, never a way to certify their absence — that is what scenarios are for.