Test simultané de plusieurs URL

Dans ce chapitre, nous allons apprendre à tester plusieurs URL simultanément. Pour cela, nous devrons éditer notre fichier d'application, app.py pour inclure deux URL -

from bottle import Bottle, run

app = Bottle()

@app.route('/')
@app.route('/hello1')
def hello():
   return "Hello World! It is first URL."

@app.route('/hello2')
def hello():
   return "Hello World! It is second URL."

run(app,server = 'gunicorn',host = '127.0.0.1', port = 8080)

Création d'un script Shell simple

Vous pouvez le faire en créant un script shell, avec plusieurs appels ab. Créez un fichier test.sh et ajoutez-y les lignes suivantes -

ab -n 100 -c 10 http://127.0.0.1:8080/hello1 
ab -n 100 -c 10 http://127.0.0.1:8080/hello2

Lorsque vous avez ajouté les lignes ci-dessus, enregistrez et fermez le fichier. Rendre le fichier exécutable -

chmod u+x test.sh

Lançons maintenant le script -

./test.sh

Pour éviter les répétitions et à des fins de clarté, nous montrerons uniquement le contenu pertinent de la sortie ab, en indiquant par des points quelle partie a été omise, comme dans ce qui suit.

Production

.
.
.
Document Path:          /hello1
Document Length:        732 bytes

Concurrency Level:      10
Time taken for tests:   0.040 seconds
Complete requests:      100
Failed requests:        0
Non-2xx responses:      100
Total transferred:      90000 bytes
HTML transferred:       73200 bytes
Requests per second:    2496.13 [#/sec] (mean)
Time per request:       4.006 [ms] (mean)
Time per request:       0.401 [ms] (mean, across all concurrent requests)
Transfer rate:          2193.87 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.8      0       3
Processing:     1    3   1.0      4       5
Waiting:        0    3   1.2      4       4
Total:          1    4   0.6      4       5
WARNING: The median and mean for the processing time are not within a normal deviation
        These results are probably not that reliable.
.
.
.

Script Shell pour enregistrer la sortie du banc Apache dans un fichier

Vous pouvez enregistrer la sortie Apache Bench dans un fichier en créant un script shell, avec plusieurs appels ab. À la fin de chaque ligne, placez un&;cela fait que la commande s'exécute en arrière-plan et laisse la commande suivante commencer son exécution. Vous voudrez également rediriger la sortie vers un fichier pour chaque URL en utilisant <filename>. Par exemple, notre fichier test.sh ressemblera à ce qui suit après modification -

$ ab -n 100 -c 10 http://127.0.0.1:8080/hello1 > test1.txt &
$ ab -n 100 -c 10 http://127.0.0.1:8080/hello2 > test2.txt &

Ici, test1.txt et test2.txt sont les fichiers pour enregistrer les données de sortie.

Vous pouvez vérifier que le script ci-dessus a créé deux fichiers, test1.txt et test2.txt qui contiennent la sortie ab pour les URL respectives -

$ ls -l

Production

...
-rw-r--r-- 1 root root  5225 May 30 12:11 out.data
-rwxr--r-- 1 root root   118 Jun 10 12:24 test.sh
-rw-r--r-- 1 root root  1291 Jun 10 12:31 test1.txt
-rwxr--r-- 1 root root    91 Jun 10 13:22 test2.sh
-rw-r--r-- 1 root root  1291 Jun 10 12:31 test2.txt
...

Situation de vigilance

Lorsque vous utilisez ab, vous devez être attentif à l'échec du test sans avertissement. Par exemple, si vous vérifiez une mauvaise URL, vous pouvez obtenir quelque chose de similaire à ce qui suit (nous avons délibérément changé le port ici).

$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate"  http://127.0.0.1:805/

Production

This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient).....done

Server Software:
Server Hostname:        127.0.0.1
Server Port:            805

Document Path:          /
Document Length:        Variable

Concurrency Level:      10
Time taken for tests:   0.002 seconds
Complete requests:      100
Failed requests:        150
   (Connect: 0, Receive: 100, Length: 0, Exceptions: 50)
Keep-Alive requests:    0
Total transferred:      0 bytes
HTML transferred:       0 bytes
Requests per second:    44984.26 [#/sec] (mean)
Time per request:       0.222 [ms] (mean)
Time per request:       0.022 [ms] (mean, across all concurrent requests)
Transfer rate:          0.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:     0    0   0.2      0       0
Waiting:        0    0   0.0      0       0
Total:          0    0   0.2      0       0

Percentage of the requests served within a certain time (ms)
  50%      0
  66%      0
  75%      0
  80%      0
  90%      0
  95%      0
  98%      0
  99%      0
 100%      0 (longest request)