Menguji Beberapa URL Secara Bersamaan

Dalam bab ini, kita akan mempelajari cara menguji beberapa URL secara bersamaan. Untuk itu, kita perlu mengedit file aplikasi kita, app.py untuk memasukkan dua 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)

Membuat Skrip Shell Sederhana

Anda dapat melakukan ini dengan membuat skrip shell, dengan beberapa panggilan ab. Buat file test.sh dan tambahkan baris berikut ke dalamnya -

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

Setelah Anda menambahkan baris di atas, Simpan dan Tutup file. Jadikan file dapat dieksekusi -

chmod u+x test.sh

Sekarang mari kita jalankan skripnya -

./test.sh

Untuk menghindari pengulangan dan tujuan kejelasan, kami hanya akan menampilkan yang relevan dari keluaran ab, menunjukkan dengan titik-titik bagian mana yang telah dihilangkan, seperti berikut ini.

Keluaran

.
.
.
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 untuk Menyimpan Apache Bench Output ke File

Anda dapat menyimpan Apache Bench Output ke file dengan membuat skrip shell, dengan beberapa panggilan ab. Di akhir setiap baris, tempatkan&;ini membuat perintah berjalan di latar belakang, dan membiarkan perintah berikutnya memulai eksekusinya. Anda juga ingin mengarahkan output ke file untuk setiap url menggunakan <filename>. Misalnya, file test.sh kami akan terlihat seperti berikut setelah modifikasi -

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

Sini, test1.txt dan test2.txt adalah file untuk menyimpan data keluaran.

Anda dapat memeriksa bahwa skrip di atas telah membuat dua file, test1.txt dan test2.txt yang berisi keluaran ab untuk masing-masing URL -

$ ls -l

Keluaran

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

Situasi Awas

Saat menggunakan ab, Anda harus waspada terhadap pengujian yang gagal tanpa peringatan. Misalnya, jika Anda memeriksa URL yang salah, Anda mungkin mendapatkan sesuatu yang mirip dengan yang berikut ini (kami sengaja mengubah porta di sini).

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

Keluaran

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)