World’s largest virtual agentic engineering & quality conference

WHENAUG 19-21
WHEREVirtual · Global
Register Now
Product Use CasesAI Testing

How to Test a Voice Agent Without Code (2026 Guide)

Voice agent testing without code: dial your agent over real phone calls, scored across 30+ metrics from intent recognition to containment and CSAT.

Author

Frank Joseph

Author

Author

Salman Khan

Reviewer

Last Updated on: July 23, 2026

Last week a payment got confirmed against the wrong account. A caller with a Glasgow accent read out their card number, the voice agent transcribed two of the digits wrong, and it still moved ahead and read a balance back as if everything matched. Nobody noticed until the customer called in angry. I wanted to reproduce that failure, but I did not fancy sitting there dialing the line by hand forty times. So I ran one full voice agent testing session against the line instead, and what follows is the whole thing, from the number I typed in first to the pipeline check that now runs on every prompt change.

The agent under test is an inbound banking support line. It checks balances, disputes charges, and resets PINs, and it is supposed to confirm a caller's identity before it says anything sensitive out loud. That last rule is the one that broke.

Pointing it at the number

Setup took about four minutes. TestMu AI does not need an SDK or a browser extension to reach a phone agent, so the same setup covers a voice agent built on Vapi as easily as this line wired up over Twilio, which is what got me past the usual first hurdle. I gave it three things and nothing more. First, the agent's phone number. Second, a short description of what the agent is and the one hard rule it has to keep, written the way I would brief a new hire: you are a banking support line, help callers check balances, dispute charges, and reset PINs, and never read a balance until you have verified identity. Third, the caller I wanted on the other end, which for this first run was the Glasgow accent from the incident, phoning from a noisy room.

If your agent was built from a spec or a policy document, you can upload that file instead of typing the description out. The platform reads the constraints and the tone rules straight from it and uses them as the baseline for what a correct answer looks like.

The first call I described

This is where the gap from a scripted approach opened up. If I were verifying a single balance lookup against the telephony API by hand, the check would read something like this:

const call = await twilioClient.calls.create({
  to: "+15551234567",
  from: process.env.TEST_LINE,
  twiml: "<Response><Say>I want to check my account balance</Say>" +
    "<Pause length='4'/><Record maxLength='8'/></Response>",
});
await waitForRecording(call.sid);
const transcript = await transcribe(call.recordingUrl); // one synthetic voice, no noise
if (!transcript.toLowerCase().includes("your balance is")) {
  throw new Error("Agent did not read the balance. Got: " + transcript);
}

Barely a dozen lines, and it proves almost nothing. One synthetic voice, dead silence, one fixed phrase, one hardcoded substring. It never asks whether the agent understood the caller, whether it checked identity first, or whether it stayed civil under pressure. Reword the greeting and the assertion snaps. My Glasgow scenario would need a different voice fixture, noise injection, and a fuzzy match that this snippet does not have, and every one of those is more code to write and maintain.

The same goal, handed to TestMu AI, is three plain sentences with nothing to maintain afterward:

  • Tell it the caller wants a balance and has not verified identity yet
  • Tell it the pass condition in one line, that the agent must refuse the balance until identity is confirmed
  • Pick the Glasgow voice and a noisy-room preset so the speech-to-text gets stressed on the same call

That is what I handed to voice agent testing on TestMu AI. Rather than a script, autonomous phone-caller agents place a real call to the number and hold the conversation like a customer would. I described who was calling and what counted as a pass, and the platform took care of the dialing, the transcription, the timing, and the retries.

Watching the score come back

The call ran in front of me. I could see the duration ticking and a live transcript with each speaker labeled, so it was obvious who said what and when. The Glasgow caller asked for a balance, and the agent, instead of running the identity check, read a number straight out. The transcript marked the exact turn where it went wrong.

TestMu AI scoring a plain-English voice agent call across intent, speech-to-text, and containment metrics

When the call ended, TestMu AI scored it across more than thirty call metrics, from intent recognition accuracy and speech-to-text accuracy to first call resolution, containment rate, and an estimated CSAT. Every score carried a confidence level and an excerpt from the transcript as evidence, so the low speech-to-text number pointed straight at the two mangled card digits, and the identity rule showed up as a hard fail with the offending line quoted underneath it. The run came back Red, which on this platform means not production ready, and the reason sat there in plain language instead of a stack trace at line 47.

