Search for monkey testing tools and you get a mess: Android SDK utilities from 2010, a JavaScript library that unleashes cartoon gremlins on your page, a Netflix project that kills servers and has nothing to do with UI testing, and a dozen AI testing startups that use the word “monkey” nowhere on their site.
They are all solving different problems. This is a map of the actual landscape, organised by what you are trying to test, with an honest note on what each tool will and will not find.
For the underlying concepts — dumb vs smart vs brilliant monkeys, and how monkey testing differs from fuzzing — start with our guide to monkey testing. This page is about the tools.
| Tool | Target | Tier | Licence / cost | Best at |
|---|---|---|---|---|
| MonkeyTest Core | Web | Brilliant | Free, AGPL-3.0 | Finding broken user journeys on any site |
| Gremlins.js | Web | Smart | Free, MIT | Cheap in-browser stress testing |
| Playwright / Puppeteer (DIY) | Web | Dumb → smart | Free | Full control, if you’ll maintain it |
| Android Exerciser Monkey | Android | Dumb | Free, in the SDK | Crashes and ANRs under input storms |
| Firebase Test Lab Robo | Android / iOS | Smart | Free tier, then paid | Automated UI crawl on real devices |
| Appium (DIY) | Mobile | Dumb → smart | Free, Apache-2.0 | Cross-platform random walks |
| AFL++ / libFuzzer | Native code | Fuzzing | Free | Memory-safety bugs in parsers |
| Schemathesis | APIs | Fuzzing | Free | Contract violations from an OpenAPI spec |
| Chaos Monkey / LitmusChaos | Infrastructure | Chaos | Free | Resilience, not UI testing |
Ours, so treat the enthusiasm accordingly — but it is genuinely free and genuinely open source, so you can check the claims yourself.
MonkeyTest Core is a brilliant-tier agent: it drives a real Chromium browser through your site, uses an LLM to work out what a user would actually try on each page, executes those flows, and reports the bugs with per-step screenshots. There are no fixtures, selectors, page objects or recorders to write.
npm install -g @mtai/monkeytest-core
npx playwright install chromium
export GEMINI_API_KEY=...
monkeytest run https://example.com
The distinguishing feature is that it closes the loop rather than stopping at discovery. Each run writes a stable plan.json you can commit to git; monkeytest rerun re-executes that exact plan after you ship a fix, with no LLM cost for re-planning; and monkeytest diff tells you what was fixed, what is new, and what regressed. Bug fingerprints are stable across runs, which is what makes the comparison meaningful.
The classic browser monkey. You drop it into a page and it releases “gremlins” that click, scroll, type and move the mouse, while “mogwais” watch for errors and slow frames. MIT licensed, no build step, and you can run it straight from a bookmarklet.
It is a smart monkey rather than a dumb one — it targets real DOM elements rather than raw coordinates — but it has no idea what your app is for, so it will not fill a form with valid data or complete a purchase.
Write a script that enumerates clickable elements, picks one, clicks it, repeats. An afternoon of work gets you a functioning smart monkey with total control over what it does.
The catch is the part nobody budgets for: deciding what counts as a bug. Without goal-directed behaviour you get a stream of “the page changed” events and no way to tell a broken flow from a working one. Most teams that build this end up either adding heuristics until it becomes a maintenance project, or quietly abandoning it.
The original, and still shipped with the Android SDK:
adb shell monkey -p com.your.app -v 500
Five hundred pseudo-random events at your app. It is a pure dumb monkey — random taps, swipes and system events at random coordinates — and it is genuinely useful for exactly one thing: proving your app does not crash under an input storm. Free, zero setup, and reasonable to run in CI on every build.
-p to constrain it to your package, and set a seed with -s so a crash is at least somewhat reproducible.Also from the Android SDK, but scriptable in Jython — you write out an explicit sequence of taps and screenshots. Despite the name it is not really a monkey; it is a low-level scripted automation tool, and it has been superseded by Espresso and UI Automator for most purposes. Worth knowing it exists so you can rule it out.
Google’s Robo test crawls your app’s UI automatically on real devices, building a model of the screens as it goes and producing a crawl graph with screenshots and any crashes it hit. It sits squarely in the smart-monkey tier and requires no scripting.
Same trade-off as the Playwright approach, applied to mobile. Appium gives you a cross-platform driver; the random walk and the bug detection are yours to write.
Fuzzers push malformed data into a program’s inputs rather than interacting with a UI. Different layer, different bugs, frequently grouped under the same search term.
Netflix’s Chaos Monkey kills production instances at random to prove the system survives. Simian Army, LitmusChaos, Chaos Mesh and the commercial Gremlin platform extend that to network faults, latency injection, resource exhaustion and zone failures.
These are excellent tools for resilience work and share exactly nothing with UI monkey testing except the primate. If you arrived here looking for chaos engineering, this is your section and you can stop reading.
Worth naming because they crowd the same search results: Mabl, Testim, Functionize, Applitools, QA Wolf, Rainforest QA and similar tools use machine learning to make traditional end-to-end testing less brittle — self-healing selectors, visual diffing, AI-authored test steps.
That is a different job. They make the tests you write more durable; monkey testing finds the bugs on paths you never wrote a test for. Most teams that get serious about quality end up wanting both, and the two do not compete for the same slot in your pipeline.
Testing a website and you want results today. Start with an AI agent — it is the only tier that gets past a login and completes a real flow. Our free CLI quickstart takes about sixty seconds, or use the hosted free tier if you would rather not install anything.
Testing a website and you want zero dependencies. Gremlins.js from a bookmarklet. It takes two minutes and will find your unhandled exceptions.
Testing an Android app. adb shell monkey in CI on every build, plus Firebase Robo tests before a release.
Testing a library, parser or protocol. A coverage-guided fuzzer — AFL++ for native code, Atheris or Jazzer otherwise.
Testing an HTTP API with a spec. Schemathesis. Highest ratio of bugs found to effort spent on this entire page.
Testing whether your infrastructure survives failure. Chaos engineering, not monkey testing.
Monkey testing at any tier is a complement, not a replacement. It covers the surface area your test suite does not, which is usually most of the application — but it will never give you the guarantee that a deliberate, deterministic test on a critical path gives you.
The right setup for most teams is a handful of solid end-to-end tests on the flows that make money, plus something sweeping continuously across everything else. The tools above are how you get the second half without hiring for it.
If you want to see what the brilliant tier looks like on your own site, MonkeyTest Core is free, open source, and two commands away.
Software Engineering Leader , Helping teams deliver quality software.
Monkey testing throws unpredictable input at software to see what breaks. Here is what it is, the difference between dumb, smart and brilliant monkeys, and why the technique is having a second life.
TutorialsInstall the open-source MonkeyTest CLI, point it at a URL, and get a bug report with screenshots. Then wire it into CI so every pull request gets tested by an agent.
GuidesA step-by-step walkthrough for running your first intelligent monkey testing session with MonkeyTest AI and interpreting the results.