Учебники

Тестирование нескольких URL одновременно

В этой главе мы узнаем, как тестировать несколько URL одновременно. Для этого нам нужно отредактировать файл приложения app.py, включив в него два 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)

Создание простого сценария оболочки

Вы можете сделать это, создав сценарий оболочки с несколькими вызовами ab. Создайте файл test.sh и добавьте в него следующие строки:

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

Когда вы добавите вышеуказанные строки, сохраните и закройте файл. Сделайте файл исполняемым —

chmod u+x test.sh

Давайте теперь запустим скрипт —

./test.sh

Чтобы избежать повторения и цели ясности, мы покажем только релевантный вывод ab, указав точками, какая часть была пропущена, как показано ниже.

Выход

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

Сценарий оболочки для сохранения выходных данных Apache Bench в файл

Вы можете сохранить выходные данные Apache Bench в файл, создав сценарий оболочки с несколькими ab-вызовами. В конце каждой строки поместите &; это заставляет команду выполняться в фоновом режиме и позволяет следующей команде начать ее выполнение. Вы также захотите перенаправить вывод в файл для каждого URL, используя <имя файла>. Например, наш файл test.sh после модификации будет выглядеть следующим образом:

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

Здесь test1.txt и test2.txt — это файлы для сохранения выходных данных.

Вы можете проверить, что вышеприведенный скрипт создал два файла, test1.txt и test2.txt, которые содержат выходные данные ab для соответствующих URL —

$ ls -l

Выход

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

Бдительная ситуация

При использовании ab вы должны быть предупреждены о неудачном тесте без предупреждения. Например, если вы проверите неправильный URL, вы можете получить что-то похожее на следующее (мы намеренно изменили порт здесь).