Loads is a tool to load test your HTTP services, including web sockets.
With Loads, your load tests are classical Python functional tests which are calling the service(s) you want to exercise.
Loads is not asking you to use an ad-hoc API. The tool offers an integration with 3 existing libraries: Requests, WebTest and ws4py. You just need to write your tests using them, and Loads will do the rest.
Loads can run tests from a single box or distributed across many nodes, from the same command line tool. All tests results are coming back to you in real time while the load is progressing.
Since you are using Python to build your tests, you can write very complex scenarii, and use Loads options to run them using as many concurrent users as your hardware (or cloud service) allows you.
Here’s a really simple example where we check that a local Elastic Search server is answering to HTTP calls:
from loads.case import TestCase class TestWebSite(TestCase): def test_es(self): res = self.session.get('http://localhost:9200') self.assertEqual(res.status_code, 200)
The test is also checking that the page is sending back a 200. In case it’s not behaving properly, Loads will let you know.
If you don’t want to write your load tests using Python, or if you want to use any other library to write tests, Loads can be extended. See Plugin-in external runners.
With such a test, running Loads is done by pointing the test_es method:
$ bin/loads-runner example.TestWebSite.test_es [===============================================] 100% Hits: 1 Started: 2013-06-14 12:15:42.860586 Duration: 0.03 seconds Approximate Average RPS: 39 Average request time: 0.01s Opened web sockets: 0 Bytes received via web sockets : 0 Success: 1 Errors: 0 Failures: 0
If want to contribute to the project see Contributing.