/trample

A Better Load Simulator

Primary LanguageRubyMIT LicenseMIT

trample

02/14/2012 – Fork Notes. This is a fork of the original Trample code base by James Golick, extended to add a couple of new features

Trample is a flexible load simulation tool.

Most load sim tools make requests to a static list of urls. They spawn n threads and make requests to the urls on the list in succession, in each thread. Unfortunately, though, if your applicaition makes use of any kind of caching (including your database’s internal caching facilities), this kind of load simulation is unrealistic.

The data required to serve a single set of urls is likely to fit nicely in the database server’s cache (even on a small server). So, having a single user hammer a finite set of pages will make your application look much faster than it really is.

Trample allows you to provide parameter values inside of a block (a lambda function, for non-rubyists). The block is executed each time the parameters are needed. So, if you use randomization in the block, you should (theoretically) get different values every time.

That way, you can have trample log in as several different users and request different data in each session.

Installation

git clone git://github.com/denniskuczynski/trample.git

cd trample/

gem install jeweler

gem build trample.gemspec

gem install trample-0.1.1.gem

gem install sevenwire-rest-client –source gems.github.com

gem install log4r

gem install hpricot

How To

Trample uses a ruby DSL for configuration.

Trample.configure do
  concurrency 5
  iterations  10
  delay 1
  request_filter &Trample::RailsHandler::request_filter
  response_processor &Trample::RailsHandler::response_processor
  login do
    post "http://yoursite.com/login" do
      {:username => User.random.username, :password => "swordfish"}
    end
  end
  get  "http://yoursite.com/somewhere"
  post "http://yoursite.com/something" do
    {:a_parameter => "a value"}
  end
  get  "http://yoursite.com/someresources/:id" do
    {:id => SomeResource.random.id}
  end
end

The above configuration will,

  • start 5 (concurrency) sessions

  • with a (delay) of 1 second between each session

  • by logging in as a random user at the url in the (login) block.

  • Then, it’ll hit the two urls underneath it 10 (iterations) times during each session.

The get and post methods accept several parameter options. The first mandatory parameter is url. The second optional parameter is think_time – the number of seconds to wait before executing the request The third optional parameter is the request parameters. A block of parameters can also be specified as the last argument.

For example:

post "http://yoursite.com/something"
post "http://yoursite.com/something", 2  #with 2 second think time
post "http://yoursite.com/something", 2, {:param=> "static"}  #with 2 second think time and static params
post "http://yoursite.com/something", 2 do { :username => User.random.username } end   #with 2 second think time and dynamic block params

To run trample, save your configuration somewhere and run:

trample start /path/to/your/trample/config.rb

Copyright © 2009 James Golick. See LICENSE for details.