Jmeter ile uygulama katmanında yük testi gerçekleştirme

23
Jmeter ile Uygulama Katmanında Yük Testi Gerçekleştirme

Transcript of Jmeter ile uygulama katmanında yük testi gerçekleştirme

Page 1: Jmeter ile uygulama katmanında yük testi gerçekleştirme

Jmeter ile Uygulama Katmanında Yük

Testi Gerçekleştirme

Page 2: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

1

Temel Adımlar Apache Jmeter Java tabanlı, ortam bağımsız statik ve dinamik kaynakları test etmek için

kullanılan bir yük testi aracıdır. Apache Jmeter uygulaması ile gerçekleştirebileceğiniz bazı

sunucu veya protokol türleri aşağıdaki gibidir:

Web - HTTP, HTTPS

FTP

SOAP

DBMS

LDAP

Mail - SMTP(S), POP3(S)ve IMAP(S)

MongoDB (NoSQL)

TCP

Öncelikle makalemize giriş yapmadan Jmeter.org adresinden yük testimiz için gerekli olan Apache Jmeter uygulamasını indirilelim. İndirdiğimiz “apache-jmeter-2.12.zip” arşiv dosyasını klasöre çıkartıp, klasör içerisinde bulunan bin klasörü içerisindeki ApacheJMeter.jar uygulamasını çalıştıralım.

Page 3: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

2

Web Sunucu Test Senaryosunun Hazırlanması

Web sunucu test senaryosunu hazırlamak için birden fazla farklı yöntem bulunmaktadır. Bu

makalemizde en temel adımlardan başlayacağız ve sonraki adımlarda yeri geldikçe diğer

yöntemlerden bahsedeceğiz.

Bir web sunucusunu uygulama katmanında yüke karşı dayanıklığını test etmek için, öncelikli olarak kullanıcı sayısını belirlememiz gerekmektedir.

Test Plan’a farenin sağ tık butonuna basarak Add menüsünden Thread (Users)

kısmından, Thread Group’u seçelim.

Eklemiş olduğumuz Thread Group’a ilişkin ekran görüntüsü aşağıdaki gibidir:

Thread Group içerisinde yer alan alan bazı parametre alanlarına göz atalım, Name:Thread Group’u adlandırmak için kullanılır. Action to be taken a Sampler error: Test yapıldığında hata durumundaki davranışını ifade eder.

"Continue" - Hata oluşursa bile test etmeye devam et

“Start Next Thread Loop” – Hata alındığında bir sonraki dizi döngüsüne geç

"Stop Thread" – İşletim diziyi durdur

"Stop Test" - Testi durdur

Page 4: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

3