Test across 3000+ browser and OS environments with TestMu AI

Adding the calls that fail

One reproduced bug is a start. Real coverage meant adding the calls I expected to break, and widening it took more description rather than more code. Over the next twenty minutes I stacked up a handful of new callers.

I sent a caller who started in English and switched to Spanish mid-sentence, then checked that the account number came through intact instead of getting garbled at the language boundary. I placed the same balance request twice, once on the call-center-floor noise preset and once over a poor cellular connection, to see whether speech-to-text held up or whether the agent started asking the caller to repeat every line. I ran an angry caller who opened calm about a bill and then demanded a refund halfway through, watching whether the agent kept a steady tone and either resolved the new intent or escalated to a human cleanly. And I walked a caller through the phone menu, pressing 2 and then 4, to confirm the button presses routed to billing and the caller never got dumped back at the top, which is a classic IVR testing failure that DTMF detection catches.

All of those ran across 200+ voice profiles, 50+ accents and dialects, and 15 background-noise presets from the same descriptions, with no per-voice rewrites on my end. It is the same evaluation engine behind agent testing for chat and image agents, so the plain-English approach you would use to test a chatbot carries straight over to the phone line. Once the fix shipped and the agent went live again, I stopped dialing altogether and uploaded a batch of the previous week's recorded calls instead, running the same thirty-plus metrics over real traffic. That is how the original Glasgow call would have surfaced on a Monday morning rather than through a complaint.

Piling the calls on at once

One caller at a time proves the agent is correct on a quiet line. It says nothing about how that line holds up when forty people call at once, which is the part of voice agent testing a single scripted call never reaches.

So before I handed the suite off, I pointed the same scenarios at the number in parallel. TestMu AI runs five concurrent phone calls per org out of the box, and you can add parallel capacity when you want a heavier load test. I watched the scores hold while the calls overlapped, checking that speech-to-text did not slip and that the identity rule kept firing under pressure rather than only on a single quiet call.

Handing it to the pipeline

The last job was making sure the fix stayed fixed. A voice agent can regress the day someone edits its prompt or its underlying model gets an upstream update, and no one puts that on a calendar. So the same scenarios now run in two places without me touching them.

In the deploy pipeline, the testmu-a2a command runs the suite and returns exit code 1 on a Red verdict, which fails the build before a prompt change reaches callers. It writes JUnit output, so the results land in the same test report as every other check the team already reads. Outside the pipeline, the suite runs on a schedule, weekly in my case, though it accepts a full cron expression if you want weekday mornings only. When a verdict slips from Green toward Red, it posts to Slack straight away, and email and webhooks are there too if you route alerts elsewhere.

That is the session. It started as one embarrassing call and finished as a check that guards the line on every change, and at no point did I open a telephony SDK or babysit an assertion. The calls that reach your voice agent are messy, full of accents, background noise, and people who change their mind partway through a sentence. Test it against those, described the way real callers actually behave.

Note

Note: Test your voice agent over real phone calls, no code required. Start with TestMu AI free.

Author

...

Frank Joseph

  • Twitter
  • Linkedin

Frank Joseph is an API documentation engineer and technical writer based in Lagos, Nigeria, with a background in software engineering and a degree in Computer Science. With over four years of experience, he specializes in creating developer-focused API documentation using tools like Postman, Markdown, MDX, Docusaurus, and GitHub. On TestMu AI (formerly LambdaTest), he wrote the guides on PHP testing with Codeception and low-code automation testing.

Reviewer

...

Salman Khan

Reviewer

  • Linkedin

Salman is a Test Automation Evangelist and Community Contributor at TestMu AI, with over 6 years of hands-on experience in software testing and automation. He has completed his Master of Technology in Computer Science and Engineering, demonstrating strong technical expertise in software development, testing, AI agents and LLMs. He is certified in KaneAI, Automation Testing, Selenium, Cypress, Playwright, and Appium, with deep experience in CI/CD pipelines, cross-browser testing, AI in testing, and mobile automation. Salman works closely with engineering teams to convert complex testing concepts into actionable, developer-first content. Salman has authored 120+ technical tutorials, guides, and documentation on test automation, web development, and related domains, making him a strong voice in the QA and testing community.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free
...
TestMu Conf 2026

World's largest virtual agentic engineering & quality conference

...

AUG 19-21, 2026

REGISTER NOW

Voice Agent Testing FAQs

Did you find this page helpful?

More Related Blogs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests