Awesome
the Beast
Stress testing for RESTful APIs
Installation
Binaries are available on releases.
Or you can download the code and compile yourself:
$ go get -u github.com/jjmrocha/beast
Documentation
Please check our wiki.
Usage Manual
$ beast help
the Beast v2.x.x - Stress testing for RESTful APIs
Usage:
beast [help]
beast config <configFile>
beast template [-m <http method>] [url] <templateFile>
beast run (-n <number of requests> | -t <test duration>)
[-c <number of concurrent requests>]
[-config <configFile>] [-data <dataFile>]
[-output <outputFile>] <templateFile>
Where:
config Creates a file with the default parameters to setup HTTP connections
configFile string Name of the file to be created
template Creates a request template file, using user-provided parameters
-m string HTTP method (default "GET")
url string Endpoint to be tested
templateFile string JSON/YAML file with details about the request to test
run Executes a script and presents a report with execution results
-c int Number of concurrent requests (default 1)
-n int Number of requests (can't be used with "-t")
-t int Duration of the test in seconds (can't be used with "-n")
-config string Config file to setup HTTP client
-data string CSV file with data for request generation
-output string CVS file with detailed execution results
templateFile string JSON/YAML file with details about the request to test
Execution Output
$ beast run -n 100000 -c 100 -config config.json -data ../test_data.csv -output get_100.csv apps_get.yaml
===== System =====
Operating System: darwin
System Architecture: amd64
Logical CPUs: 12
===== Test =====
Request template: apps_get.yaml
Sample Data: ../test_data.csv
Configuration: config.json
Number of requests: 10000
Number of concurrent requests: 100
===== Preparing =====
- Reading configuration
- Loading request template
- Loading data file
===== Executing =====
2020/07/07 23:03:33 [#...................] 5%
2020/07/07 23:03:37 [##..................] 10%
2020/07/07 23:03:40 [###.................] 15%
2020/07/07 23:03:44 [####................] 20%
2020/07/07 23:03:47 [#####...............] 25%
2020/07/07 23:03:49 [######..............] 30%
2020/07/07 23:03:52 [#######.............] 35%
2020/07/07 23:03:54 [########............] 40%
2020/07/07 23:03:56 [#########...........] 45%
2020/07/07 23:03:59 [##########..........] 50%
2020/07/07 23:04:01 [###########.........] 55%
2020/07/07 23:04:04 [############........] 60%
2020/07/07 23:04:06 [#############.......] 65%
2020/07/07 23:04:09 [##############......] 70%
2020/07/07 23:04:11 [###############.....] 75%
2020/07/07 23:04:14 [################....] 80%
2020/07/07 23:04:16 [#################...] 85%
2020/07/07 23:04:19 [##################..] 90%
2020/07/07 23:04:21 [###################.] 95%
2020/07/07 23:04:23 [####################] 100%
===== Stats =====
Executed requests: 100000
Time taken to complete: 55.167930783s
Requests per second: 1860.9974
Avg response time: 53.734627ms
===== Status 200 =====
100000 requests, with avg response time of 53.734627ms
And the following distribution:
- The fastest request took 6.988515ms
- 20% of requests under 30.239955ms
- 40% of requests under 40.23343ms
- 60% of requests under 52.59765ms
- 80% of requests under 72.891344ms
- 90% of requests under 91.691174ms
- 95% of requests under 110.193479ms
- 99% of requests under 152.862198ms
- The slowest request took 311.154579ms
===== Output File =====
Output file 'get_100.csv' was successfully generated
License
Any contributions made under this project will be governed by the Apache License 2.0.