Introduction ============ **Marteau** is based on `Funkload `_, which is a functional and load web tester based on Python. The main features of Funkload are: - load tests are plain Python unit tests class - everything can be run from the command-line - you can run the load test locally or distributed across many nodes - nice HTML reports are generated **Marteau** is just a Redis-based queue that let you run distributed Funkload load tests through the web. **Marteau** features are: - management of a list of nodes - management of a list of workers - enqueues load tests and drives Funkload to run them - display successes, failures and Funkload reports How to create a Marteau Load Test ================================= Creating a load test for marteau is done in three steps: - create a Funkload load test - composed of a module and a configuration file - create a **.marteau.yml** file, that will be used by Marteau as the entry point. - push everything in a Github repository. Create a Funkload test ---------------------- Just follow Funkload `tutorial `_ Create a Marteau configuration file ----------------------------------- The Marteau configuration file must be named **.marteau.yml** and must be located in the root of your repository. **.marteau.yml** is a YAML file with the following options. Every option is optional except **script**, **test** and **name**. - **name** -- a name describing the load test. - **script** -- the Python module that contains the Funkload test - **test** -- The test to run, which is a class name followed by a method name. e.g. *Class.method* - **wdir** -- the directory relative to the repository root that contains the Funkload test -- *defaults to root* - **nodes** -- the number of nodes to use to run the test -- *defaults to 1* - **deps** -- a list of PyPI dependencies required by the test. Will be installed on every node prior to starting the load. - **cycles** -- the Funkload cycles. See `definition `_. If not provided, will use the one in the Funkload configurarion file. - **duration** -- the duration in seconds of each test. If not provided, will use the one in the Funkload configurarion file. - **email** -- if provided, a recipient that will receive an e-mail when a load test run is finished, with a link to the HTML report. Example of a configuration file :: name: MarketPlace test: MarketplaceTest.test_marketplace script: loadtest.py nodes: 9 email: tarek@ziade.org cycles: 10:20:30:100 duration:120 deps: - PyBrowserID Try it locally -------------- Once you have a Funkload test and a Marteau configuration file, you can try to run it locally by using the **marteau** script against the github repo URL or against a directory containing a clone of the repo:: $ marteau /Users/tarek/Dev/github.com/tokenserver 2012-08-16 13:27:25 [31624] [INFO] Hammer ready. Where are the nails ? virtualenv --no-site-packages . ... 2012-08-16 13:46:20 [37308] [INFO] Report generated at '/tmp/report' 2012-08-16 13:46:20 [37308] [INFO] Bye! In this mode, Marteau will ignore the **node** option and just execute the load test locally. Once it's over you get the report generated, and you can view it in your browser. Run it on a Marteau server -------------------------- Once you are happy with your test, you can send it to a Marteau server via the command line, using the **--server** option. The first thing to do is to get an API key on the target Marteau server. Let's say Marteau is running on **http://marteau.example.com**. Visit **http://marteau.example.com/profile** with your Browser-ID login, then hit the *Generate key* button. You will geta a user and secret key - you will need to set in your environment prior to running the script:: $ export MACAUTH_USER=tarek@mozilla.com $ export MACAUTH_SECRET=eab6e5f09faec33...933d0a0e4c082fa74bc1e7a Then you can run the script to add jobs in Marteau:: $ bin/marteau https://github.com/mozilla-services/tokenserver --server http://marteau.example.com 2012-08-16 14:21:22 [48118] [INFO] Sending the job to the Marteau server 2012-08-16 14:21:22 [48118] [INFO] Test added at 'http://marteau.example.com/test/a3296777b6eb4d74a879d05bbd40c204' 2012-08-16 14:21:22 [48118] [INFO] Bye! You can then visit the URL and watch the console live. Alternatively, you can visit the Marteau server and just fill the form.