Prueba de varias URL al mismo tiempo

En este capítulo, aprenderemos a probar varias URL al mismo tiempo. Para eso, necesitaremos editar nuestro archivo de aplicación, app.py para incluir dos 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)

Creación de un script de shell simple

Puede hacer esto creando un script de shell, con múltiples llamadas ab. Cree un archivo test.sh y agréguele las siguientes líneas:

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

Cuando haya agregado las líneas anteriores, guarde y cierre el archivo. Haga que el archivo sea ejecutable -

chmod u+x test.sh

Ejecutemos ahora el script -

./test.sh

Para evitar la repetición y el propósito de la claridad, mostraremos solo lo relevante de la salida ab, indicando con puntos qué parte se ha omitido, como se muestra a continuación.

Salida

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

Shell Script para guardar la salida de Apache Bench en un archivo

Puede guardar la salida de Apache Bench en un archivo creando un script de shell, con múltiples llamadas ab. Al final de cada línea, coloque un&;esto hace que el comando se ejecute en segundo plano y permite que el siguiente comando comience su ejecución. También querrá redirigir la salida a un archivo para cada URL usando <nombre de archivo>. Por ejemplo, nuestro archivo test.sh se verá así después de la modificación:

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

Aquí, test1.txt y test2.txt son los archivos para guardar los datos de salida.

Puede verificar que el script anterior haya creado dos archivos, test1.txt y test2.txt, que contienen la salida ab para las respectivas URL:

$ ls -l

Salida

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

Situación de vigilancia

Mientras usa ab, debe estar alerta a la prueba fallida sin previo aviso. Por ejemplo, si comprueba una URL incorrecta, puede obtener algo similar a lo siguiente (aquí hemos cambiado deliberadamente el puerto).

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

Salida

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)