• Stars
    star
    111
  • Rank 308,557 (Top 7 %)
  • Language
    Elixir
  • License
    MIT License
  • Created over 7 years ago
  • Updated about 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

HTTP Service Performance & Load Testing Framework

Chaperon

HTTP Service Performance Testing Framework

This is a framework / library & tool for doing load and performance tests on web services. It tracks many kinds of metrics automatically and allows tracking custom ones, if needed.

A load test is a combination of target web services & scenarios to run against them. It also defines session & HTTP / WebSocket connection settings (like authentication credentials, custom headers, etc.) for each of the services.

Chaperon natively supports running both HTTP & WebSocket actions against a web server. It defines a Chaperon.Actionable protocol for which implementations for additional types of actions can be defined. Have a look at the examples/firehose.ex example file to see an example of both HTTP and WebSocket commands in action.

For a more in-depth introduction check out the basic starter tutorial here.

Documentation & Links

Distributed Load-Testing

Aside from running Chaperon scenarios from a single machine, you can also run them in a cluster. Since Chaperon is written in Elixir, it makes use of its built-in distribution mechanics (provided by the Erlang VM and OTP) to achieve this.

To run a Chaperon scenario in distributed mode, you need to deploy your Chaperon scenario and load test code to all machines in the cluster, start them up and connect to the master node.

To start any node simply load up the code in an iex shell:

$ iex --cookie my-secret-cluster-cookie --name "[email protected]" -S mix

For the master node, run this inside the iex shell:

iex> Chaperon.Master.start

Then enter the following code into any worker's iex shell to connect it to the master node:

iex> Chaperon.connect_to_master :"[email protected]"

Pick one of the nodes as your master node and connect to it from the worker nodes (see above).
Before starting up the child nodes make sure you've given them the same VM cookie and config to point to the master node.
The master node can be identical to the worker nodes, the only difference being that it kicks off the load test and distributes the workload across all worker nodes. When a worker node is done with running a scenario / session task, it sends the results back to the master, which then merges all results to give the final metrics for display / output.

Is this ready for production use?

Chaperon is being used at Poll Everywhere and was written for load testing our infrastructure and polling services. It has been used to simulate over 100k concurrent vote participant sessions on a 4 node cluster.
It currently is still on a pre 1.0 version. A 1.0 release is not planned yet as the main focus is to get rid of any potential bugs, refine the public API and internal implementation code until we're confident that everything works as expected.
That doesn't mean it shouldn't be used in its current stage, though.

If you'd like to try out Chaperon, please give it a try. Any feedback, bug reports or patches are welcome.

More Repositories

1

moat

A small authorization library, inspired by Pundit, but built for scopes
Ruby
92
star
2

quebert

A pluggable worker queue framework inspired by Beanstalk. This puppy is used in a production Rails environment at Poll Everywhere.
Ruby
36
star
3

glitter

The easiest way to publish Mac software updates with the Sparkle framework to Amazon S3.
Ruby
28
star
4

middleman_bower

Manage front-end assets and dependencies with bower.
Ruby
22
star
5

random_username

Generate random Heroku-style names
Ruby
18
star
6

message_router

A router for small messages, like Tweets and SMS
Ruby
14
star
7

hmr-custom-element

Register custom elements that support hot module replacement
JavaScript
13
star
8

shart

Ruby
12
star
9

wolfpack

Run stuff in parallel
Ruby
12
star
10

sprockets_bower

Use Bower assets in Sprockets.
Ruby
11
star
11

cerealizer

A proof-of-concept presenter framework for building Ruby HATEOAS API's
Ruby
11
star
12

message_gateway_server

No longer maintained :( SMS Message Gateway which works with a variety of aggregators
Ruby
9
star
13

fannypack

A simple set of base views to help develop Backbone applications.
JavaScript
6
star
14

rubygem

Integrate Poll Everywhere into your Ruby applications.
Ruby
3
star
15

quote_server

Example of a web server that adapts content for display in a presentation.
Ruby
2
star
16

coffeelint-prefer-double-quotes

A coffeelint plugin that prefers double quotes over single quotes
CoffeeScript
2
star
17

datagram

Gist for SQL queries
JavaScript
2
star
18

kingkong

Write full stack health checks
Ruby
2
star
19

ballmer

Manipulate Office files
Ruby
2
star
20

collateral-damage

Perceptual Diff Testing
CoffeeScript
1
star
21

docker_etcd

DEPRECATED: A small 25 MB etcd Docker image with tools to be Fig compatible
1
star
22

docker_ruby

Docker image with various Ruby versions pushed in specific tags
Dockerfile
1
star
23

nosey

Instrumentation stack for Ruby EventMachine apps
Ruby
1
star
24

html_terminator

Terminate html in Active Record fields
Ruby
1
star
25

custom-element-analyzer

Reads JSDoc blocks and generates a custom-elements.json file
JavaScript
1
star