Örnek Uygulamamızı Test Etmek

Önceki bölümde, bir üçüncü taraf web sitesini test etmek için Apache Bench'in temel kullanımını anladık. Bu bölümde, bir web uygulamasını kendi sunucumuzda test etmek için bu aracı kullanacağız. Öğreticiyi mümkün olduğu kadar bağımsız tutmak için, gösteri amaçlı bir python uygulaması kurmayı seçtik; uzmanlık seviyenize bağlı olarak PHP veya Ruby gibi başka bir dil seçebilirsiniz.

Python'u Yükleme

Python, genellikle Linux sunucularında varsayılan olarak kurulur.

Bottle Framework Kurmak ve Basit Bir Uygulama Oluşturmak

Bottle, web uygulamaları oluşturmak için python ile yazılmış bir mikro çerçevedir ve pip bir python paket yöneticisidir. Bottle'ı kurmak için terminale aşağıdaki komutu yazın -

$ sudo apt-get install python-pip
$ sudo pip install bottle

Şimdi küçük bir Şişe uygulaması oluşturalım. Bunun için bir dizin oluşturun ve içine gidin -

$ mkdir webapp
$ cd webapp

Yeni bir python betiği oluşturacağız, app.py, webapp dizininin içinde -

$ vim app.py

Şimdi, app.py dosyasına aşağıdaki kodu yazın -

from bottle import Bottle, run

app = Bottle()

@app.route('/')
@app.route('/hello')
def hello():
   return "Hello World!"

run(app, host = 'localhost', port = 8080)

Yukarıdaki satırları eklediğinizde, dosyayı kaydedin ve kapatın. Dosyayı kaydettikten sonra, uygulamayı başlatmak için python betiğini çalıştırabiliriz -

$ python app.py

Output

Bottle v0.12.7 server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.

Bu çıktı, uygulamamızın ana bilgisayardaki yerel makinede çalıştığını gösterir. http://localhost ve limanda dinlemek 8080.

Uygulamamızın HTTP isteklerine doğru şekilde yanıt verip vermediğini kontrol edelim. Bu terminal Şişe uygulamasından çıkmadan herhangi bir giriş alamadığından, başka bir terminal ile VPS'imize giriş yapmamız gerekiyor. VPS'de başka bir terminal ile oturum açtıktan sonra, yeni terminalde aşağıdaki kodu yazarak uygulamanıza gidebilirsiniz.

$ lynx http://localhost:8080/

Lynx bir komut satırı tarayıcısıdır ve genellikle Debian ve Ubuntu gibi çeşitli Linux dağıtımlarında varsayılan olarak yüklenir. Aşağıdaki çıktıyı görüyorsanız bu, uygulamanızın iyi çalıştığı anlamına gelir.

Output

Yukarıdaki çıktıyı görüyorsanız, bu, uygulamamızın yayında ve teste hazır olduğu anlamına gelir.

Uygulamayı Geliştirme Web Sunucusuyla Test Etme

Lütfen ab'de bir hata olduğunu ve uygulamayı localhost'ta test edemeyeceğini unutmayın. Bu nedenle, app.py dosyasındaki ana bilgisayarı localhost'tan 127.0.0.1'e değiştireceğiz. Böylece dosya şu şekilde değişecek -

from bottle import Bottle, run

app = Bottle()

@app.route('/')
@app.route('/hello')
def hello():
   return "Hello World!"

run(app, host = '127.0.0.1', port = 8080)

Şimdi uygulamamızı, lynx komutunun çalıştırıldığı terminalde aşağıdaki komutu yazarak test edelim -

$ ab -n 100 -c 10  http://127.0.0.1:8080/hello

Output

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:        WSGIServer/0.1
Server Hostname:        127.0.0.1
Server Port:            8080

Document Path:          /hello
Document Length:        12 bytes

Concurrency Level:      10
Time taken for tests:   0.203 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      16500 bytes
HTML transferred:       1200 bytes
Requests per second:    493.78 [#/sec] (mean)
Time per request:       20.252 [ms] (mean)
Time per request:       2.025 [ms] (mean, across all concurrent requests)
Transfer rate:          79.56 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       0
Processing:     1    6  28.2      2     202
Waiting:        1    6  28.2      2     202
Total:          1    6  28.2      2     202

Percentage of the requests served within a certain time (ms)
  50%      2
  66%      2
  75%      2
  80%      2
  90%      2
  95%      2
  98%    202
  99%    202
 100%    202 (longest request)

İlk terminaldeki çıktı aşağıdaki gibi (100 kez) olacaktır -

...
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12   
...

İlk teste kıyasla ab sonucunun çeşitli değerlerinin nasıl değiştiğini gözlemleyebilirsiniz.

Uygulamayı Çok Parçacıklı Web Sunucusuyla Test Etme

Önceki ab testlerinde, Bottle çerçevesinde paketlenmiş varsayılan web sunucusunu kullandık.

Şimdi tek iş parçacıklı varsayılan web sunucusunu çok iş parçacıklı bir sunucu ile değiştireceğiz. Bu nedenle, çok iş parçacıklı bir web sunucusu kitaplığı kuralım.cherrypy veya gunicornve Bottle'a onu kullanmasını söyle. Burada gösteri amacıyla silahlı mısır seçtik (başka birini de seçebilirsiniz) -

$  sudo apt-get install gunicorn

Ve dosyayı değiştirin, yani varsayılan web sunucusundan gunicorn'a değişir -

...
run(server = 'gunicorn'...)
...

Uygulamayı ikinci terminalde test edelim.

$ ab -n 100 -c 10  http://127.0.0.1:8080/hello

Output

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:        gunicorn/19.0.0
Server Hostname:        127.0.0.1
Server Port:            8080

Document Path:          /hello
Document Length:        12 bytes

Concurrency Level:      10
Time taken for tests:   0.031 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      17200 bytes
HTML transferred:       1200 bytes
Requests per second:    3252.77 [#/sec] (mean)
Time per request:       3.074 [ms] (mean)
Time per request:       0.307 [ms] (mean, across all concurrent requests)
Transfer rate:          546.36 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.9      0       4
Processing:     1    2   0.7      3       4
Waiting:        0    2   0.8      2       3
Total:          2    3   0.6      3       5
WARNING: The median and mean for the initial connection time are not within a normal
        deviation These results are probably not that reliable.
WARNING: The median and mean for the processing time are not within a normal deviation
        These results are probably not that reliable.

Percentage of the requests served within a certain time (ms)
  50%      3
  66%      3
  75%      3
  80%      3
  90%      4
  95%      5
  98%      5
  99%      5
 100%      5 (longest request)

Saniyedeki İsteklerin 493'ten 3252'ye nasıl yükseldiğini gözlemleyin. Bu, gunicorn'un python uygulamaları için bir üretim sunucusu olarak uygun olduğu anlamına gelir.