Testare più URL contemporaneamente

In questo capitolo impareremo come testare più URL contemporaneamente. Per questo, dovremo modificare il nostro file dell'applicazione, app.py per includere due 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)

Creazione di un semplice script di shell

Puoi farlo creando uno script di shell, con più chiamate ab. Crea un file test.sh e aggiungi le seguenti righe:

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

Dopo aver aggiunto le righe precedenti, salva e chiudi il file. Rendi il file eseguibile -

chmod u+x test.sh

Eseguiamo ora lo script -

./test.sh

Per evitare ripetizioni e scopo di chiarezza, mostreremo solo il pertinente dell'output ab, indicando con punti quale parte è stata omessa, come di seguito.

Produzione

.
.
.
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 della shell per salvare l'output di Apache Bench in un file

È possibile salvare l'output di Apache Bench su file creando uno script di shell, con più chiamate ab. Alla fine di ogni riga, posizionare un&;questo fa eseguire il comando in background e consente al comando successivo di avviare la sua esecuzione. Dovrai anche reindirizzare l'output a un file per ogni URL utilizzando <filename>. Ad esempio, il nostro file test.sh sarà simile al seguente dopo la modifica:

$ 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 &

Qui, test1.txt e test2.txt sono i file per salvare i dati di output.

Puoi controllare che lo script sopra abbia creato due file, test1.txt e test2.txt che contiene l'output ab per i rispettivi URL -

$ ls -l

Produzione

...
-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
...

Situazione di attenzione

Durante l'utilizzo di ab, dovresti essere attento al test fallito senza preavviso. Ad esempio, se controlli un URL sbagliato, potresti ottenere qualcosa di simile al seguente (abbiamo deliberatamente cambiato la porta qui).

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

Produzione

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)