Number of Threads (users): Oluşturulacak sanal kullanıcı (virtul user(s) veya concurrent user(s) değeri bu alana girilir. Ram-up period (in seconds): Number of Threads kısmında belirlenen kullanıcı sayısına kaç saniye erişilmek isteniyorsa buraya o değer yazılır. Loop Count: Testin kaç defa tekrarlanacağı bu alanda belirlenir. “Frover” seçeneği seçilirse kullanıcı tarafından test durdurulana kadar yük testi devam edecektir. Scheduler: Testin belirtilen zaman aralığında gerçekleştirilmesini sağlar.

HTTP sayfa yük testi için ayarları konfigüre etmek için Thread Group’a farenin sağ

tuşuna basarak Add menüsünden, Config Element kısmından HTTP Request

Defaults’u seçelim.

Server Name or IP: Bu alana test yapmak istediğimiz Http sunucusu alan (domain) adını veya IP adres değerini yazalım. Port Number: Bu alana Http sunucuna bağlanılmak istenen port numarasını yazalım. Timeouts: Connect (Bağlantı) ve Respons (Yanıt) alanlarına mili saniye cinsinden değerler girerek zaman aşımı değerlerini tanımlayabilirsiniz.

Page 5: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

4

Path: Http sunucusu dizininde yer alan yol (iz) bilgisini tanımı yapılabilinir.

blog.btrisk.com sitesi için aşağıdaki gibi parametre tanımları yapılmıştır.

HTTP isteğini (HTTP Request) Thread Group’a farenin sağ tuşuna basarak Add

menüsünden, Sampler kısmında HTTP Request’ i aşağıdaki gibi ekleyebiliriz.

Page 6: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

5

Karşımıza çıkan HTTP Request sayfası aşağıdaki gibidir.

Örnek olarak blog.btrisk.com sitesine yönelik yük testi için HTTP Request içerisinde

yer alan ilgili parametreleri aşağıdaki gibi düzenleyelim.

Path alanı yukarıda da görüleceği üzere ana sayfaya giriş olduğu için “/” değeri girilmiştir.

Ayrıca Blog.btrisk.com sitesinde yer alan diğer bir sayfaya yapılacak istek içinde yeni

bir HTTP Request ekleyip içerisindeki parametre alanlarına aşağıdaki gibi bilgiler

girilmiştir.

Page 7: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

6

Yapılan isteklere karşılık alınan yanıt sürelerine ilişkin değerleri grafiksel olarak

görüntüleyebilmek için Thread Group’a farenin sağ tuşuna basarak Add

menüsünden, Listener kısmından Response Time Graph’ı seçelim.

Bu adımda Thread Group sayfasından kullanıcı sayısını, belirlenen kullanıcı sayısına

kaç saniyede ulaşacağını ve testin kaç defa tekrar edileceğini belirleyelim.

Son adım olarak Run menüsünden Start veya Crtl+R tuş kombinasyonunu

kullanarak yük testini başlatalım.

Test başladığında Test süresince sağ üst köşede yeşil kare yanacak ve kullanıcı sayısı tanımlanan değere kadar artacaktır.

Test bitiminde veya test devam ederken Response Time Graph’ı seçip Graph

sekmesinden yanıt sürelerinin değişimini gözlemleyebiliriz.

Page 9: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

8

Gelişmiş Seçeneklerin Kullanımı

Bu adımda Http ve Https temelli senaryolarımızı daha kolay bir şekilde oluşturmayı ve

Jmeter-Plugin eklentisi ile daha fazla grafik elde ederek yük testi analizlerimizin daha anlamlı

ve anlaşılır olmasını sağlayacağız.

Makalemize başlamadan önce Jmeter-Plugin.org sayfasından Extras Set eklentisini indirelim.

İndirdiğimiz Extras Set arşiv dosyasını bir klasöre çıkarıp içerisindeki dosyaları Apache-

Jmeter ana dizine kopyalayıp, var olan dosyaları yenileri ile değiştirilmesine izin verelim.

Yukarıdaki anlatılan işlemleri doğru bir şekilde gerçekleştirdiğinizde Apache-Jmeter/bin dizini

içerisinde yer alan ApacheJMeter.jar uygulamasını çalıştırdığınızda aşağıdaki gibi değişikler

olduğunu göreceksiniz.

Örneğin Listener sekmesine tıkadığınızda seçeneklerin aşağıdaki gibi artığı görülmekte.

Page 10: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

9

HTTP(S) Test Script Recorder ile Yük(Stres) Testi Senaryosunun

Hazırlanması

Apache-Jmeter uygulamasının bulunduğu klasör içerisinden ApacheJmeter.jar

uygulamasını çalıştıralım.

Test Plan’a sağ tıklayıp Add sekmesinden Thread (user) alanından Thread Group

bileşenini seçelim.

Thread Group içerisinde yer alan daha önce temel adımlarda değindiğimiz parametreler alanlarını yük testimizin ihtiyaçları doğrultusunda düzenleyelim

Örneğin biz yük testimizi 100 sanal kullanıcıya 10 saniyede ulaşabilecek ve senaryoyu 4 defa tekrarlayacak şekilde düzenleyelim.

Thread Group bileşenine sağ tıklayıp Add sekmesinden Logic Controller içerisinden

Recording Controller’ı seçelim. Recorder Controller bileşenini kullanmamızın amacı,

yapacağımız istekleri bu bileşen aracılığı ile test senaryosu içerisine kayıt etmek.

Page 11: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

10

Thread Group bileşine sağ tıklayıp Add sekmesinden Timer içerisinden Constant

Timer’ ı seçelim.

Constant Timer bileşeni ile yapılan her bir istek arasındaki bekleme süresini belirleyebiliriz. Bu test senaryosu için yapılan istekler arasındaki bekleme süresi 300 mili saniye olarak belirlenmiştir.

WorkBench’e sağ tıklayıp Non-Test Elements sekmesinden HTTP(S) Test Script

Recorder bileşenini seçelim.

Page 12: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

11

HTTP(S) Test Script Recorder bileşeni bizlere tanımlayacağımız proxy aracılığı ile herhangi bir internet tarayıcısı ile gerçekleştriceğimiz istekleri, Thread Group altında yer alan Recoring Controller bileşeni içerisine eklenmesini sağlayacaktır.

HTTP(S) Test Script Recorder üzerinde yer alan Global Settings alanındaki Port numarasını proxy aracalığı ile dinlemek istediğimiz Port numarasını yazalım ve Test plan content altında yer alan Target Controller alanından yük testi senaryomuzu oluşturacağımız Recoring Controller’ın adını aşağıdaki gibi seçelim.

Bunlara ek olarak test senaryonuz içerisinde olmasını istemediğiniz, sayfalar içerisinde yer alan uzantıları URL Patterns to Exclude alanından belirleye bilirsiniz.

Page 13: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

12

Tarayıcımızın Ayarlar kısmından Bağlantı ayarlarından yukarıda tanımladığımız port

numarasını 8080 ve domain başlığına localhost veya 127.0.0.1 yazalım.

Yukarı anlatılan bütün ayarlar yapıldık sonra WorkBench’in altında yer alan HTTP(S)

Test Script Recorder seçilip Start butonu tıklanıp proxy ayarları yapılmış tarayıcı

üzerinden yük testi yapacağımız ilgili web sayfasının test senaryosu kapsamında ilgili

Page 14: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

13

alanlarında gezinerek test senaryosunu oluşturalım.

Kontrol Notu: Test senaryosunun kayıt edildiğinden emin olabilmek için Test Plan’ın

altında yer alan Thread Group’un altındaki Recording Controller sekmesi genişletelim

ve gezilen sayfalara ait ilgili linklere göz atalım.

Gelişmiş seçeneklerinin kullanımı adımında bahsediğimiz Jmeter-Plugin eklentisi ile

gelen grafiklerin ne anlama geldiğine kısaca göz atalım.

Therad Group’ sağ tıklayıp Add Listener sekmesinden aşağıda kullanım amaçları yer alan bazı bileşenleri ekleyelim;

Response Codes per Second: Yaptığımız isteklere karşılık gelen yanıt başlığındaki

mesajlarını istatistiksel dağılımını grafiksel olarak gösterir.

Response Latencies Over Time: Yapılan isteklere karşılık alınan yanıtların gecikme

(Latencies) değerlerinin istatistiksel dağılımını grafiksel olarak gösterir.

Response Times vs Threads: Yaptığımız isteklere karşılık gelen yanıtların süresini ve o

andaki kullanıcı sayısının istatistiksel dağılımını grafiksel olarak gösterir.

Hits per Second: Bir saniyede iletilen istek sayısının istatistiksel dağılımını grafiksel

olarak gösterir.

Page 15: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

14

Son adım olarak testimizi Ctrl + R veya Run sekmesinde Start butonuna basarak

başlatalım.

Örnek grafik çıktıları aşağıdaki gibidir:

Response Codes per Second

Page 16: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

15

Response Latencies Over Time

Response Times vs Threads

Page 17: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

16

Hits per Second

Page 18: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

17

HTTPS İsteklerinin Proxyden Geçirilmesi

Jmeter fonksiyonaliteleri içerisinde yer alan HTTP(S) Test Script Recorder kullanarak 443

portundan yayın yapan yani HTTPS ile iletişim kuran sayfaları proxy’den geçirmek için Jmeter

sertifikasını yüklemeniz gerekmetedir.

Apache-Jmeter Sertifikasının Web Tarayıcısına Yüklenmesi

Apache-Jmeter sertifikasını tarayıcımıza yüklemek için aşağıdaki adımları uygulayalım:

Öncelikle ApaceheJmeter.jar uygulamasını açalım ve WorkBench’e sağ tıklayıp Add->Non-

Test Elements->HTTP(S) Test Script Recorder’ı ekleyelim.

HTTP(S) Test Script Recorder üzerinde yer alan Start butonu tıklayalım ve karşımıza çıkan

uyarıda OK butonuna basalım,

Page 19: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

18

Oluşturulan sertifikayı Mozilla tarayıcıya yüklenmesi:

Tarayıcımızın Araçlar sekmesinde Seçenekler->Gelişmiş->Sertifikalar

bölümünden Sertifikaları Göster butonuna tıklayalım ve Yetkili sekmesine

tıklayalım.

Onay belgesi yöneticisinden İçe aktar butonuna tıklayarak ApacheJmeter’in kurulu

olduğu dizin içerisindeki bin klasörünün yolu gösterelim.

Page 20: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

19

ApacheJMeterTemporaryRootCA.crt dosyasını seçip yükleyelim.

Tüm alanları yukarıdaki gibi kutucukları işaretleyip onaylayalım. Artık HTTPS istekleri

HTTP(S) Test Script Recorder bileşeni aracılığı ile kaydedebilirsiniz.

Page 21: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

20

Komut Satırında Yük Testi Gerçekleştirme

Lokalde yapılacak yük (örneğin 1000 ve üzeri sanal kullanıcı ile) testinde performans

probleminin önüne geçmek için Jmeter, komut satırında parametrelerle çalıştırılmalı. Birden

fazla eklenen grafik bileşenleri yüksek kullanıcı sayısında arayüz kullanılarak yapılan

testlerde, yük testinin gerçekleştrildiği sunucuda bellek ve işlemci kullanımını büyük oranda

artırmaktadır.

Jmeter arayüz modunda istenilen test senaryosu ve grafikler ekledikten sonra yük testini

başlatmak yerine File sekmesinden Save Test Plan seçeneğini kullanarak test senaryosunu

Apache-Jmeter uygulamasının bulunduğu dizindeki bin dosyası içerisine kaydedelim.

Ayrıca Apache-JMeter’ın kullanacağı Ram miktarını aşağıdaki gibi konfigüre edelim:

Apache-Jmeter dizininde Bin klasörünün altında yer alan jmeter.bat dosyasına sağ tıklayıp

birlikte aç seçeneğini kullanarak ile notpad uygulamasıyla açalım.

Açılan sayfada “set HEAP” parametresini bulalım ve parametre içerisinde yer alan megabyte

cinsindeki bellek miktarını değiştirelim.

Örneğin: set HEAP=-Xms1024m –Xmx1024m

Yukarıda anlatılan ilgili konfigürasyonları yaptıktan sonra komut satırından Apache-Jmeter

dizini içerisindeki bin klasörüne ulaşalım.

Page 22: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

21

Komut satırına jmeter -t TestPlan.jmx -n -l c:\Test_Plan_Data.csv yazalım.

.jmx uzantılı dosyada test senaryosu yer almaktadır, c dizini altında

oluşacak Test_Plan_Data.csv dosyasına ise test sonuçları yazılacaktır.

.csv uzantılı dosya içerisindeki verileri işlemek için test bittikten sonra Apache-Jmeter

uygulaması ile oluşturduğumuz test senaryosunu açıp ilgili grafik bileşenlerine açarak

Browse seçeneğindenTest_Plan_Data.csv dosyasının bulunduğu yeri gösterelim.

Page 23: Jmeter ile uygulama katmanında yük testi gerçekleştirme

blog.btrisk.com @btrisk /btrisktv /btrisk

22

Hakkımızda

2009 yılında kurulmuş ve sadece bilgi güvenliği hizmetlerine odaklanmış olan BTRisk Bilgi

Güvenliği ve BT Yönetişim Hizmetleri bilgi güvenliği problemine yönetim kurulu seviyesinden

sistem odası uygulamasına kadar uzanan alanda çözüm üretmektedir.

BTRisk bilgi güvenliği problemini görünür hale getirerek algılanmasını, anlaşılmasını ve

dolayısıyla ele alınmasını mümkün hale getirmektedir.

BTRisk bilgi güvenliği problemine karşı geliştirdiği yaklaşımları gerçek hayat koşullarında test

etmiş ve uygulanabilir hale getirmiştir.

Bilgi güvenliği ve BT yönetişim hizmet alanlarımız aşağıdaki gibidir:

Pentest Hizmetleri

Bilgi Güvenliği ve BT Yönetişim Hizmetleri

Bilgi Güvenliği Operasyon Hizmetleri

Teknik Güvenlik Denetim Eğitimleri

Yönetişim ve Denetim Eğitimleri

Özgün ürünlerimiz aşağıdaki gibidir:

5651 Uyumlu Wi-Fi ve Kablolu Bilgi Güvenliği Risk Analizi Tek Kullanımlık Parola

Ağ Hotspot Çözümü ve Denetim Uygulaması Çözümü