Birden Fazla URL'yi Aynı Anda Test Etme

Bu bölümde, birden çok URL'yi aynı anda nasıl test edeceğimizi öğreneceğiz. Bunun için uygulama dosyamız olan app.py'yi iki URL içerecek şekilde düzenlememiz gerekecek -

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)

Basit Bir Kabuk Komut Dosyası Oluşturma

Bunu, birden çok ab çağrısı içeren bir kabuk betiği oluşturarak yapabilirsiniz. Bir test.sh dosyası oluşturun ve buna aşağıdaki satırları ekleyin -

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

Yukarıdaki satırları eklediğinizde, dosyayı kaydedin ve kapatın. Dosyayı çalıştırılabilir yapın -

chmod u+x test.sh

Şimdi betiği çalıştıralım -

./test.sh

Tekrardan ve netlik amacından kaçınmak için, aşağıda gösterildiği gibi, hangi kısmın çıkarıldığını noktalarla göstererek ab çıktısının yalnızca ilgili kısmını göstereceğiz.

Çıktı

.
.
.
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 Çıktısını Dosyaya Kaydetmek İçin Kabuk Betiği

Birden çok ab çağrısıyla bir kabuk betiği oluşturarak Apache Bench Çıktısını dosyaya kaydedebilirsiniz. Her satırın sonuna bir&;bu, komutun arka planda çalışmasını sağlar ve sonraki komutun yürütülmesini başlatır. Ayrıca çıktıyı her url için <dosyaadı> kullanarak bir dosyaya yeniden yönlendirmek isteyeceksiniz. Örneğin, test.sh dosyamız değişiklikten sonra aşağıdaki gibi görünecektir -

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

Buraya, test1.txt ve test2.txt çıktı verilerini kaydedecek dosyalardır.

Yukarıdaki komut dosyasının ilgili URL'ler için ab çıktısını içeren iki dosya, test1.txt ve test2.txt oluşturduğunu kontrol edebilirsiniz -

$ ls -l

Çıktı

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

Dikkatli Durum

Ab kullanırken, başarısız olan teste karşı uyarıda bulunmadan uyanık olmalısınız. Örneğin, yanlış bir URL'yi kontrol ederseniz, aşağıdakine benzer bir şey alabilirsiniz (burada bağlantı noktasını kasıtlı olarak değiştirdik).

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

Çıktı

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)