This page (and the software therein) hasn't been updated in a while since I started working for a company which directly competes with it, and they politely asked me to stop. Might pick it up later if I move on and the non-compete clause runs out~

 

Monkeys? I like monkeys!

And so do we! Monkeys are really good – you can train them to do simple jobs, and they'll keep doing them over and over; you can even have lots of monkeys doing their jobs at the same time!

Here at Boom Towers, we have a large collection of monkeys. Normally, having lots of monkeys in a small space would be a recipe for trouble – but fear not! We have used our (slightly) more advanced brains to come up with a system for managing them. Today, we offer this technology to you – you too can become a Monkey Lord!

Yes! I want to be a Monkey Lord!

Great! First, we will need a couple of monkeys:

Monkey number one: let's train him to do a really simple task - just have it take a look at the front page of our website: 404 Not Found

404 Not Found


nginx/1.25.1

Monkey number two has a slightly more intricate job to do; it will log into our website, post a new story, and then update that story. 404 Not Found

404 Not Found


nginx/1.25.1

With our two test-monkeys prepared, let's head over to the website and see how they handle it...

Do these monkeys come pre-trained with cool tricks?

They sure do!

  • All basic monkeys come with the skills needed to interact with a website; they can GET things to read, POST updates, and even upload files.
  • Monkeys can paint! In order to keep a fresh supply of unique files, our monkeys are trained to create semi-random PNG images.
  • You can breed monkeys too! If you find that you need a lot of monkeys with the same basic skills, you can create one parent monkey with those skills, and then a set of children who use them in different ways.
  • Monkey Swarm makes an excellent companion for Context - with a hundred monkeys bashing away at your front end, giving you warnings like "Page X is unusually slow", you can use Context to look at Page X and see precisely what's happening under the hood. (Screenshot).
  • Once the monkeys are all tired out, the statistics that they've gathered can be charted for an easier overview (Screenshot).

That's pretty cool, let me have a go!

If you're convinced already and want to start using it for your commercial sites, you can skip straight down to buy the commercial version; if you want to get to know it a bit better first, try the personal use / evaluation version, and then follow along with the examples.


Linux (13MB)

Windows (7MB)

OSX (17MB)

If you have any issues running the demo versions, please let us know; we want you to be able to see how lovely they are :-)

Can I see how this works on a real problem?

Sure, here's a relatively simple example of how I've used it myself:

To start with, we have a theory that the profile page is slow; it runs ~14 moderately heavy database queries on every page load and there is no caching at all.

Step 1: Confirm our suspicion that the page really is slow.

It can be very tempting to optimise based on what you think should be slow, rather than looking at what is slow. So let's make a little monkey who loads the profile page and records how fast it loads. 404 Not Found

404 Not Found


nginx/1.25.1

with this simple monkey trained, we can run it a few times:

$ ./monkey-swarm --tribe civicboom --monkey profile -r 5 -w

[...]

---- Results:
   num    min    max    ave    h/s    url
     5  1.244  1.323  1.263   0.79  GET /profile
     5  0.059  0.091  0.080  12.44 POST /account/signin.json
    10  0.059  1.323  0.672   6.61 

So we see that signing in takes an average of 0.08 seconds, but then loading the user's profile takes 1.26 – if we define "acceptable" as "under one second", then it is clear that users have a problem as soon as they log in. (Our live server is about 4x as fast as my testing laptop, but even then, 0.31s has room for improvement)

Step 2: Make a guess at a solution.

Those who use Civicboom will see that our profile page has two parts – on the left side of the screen is the user's private information, articles, to-do lists, etc. On the right side of the screen is a list of featured articles – the latest questions, most active discussions, most viewed stories, etc. Since the information there is all totally public, and it doesn't matter if it is a few minutes out of date, what happens if we cache it?

(Shish goes away and adds the @cacheable decorator to the featured content list)

Step 3: Test that our solution actually helps.

$ ./monkey-swarm --tribe civicboom --monkey profile -r 5 -w

[...]

---- Results:
   num    min    max    ave    h/s    url
     5  0.620  0.730  0.648   1.54  GET /profile
     5  0.056  0.081  0.068  14.62 POST /account/signin.json
    10  0.056  0.730  0.358   8.08 

Hooray, we have doubled the speed of the profile page, and we have some hard numbers proving that we aren't just imagining the improvement \o/

Loading one page? That's easy, show me something hard

Ok, here are some more advanced monkeys, part of our Civicboom testing tribe:

A monkey that looks at our API to find the most recently posted articles, then picks a few at random to look at: 404 Not Found

404 Not Found


nginx/1.25.1

A monkey who generates a random image to attach to an article: 404 Not Found

404 Not Found


nginx/1.25.1

Results /o/

Awesome! Sign me up!

What do you get when you buy Monkey Swarm?

  • Access to download and re-download the software, for all platforms, from our website
  • A license for one person to use it (contact us for bulk licensing)
  • Free updates
  • Online support from the people who wrote it
  • A warm fuzzy feeling inside :-)

Ooh! A new version! What's in it?

Follow boomtools on twitter to keep up with updates as they happen~

v1.1

  • .5: Improved packaging, tidyups, demo for windows
  • .4: First release with a demo
  • .3: OSX packaging improvements
  • .2: Windows file-type associations
  • .1: HTTPS and non-default-port-number support
  • .0: Analyse → Time Chart

v1.0

  • .2: Extra compatibility for OSX packages
  • .1: Extra compatibility for Windows and Linux packages
  • .0: Initial release

FAQs

Isn't this animal cruelty?

These are not actual real monkeys in the mammal sense of the word! The monkeys we are using are software monkeys – short bits of code designed to autonomously interact with other computer systems.

What platforms do the monkeys run on?

Recent versions of Windows, Linux, and OSX are natively supported.

To be exact:

  • Windows - XP or newer (tested on XP and win7)
  • Linux - Ubuntu 11.04 and newer (other / older distros should work fine, and the windows version works in WINE)
  • OSX - Intel 10.6+ (Also, the windows version works acceptably under WINE)

I already have a box of hammers, why do I need a screwdriver?

Why shouldn't I just use ApacheBench / Siege / etc?

These tools are great for testing web servers, they tell you how long it takes to create a TCP connection, how many bytes per second get transferred, etc. They aren't so great for testing web sites though — Monkey Swarm will interact with your site at a higher level, logging in, browsing pages, uploading new data, etc.

How does this compare to Selenium?

Selenium uses one virtual user at a time, checking that your website works correctly; Monkey Swarm runs many virtual users and checks that your website performs well at scale. We recommend using both of them together, as both aspects are important for success.

What about Charles?

Charles analyses your web traffic, Monkey Swarm creates traffic. As above, both of these levels are important to understand, so we recommend using both tools.

I have more questions!

Feel free to email us at developers@boomtools.co.uk; paid customers receive priority support, but we aim to answer all questions within a working day or two :-)