Dinamik Sayfaları Test Etmeye Hazırlık

Bu bölümde, dinamik sayfaları test etmek için gereken hazırlığı anlayacağız. Sunucu tarafı dinamik web sayfası, yapısı sunucu tarafı komut dosyalarını işleyen bir uygulama sunucusu tarafından kontrol edilen bir web sayfasıdır. Apache tezgahı, yalnızca sunucu tarafı dinamik web sayfasını test edebilir.

Eş Zamanlılık Düzeyi ve Toplam İstek Sayısı

Eşzamanlılık düzeyi, toplam istek sayısından düşük olmalıdır.

$ ab -l -r -n 30 -c 80 -k -H "Accept-Encoding: gzip, deflate"  http://127.0.0.1:8000/

Output

ab: Cannot use concurrency level greater than total number of requests
Usage: ab [options] [http[s]://]hostname[:port]/path

Bayrakların Kullanımı

Bu bölümde, bazı önemli bayrakların ab komutu ile kullanımını anlatacağız. Terimleri, seçenekleri ve bayrakları birbirinin yerine kullanacağız.

Ayrıntılı-v

Ayrıntılı seçeneği, birden fazla başarısız istek varsa analiz etmek ve hata ayıklamak için kullanılabilir. Yük testinin yaygın bir başarısızlığı göstergesi, testin çok hızlı bitmesi ve saniye başına istek için iyi bir sayı vermesidir. Ama yanlış bir ölçüt olacak. Başarıyı veya başarısızlığı belirlemek için,-v 2Her yanıtın gövdesini ve başlığını terminal çıkışına aktaracak seçenek. Aşağıdaki komut bir kullanım durumunu gösterir -

$ ab -n 1 -v 2 http://www.generic-example-URL.com/

Output

LOG: header received:
HTTP/1.0 200 OK
…
Content-Length: 2548687

Elbette, değişken yanıtları test ediyorsanız veya herhangi bir hata durumunda 200 olmayan HTTP kodları döndürüyorsanız, uzunluk kontrolünü göz ardı etmelisiniz. -lseçeneği. Sonraki bölümlerde bir web2py uygulamasını başlatacağımız zaman yakında 200 olmayan HTTP göreceğiz.

Yaşamak-k

İstemci HTTP isteği gönderdiğinde, sunucuya bağlantı kurulur, sunucu yanıt gönderir ve isteği gönderdikten sonra bağlantı kapatılır. Bu döngü her istekle devam eder. Bununla birlikte, canlı tutma ayarıyla (kalıcı bağlantılar olarak da bilinir), istemci birden çok isteği ve yanıtı kolaylaştırmak için temel bir TCP bağlantısını açık tutar; bu, aksi takdirde mevcut olabilecek yavaş ve maliyetli bağlantı başlatma süresini ortadan kaldırır.

Değişken belge uzunluğu -l

Web sayfası değişken uzunlukta ise, şu seçeneği kullanmalısınız: -l. Apache Bench, yanıtların uzunluğu sabit değilse hataları bildirmez. Bu, dinamik sayfalar için yararlı olabilir.

-R seçeneğinin kullanımı

Hata alırken ab çıkmamaya nasıl zorlanır? Seçeneği kullanmalısınız-r. Bu seçenek olmadan, herhangi bir istek soket hatasına ulaşır ulaşmaz testiniz başarısız olabilir. Ancak bu seçenek ile hatalar başarısız hatalar başlığında rapor edilecek ancak test sonuna kadar devam edecektir.

-H seçeneğinin kullanımı

Bu seçenek, rastgele başlık satırı eklemek için kullanılır. Argüman tipik olarak iki nokta üst üste ile ayrılmış alan-değer çifti içeren geçerli bir başlık satırı biçimindedir (yani, "Accept-Encoding: zip / zop; 8bit").

-C seçeneğinin kullanımı

Aşağıdaki bölümde, yukarıdaki seçeneklerin çerez değerini kullanma seçeneği ile birlikte nasıl kullanılacağını ayrıntılı olarak öğreneceğiz, yani -Cseçeneği. -C seçeneği tipik olarak birname = valueçift. Bu alan tekrar edilebilir.

Apache Bench ile Oturum Çerezi Kullanma

Tanımlama bilgisinin Apache Bench ile nasıl kullanılacağını anlamak için tanımlama bilgisi ayarlamaya çalışan bir web sayfasına ihtiyacımız var. Çok iyi bir örnek, bir python web çerçevesi olan web2py uygulamasıdır.

Web2py yükleniyor

Hızlı bir şekilde başka bir python uygulaması web2py kuracağız. Nasıl kullanılacağı hakkında daha fazla bilgiyi Web2py Çerçevesine Genel Bakış bölümünde okuyabilirsiniz .

Python genellikle varsayılan olarak Ubuntu ve Debian sunucusuna kurulur. Bu nedenle, web2py'yi başarıyla çalıştırmak için bir gereksinim zaten karşılanmıştır.

Ancak, indireceğimiz zip dosyasından web2py'nin kaynak dosyalarını çıkarmak için unzip paketini yüklememiz gerekiyor -

$ sudo apt-get update
$ sudo apt-get install unzip

Web2py çerçevesini projenin web sitesinden alalım. Bunu ana klasörümüze indireceğiz -

$cd ~
$ wget http://www.web2py.com/examples/static/web2py_src.zip

Şimdi indirdiğimiz dosyayı açıp içine taşıyabiliriz -

$ unzip web2py_src.zip
$ cd web2py

Web2py'yi çalıştırmak için yüklemenize gerek yoktur. Web2py dizinine girdikten sonra, aşağıdaki komutu yazarak çalıştırabilirsiniz -

$python web2py.py

Her şey başarılı olursa, yönetici kullanıcı arayüzü için bir şifre seçmenizin isteneceği aşağıdaki çıktıyı göreceksiniz -

web2py Web Framework
Created by Massimo Di Pierro, Copyright 2007-2017
Version 2.14.6-stable+timestamp.2016.05.10.00.21.47
Database drivers available: sqlite3, imaplib, pymysql, pg8000
WARNING:web2py:GUI not available because Tk library is not installed
choose a password:

please visit:
        http://127.0.0.1:8000/
use "kill -SIGTERM 23904" to shutdown the web2py server

Ancak, başlatılan web arayüzüne yalnızca yerel makineden erişilebildiğinin farkında olmanız gerekir.

Çıktıdan, web sunucusunu durdurmak için anlık terminale “CTRL-C” yazmanız gerekeceğini anlayabilirsiniz. Öte yandan, aynı VPS ile ilgili diğer terminaldeki web2py sunucusunu durdurmak için kill -SIGTERM <PID> komutunu ekleyebilirsiniz; burada <PID> web2py sunucusu için işlem kimliğidir, bu durumda 23904.

Web2py'den Oturum Çerezi

Bir sayfaya yalnızca oturum açmış bir kullanıcı tarafından erişilebiliyorsa, oturum açma sayfasından doğrudan erişilemiyorsa, bu durumda -Cbayrak. Bu bayrak, ab komutu için bir çerez tanımlar. Ancak oturum tanımlayıcı tanımlama bilgisinin değerini geçerli bir oturumdan almanız gerekir. Nasıl elde edilir? Çeşitli çevrimiçi eğitimler sizi Chrome (veya Mozilla) tarayıcı geliştirici araçlarına yönlendirecektir. Ancak bizim test durumumuzda, uygulama sadece komut satırında mevcut olduğundan, değeri elde etmek için lynx tarayıcısını kullanacağız.

Önce bir oturumun çerez değerini alalım. Başka bir terminal açın ve aşağıdaki komutu yazın -

$ lynx http://127.0.0.1:8000/

Yukarıdaki komuta yanıt olarak, lynx, aşağıdaki resimde gösterildiği gibi web2py sunucusundan çerezi kabul etmek için izninizi isteyecektir.

Yazmadan önce çerez değerini not edin yçerezi kabul etmek için. Şimdi terminal aşağıdaki resme benzer görünecek - terminaldeki web sitesi!

Çerez değerini elde ettikten sonra, şimdi ab testini çalıştıracağız. Bunun için üçüncü terminali açmamız gerekecek (aşağıdaki resme bakın) -

Şimdi üçüncü terminalde -C bayrağını kullanalım -

$ ab -n 100 -c 10 -C session_name = 127.0.0.1-643dad04-3c34  http://127.0.0.1:8000/

Çı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:        Rocket
Server Hostname:        127.0.0.1
Server Port:            8000

Document Path:          /
Document Length:        66 bytes

Concurrency Level:      10
Time taken for tests:   0.051 seconds
Complete requests:      100
Failed requests:        0
Non-2xx responses:      100
Total transferred:      27700 bytes
HTML transferred:       6600 bytes
Requests per second:    1968.12 [#/sec] (mean)
Time per request:       5.081 [ms] (mean)
Time per request:       0.508 [ms] (mean, across all concurrent requests)
Transfer rate:          532.39 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    2   0.9      2       4
Processing:     0    3   0.9      3       5
Waiting:        0    2   1.1      2       4
Total:          4    5   0.7      5       7

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

Yukarıdaki çıktıdan birkaç noktaya dikkat çekiyoruz. İlk olarak, web2py Rocket web sunucusunu kullanır . Ayrıca, çıktıda daha önce tartışılan başlıklara ek olarak '2xx olmayan yanıtlar' aldığımızı da not ediyoruz. Genel olarak, Http protokolü bir isteğe bir yanıt kodu kullanarak yanıt verir ve 200s aralığında herhangi bir şey 'tamam' anlamına gelir ve geri kalanı bir soruna karşılık gelir. Örneğin, 400'ler, 404 Dosya Bulunamadı gibi kaynakla ilgili hatalardır. 500'ler sunucu hatalarına karşılık gelir. Anlık durumumuzda, -C seçeneğini kullandığımız durumlar dışında hiçbir yerde hata yoktur. Daha önce açıklandığı gibi -l seçeneği kullanılarak bastırılabilir.

Yönetici Sayfasını Kontrol Etme

Bu bölümde, yönetici sayfasını nasıl kontrol edeceğimizi anlayacağız. Karşılaştırma amacıyla, web2py uygulamasının başka bir URL'sini test edelim -

$ ab -n 100 -c 10 session_name = 127.0.0.1-643dad04-3c34  http://127.0.0.1:8000/admin

Çı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:        Rocket
Server Hostname:        127.0.0.1
Server Port:            8000

Document Path:          /admin
Document Length:        8840 bytes

Concurrency Level:      10
Time taken for tests:   2.077 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      926700 bytes
HTML transferred:       884000 bytes
Requests per second:    48.14 [#/sec] (mean)
Time per request:       207.749 [ms] (mean)
Time per request:       20.775 [ms] (mean, across all concurrent requests)
Transfer rate:          435.61 [Kbytes/sec] received

Connection Times (ms)
          min  mean[+/-sd] median   max
Connect:        0    1   3.2      0      12
Processing:    62  204  52.2    199     400
Waiting:       61  203  52.0    199     400
Total:         62  205  54.3    199     411

Percentage of the requests served within a certain time (ms)
  50%    199
  66%    211
  75%    220
  80%    226
  90%    264
  95%    349
  98%    381
  99%    411
 100%    411 (longest request)

İlgili istatistikleri özellikle "Bağlantı Süreleri" ve "Sunulan taleplerin yüzdesi ..." http://127.0.0.1:8000/ ve http://127.0.0.1:8000/admin. Çok büyük bir fark var.

Zaman Sınırı Seçeneğini Kullanma

Genellikle, Timelimit seçeneği aldatıcı bir seçenektir. Bunu oldukça açıklayıcı olan ab el kitabından anlayalım -

-t timelimit
Maximum number of seconds to spend for benchmarking. This implies a -n 50000 internally.
Use this to benchmark the server within a fixed total amount of time.
Per default there is no timelimit.

Bu seçenekle bir test yapalım. Çıktıdan geçtikten sonra gözlemlerimizi not edeceğiz -

$ ab -n 100 -c 10 -t 60   http://127.0.0.1:8000/

Çı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)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


Server Software:        Rocket
Server Hostname:        127.0.0.1
Server Port:            8000

Document Path:          /
Document Length:        66 bytes

Concurrency Level:      10
Time taken for tests:   22.547 seconds
Complete requests:      50000
Failed requests:        0
Non-2xx responses:      50000
Total transferred:      13850000 bytes
HTML transferred:       3300000 bytes
Requests per second:    2217.61 [#/sec] (mean)
Time per request:       4.509 [ms] (mean)
Time per request:       0.451 [ms] (mean, across all concurrent requests)
Transfer rate:          599.88 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    2   0.8      2       8
Processing:     0    2   3.2      2     218
Waiting:        0    2   3.2      2     218
Total:          2    4   3.1      4     220

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

Çıktının, bu seçeneğin, tarafından belirtilen istek sayısını geçersiz kıldığını gösterdiğine dikkat edin. -nseçenek ve 50K isteklere kadar devam eder. Bununla birlikte, talepler çok hızlı bir şekilde ele alındığı için, ab 50k işaretine ulaşılır ulaşılmaz sonlandırıldı - anlık vakada 22 saniye içinde (Testler için alınan süre başlığına bakın).

Aynı komutu değiştirerek test edebilirsiniz. http://127.0.0.1:8000/ ile http://127.0.0.1:8000/admin (bizim web2py uygulamamız olduğunu varsayarak) veya https://www.apache.org/ gibi bir üçüncü taraf web sitesi, istatistikler arasındaki farkı fark edin.

Yük Testini Yapmadan Önce Kontrol Listesi

Testi başarıyla çalıştırmanıza ve performansı doğru şekilde ölçmenize yardımcı olacak birkaç kontrol vardır. Yük testini gerçekleştirmeden önce aşağıdaki koşulları göz önünde bulundurun -

  • Fazladan python modülünün yüklenmediğinden emin olun.

  • TCP / IP Bağlantı Noktası Tükenmesini önlemek için, başka bir ab testine geçmeden önce genellikle 2-3 dakika beklemelisiniz.

  • Eşzamanlı bağlantıların sayısının Apache Worker Threads'ten daha düşük olduğundan emin olun.

  • Apache veya python çökerse, başka bir test yapmadan önce sunucuyu yeniden başlatmalısınız.