This repository has been archived by the owner. It is now read-only.
Front end load testing
Switch branches/tags
Clone or download
Latest commit c173245 Feb 10, 2017

Build status


Front end load testing with PhantomJS/SlimerJS, sponsored by CoScale


Felt is a front-end load tester. It generates load by running a lot of browser instances simultaneously and waiting for the page to finish loading (no more pending resource calls). The tool uses PhantomJS or SlimerJS. You can use Felt to quickly generate load on front end heavy applications. With scenarios you can setup a path through your application for the browsers to follow.

Use cases

  • Load testing
    • AngularJS
    • React
    • Backbone.js
    • Ember.js
  • Cache warming
  • Quick local load tests
  • Synthetic monitoring


  • Real browser load testing of web applications
  • Works with PhantomJS (webkit) and SlimerJS (firefox)
  • Scenarios


  • Tested on Python 2.7.10
  • Unix based operating system
  • Local install of PhantomJS or SlimerJS available in PATH
  • Install commentjson (pip install commentjson)

Quick start

  1. git clone

  2. cd felt

  3. Download PhantomJS from

  4. Unzip and move PhantomJS executable into felt directory

    The felt directory should look something like this: $ ls LICENSE js phantomjs

  5. pip install commentjson

  6. python --verbose examples/basic.json

  7. ctrl + c to stop


usage: [-h] [--debug] [--verbose] [--threads THREADS] [--test] [--screenshot]

Start workload.

positional arguments:

optional arguments:
  -h, --help         show this help message and exit
  --debug            enable debug information
  --verbose          makes generator more verbose
  --threads THREADS  number of threads to run simultaneously
  --test             run a scenario only once
  --screenshot       save screenshot per step

Actions list

  • open_url - Open browser and navigate to url.


    • value: Url to open
  • set_value - Set value attribute in an element


    • selector - Value for querySelector
    • value - Value to insert into element
  • submit - Send submit event to element


    • selector - Value for querySelector
  • click - Send click event to element (if selector returns multiple elements, first one is clicked)


    • selector - Value for querySelectorAll
  • click_one - Send click event to random selected element


    • selector - Value for querySelectorAll
  • sleep - Wait for x miliseconds


    • value - Amount in ms you want function to wait or object with min, max to wait a random time between min and max
  • wait_for_element - Wait for element to appear in browser


    • selector - Value for querySelector
  • check_element_exists - Check if element is present and contains content


    • selector - Value for querySelector


Included in this repository is a Vagrant file which you can use to develop Felt locally. Please don't hesitate to submit bugs, feature requests or pull requests.

Sponsored by CoScale

CoScale logo