TR | JMeter ile Stres Testi
Uygulamaların (web siteleri, web servisleri vb) gerçek kullanıcılar ile etkileşime geçmeden önce bazı öngörülen performans değerlerine ulaşıp ulaşmadığını tespit etmek ve kullanılabilirlik sınırlarını belirlemek için yapılan birtakım testler, yük, stress ve performans testi olarak adlandırılır. Maksimum sayıdaki kullanıcı ile periyodik bir şekilde sisteme yüklenilerek bir kaos ortamı yaratılır. Bu ortamda sistemin bu tür durumlara verdiği tepki ölçülür.
Apache JMeter, performans ölçmek için dizayn edilmiş açık kaynaklı bir yazılımdır. %100 java koduyla yazılmış bu uygulama, ilk başta sadece web uygulamalarını test etmek için tasarlanmış, daha sonra ek testlerle desteklenmiştir. Apache JMeter hem statik hem de dinamik kaynakları test etmek için kullanılabilir. Örnek: Servlet, Perl script, Java nesnesi (Java Object), veri tabanı sunucusu (DBMS), FTP sunucusu v.b. Bir sunucu üzerinde birden fazla bağlantı açıp aynı zamanda birçok bağlantı yapılıyormuş gibi gösterebilmektedir. Bu sonuçları analiz etmek içinde grafiksel raporlama imkanları vardır.
Apache JMeter Özellikleri:
1- Birçok farklı sunucuyu test edebilir: Web-HTTP, HTTPS, SOAP,JDBC yoluyla veritabanı,LDAP,JMS,Mail-POP3, IMAP
2- %100 Java dilinde yazılmış olduğundan platformdan bağımsız çalışabilir.
3- Swing package’i kullanıyor. (derlenmiş JAR javax.swing.* package’leri içeriyor)
4- Çok dizililiği (multithreading) kullandığından, koşut olarak birkaç işlev yapılabilir, çok kullanıcılı bir ortamı simule edebilir.
5- Kullanıcı arayüzü (GUI) kullanışlı olup, daha hızlı işlemekte ve daha doğru zamanlamayı (precise timing) sağlıyor.
6- Önbelleğe almayı (caching) kullanıp, sonuçları çevrim dışı (offline) olarak görme/analize etmeye olanak sağlıyor.
7- Genişletilebilirdir:
* Takılabilir örnekleyiciler (pluggable samplers) ile sonsuz test olanakları sağlıyor.
* Takılabilir Zamanlayıcılar (pluggable timers) ile birkaç yük istatistiği (loadstatistics) seçilebilir.
* Veri analizi ve görselleştirme takılabilirler (visualization plugin) ile genişleyebilirliği (extendibility) ve kişiselleştirmeyi (personalization) sağlamakta.
* İşlevler (JavaScript’i içermekte) bir test için devingen (dynamic) girdi oluşturmakta kullanılabilir.
* Yazılı yönergeli örnekleyiciler (scriptable samplers)
JMeterı Çalıştırma:
JMeter’i kullanmak için http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi adresinden son sürümüni indirmeliyiz. İndirdiğimiz dosyanın içinde “bin” klasöründe jmeterw.cmd (Windows için) veya jmeter (Linux için) çalıştırmalıyız.
JMeter Http Uygulaması:
JMeterı açınca karşımıza hazır bir test planı gelir. İlk olarak test planımızda kullanıcıları oluşturmak için Thread grup ekleyelim. 100 kullanıcı oluşturduk.Ramp-Up Periyot değeri farklı varyasyonlarda testler için önemli bir değer. Saniye türünden girilen değer ile kullanıcı yükünün ne kadar sürede artarak devam edeceğinin belirtilmesini sağlar. Test Planı->Add->Threads(Users)->Thread Group
Daha sonra test edeceğimiz Url’ i belirtmek için bir Sampler ekledik. Http Request tipinde bir sampler ekledik. Server name kısmına test edeceğimiz siteyi yazdık. Thread Group->Add->Sampler->Http Request
Sonuçları görebilmek için rapor grafiği ve sonuç tablosu oluşturalım. Daha farklı şekillerde sonuç almak istersek birçok Listener seçeneği mevcut. Test Planı->Add->Lİstener->Responce Time Graph
Test Planı->Add->Lİstener->View Result in Table
Sonuçlar,
Komut Satırı Kullanımı
Komut satırından kullanımı -n (non-gui) opsiyonu ile birlikte çalışmakta. İstenirse önceden GUI ile hazırlanmış bir JMX dosyasını -t parametresi ile belirterek yapılabilir. Bunun için önceden oluşturulmuş bir test JMX dosyası olması gerekmektedir. Yada jmeter-server’i daemon olarak çalıştırıp, uzaktaki bir makinadan GUI ile oluşturulan test JMX dosyasını sunucuya GUI üzerinden bağlanıp yollayabiliriz.
Örnek olarak: java -jar /path/ApacheJMeter.jar -n -t /path/Test.jmx
Birkaç parametre ve açıklamaları aşağıdadır:
-n Komut satırından GUI olmadan çalışmasını belirtir
-t Yolu ile beraber Test planının olduğu JMX dosyasının adını belirtmeyi sağlar
-l Yapılan test sırasında örnek taleplerin çıktılarını yazdığı JTL log dosyasının adı
-j Jmeterin çalışırkenki durumları bildirdiği log dosyasının adı
-r JMeter “remote_hosts” opsiyonu ile belirtilen uzak sunuculara testi başlatma komutunu bağlanıp gönderir
-R Uzak sunucuların listesini verir
-P proxy server port
Kullanıcı Tanımlı Değişkenler
Jmeter’da birçok alanda test yazarken farklı yazım şekillerini kullanırsınız. Jmeter statik ve dinamik yapıları test etmede kullanılırken test içeriği değişme olasılığı yüksektir. Çoğu kez tekrarladığınız yapıları bir değişkende toplamak veya değiştirmeye kalktığınızda tek bir yerden yönetmek testlerin esnek olması açısından önemlidir. Bunun için Jmeter’da kullanıcı tanımlı değişkenler kullanılmalıdır.
Kullanıcı tanımlı değişkenleri eklemek için TestPlan’a veya Thread Group’dan hangisinde kullanmak istiyorsanız ona ekleyebilirsiniz. Her bir Thread Group’un kendi değişkenleri ayrı tanımlanmasını isterseniz ayrı ayrı ekleyebilirsiniz. Thread Group’a bir UserDefinedVariables ekleyelim, bunun için Thread Group’a sağ tıklayalım ve Add > Config Element > User Defined Variables seçelim. Değişkenleri tanımlayabileceğimiz bir alan çıkacak. Burada Add’a tıklayarak yeni değişkenleri ekleyebiliriz.
Fonksiyon Kullanımı JMeterda esnek ve sürdürülebilir test planları yaratmak için kullanışlı fonksiyonlar mevcuttur. Fonksiyon görünümü: ${__functionName(var1,var2,var3)} Örneğin, threadNum thread numarasını döndürür. FiletoString bir dosyayı okur. XPath, bir XML dosyasını okur ve XPath ile eşleştirir. machineName local host adını döndürür..