-
Notifications
You must be signed in to change notification settings - Fork 108
Executing concurrent tests
Concurrent tests consists of sending many requests concurrently and evaluating the throughput of your web service. To be performed in scenarios like (not limited to though):
- update of the web framework
- non-minor changes to the REST model
- change of web framework, etc
For these concurrency tests, we've used a Go tool compiled and made available by Valentin, called hey
.
In order to see how to use it, check out the help function, e.g.:
/afs/cern.ch/user/v/valya/public/hey_linux --help
Once you have the service you want to test up & running (do NOT run it against a production environment!!!), you need to provide a list of API/URLs that we want to call, e.g.:
amaltaro@vocms0192:/data/amaltaro/HG1906_Validation $ cat url.txt
https://alancc7-cloud2.cern.ch/reqmgr2/data/request?status=new
https://alancc7-cloud2.cern.ch/reqmgr2/data/request?status=assigned
https://alancc7-cloud2.cern.ch/reqmgr2/data/request?status=staging
https://alancc7-cloud2.cern.ch/reqmgr2/data/request?request_type=ReDigi
https://alancc7-cloud2.cern.ch/reqmgr2/data/request?request_type=StepChain
https://alancc7-cloud2.cern.ch/reqmgr2/data/request?request_type=TaskChain&detail=True
https://alancc7-cloud2.cern.ch/reqmgr2/data/request?outputdataset=/a/b/c
https://alancc7-cloud2.cern.ch/reqmgr2/data/request?requestor=amaltaro
Then we can execute the following command:
/afs/cern.ch/user/v/valya/public/hey_linux -n 500 -c 15 -t 300 -m GET -U cloud2.txt -A "application/json"
where: -n : total number of requests to make -c : number of requests to run concurrently -t : timeout for each request, in seconds -m : the HTTP method to use -U : text file containing URLs to be requested -A : HTTP accept header
The tool gives us a nice report, e.g.:
amaltaro@vocms0192:/data/amaltaro/HG1906_Validation $ /afs/cern.ch/user/v/valya/public/hey_linux -n 1000 -c 50 -t 300 -m GET -U cloud2.txt -A "application/json"
Summary:
Total: 29.9914 secs
Slowest: 6.9225 secs
Fastest: 0.0353 secs
Average: 1.4460 secs
Requests/sec: 33.3429
Total data: 16000 bytes
Size/request: 16 bytes
Status code distribution:
[200] 1000 responses
Response time histogram:
0.035 [1] |
0.724 [51] |∎∎∎
1.413 [605] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
2.101 [286] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
2.790 [7] |
3.479 [0] |
4.168 [0] |
4.856 [1] |
5.545 [15] |∎
6.234 [16] |∎
6.923 [18] |∎
Latency distribution:
10% in 0.8263 secs
25% in 0.9514 secs
50% in 1.1995 secs
75% in 1.5345 secs
90% in 1.8035 secs
95% in 4.7520 secs
99% in 6.3769 secs
For further information on the hey
tool, please refer to this document hey_http_group