Over the years I've been involved with writing a number of web applications. Some I am proud of, some I never want to see again. During each project, testing of the application's performance, stability under load, and regression testing of user journeys always comes up.

There are a number of great bits of hardware (eg. Avalanche), and software (eg. Grinder) that help you test applications. I've even had a fun time using a room full of Grinder clients to test web services for a client - a great way to run a denial of service attack :-)

One of my pet peeves about most software tools, including Grinder, is that they are thread-based, so that if you want to simulate a specific number of concurrent users, you have to worry about the number of threads, processors (JVMs), and sleep periods. In addition, thread-based tools can suffer from blocked threads, where the tool fails to produce a load on the server if all of its client threads become blocked waiting on the server to respond, forcing you to worry about setting up and handling timeouts. What I really want is software tools that allow me to perform rate-based testing - fire off requests (or begin user journeys) at a constant rate (maybe with some random variation to simulate real world burstiness). Human beings don't get blocked by threads.

Consequently, I have started a project on SourceForge called Thumper (http://sourceforge.net/projects/thumper) to provide a sandbox for the creation of testing tools using non-blocking or event-driven techniques. Right now, there's a little bit of code there for a Java NIO client, and for a Python client using the Twisted framework for network events and BeautifulSoup to parse HTML responses. In the future I hope to add more code there in Java, Python, Ruby, Erlang, Haskell and other languages not yet born.

Ideas, discussions, patches and offers of help are always welcome. There's got to be a better way to do this stuff.