Test Etmenin Önemi ve Apache JMeter Hakkında

Selamlar, şimdiye kadar projelerin test yapma kısmıyla hiç ilgilenmemiştim. İşe başladığım ilk ayda JMeter aracını kullanarak test yaptım.
Bir ürün kullanıma sunulmadan önce kurulduğu belli ortamlar var. Bunlardan birincisi test ortamı. İlk adımda sürümü çıkarılan ürün, test sunucularına kuruluyor. Burada kullanıcı tarafından yapılan istekler için beklenen cevaplar alınıyor mu diye bakılıyor. Kullanılan veriler gerçek değil elbette. Eğer sorunlar varsa, ürün daha test makinesindeyken düzeltiliyor ve yeni sürüm ile yine testler uygulanıyor. Sorun yoksa diğer ortamlar için de test durumları sonuçları kontrol ediliyor. Herşey sorunsuz ise gerçek ortama yeni sürüm kurulabilir hale geliyor.
Bu yazıda da JMeter’ın ne olduğundan, test tiplerinden ve temel test kavramlarından bahsedeceğim.
JMeter, başlangıçta web uygulamalarının test edilebilmesi için tasarlanmış, sonrasında farklı test fonksiyonlarını da gerçekleştirecek şekilde geliştirilmiş bir Apache Software Foundation projesidir. JMeter web uygulamalarında html, css ve js gibi statik dosyaları isteyerek test edebilmenin yanı sıra SOAP (Simple Object Access Protocol) ve REST (REpresentational State Transfer) bazlı içeriği dinamik olarak üretilen web servisleri de test etme amaçlı olarak da kullanılabilir. Gerçek kullanıcıların bir web uygulamasını kullanırken sunuculara yaptıkları web istekleri, JMeter yardımı ile sanki gerçek kullanıcılar bu kaynakları talep ediyormuşcasına simüle edilir.
JMeter’ın tamamı Java ile yazılmış olduğu için Java Runtime Environment (JRE) veya Java Development Environment (JDK) kurulu olmak kaydı ile Linux, Windows veya Mac işletim sistemine sahip herhangi bir bilgisayarda problemsiz çalıştırılabilmektedir.
Test Çeşitleri
* Fonksiyonel Test
Sunulan servisin fonksiyon olarak doğruluğunu test eder. Öğrenciler için sınav sonuçlarının sunulduğu bir web uygulamasında yapılması gereken fonksiyonel testlerden bazıları her bir öğrencinin kendi sınav sonucunu sorgulayabilmesi, başkasına ait sınav sonucunu sorgulayamaması, her bir öğrencinin sorgusunun sadece kendi sonucunu getirmesi ve sınava girmeyen bir öğrenci için sonuç dönülmemesi ile birlikte öğrencinin sınava girmediği bilgisinin dönülmesi olarak sıralanabilir.
* Yük Testi
Sunulan uygulamanın belirli bir yük altında nasıl davrandığını (cevaplarda gecikme süresi, kullanıcı deneyimi, vb) gözlemleyen test türüdür.
* Performans Testi
Sunulan uygulamanın planlanan performans kriterleri çerçevesinde çalışıp çalışmadığını test eder. Her bir uygulama kendisine belirli bir performans hedefi koymalıdır. Örneğin, bir web sitesi kaynak planlamasını (sunucu sayısı, sunucu özellikleri, network bant genişliği, vb) aynı anda ve/veya belirli bir süre boyunca (örneğin bir dakika) beklediği maksimum kullanıcı sayısına göre yapar. Performans testi, ilgili web sitesinin belirlenen performans kriterlerini gerçekçi bir şekilde simüle eder ve beklenen en fazla kullanıcı geldiğinde sistemin kararlı bir şekilde çalışabileceği güvence altına alınmış olur.
* Stres Testi
Planlanan maksimum kapasitenin üzerinde bir yük altında sistemin nasıl davrandığını ve en önemlisi hangi noktada kırıldığını gözlemlemek üzere yapılan testtir. Beklenen davranış uygulamanın planlanan kapasite üzerinde fonksiyonlarını kısmen gerçekleştirememesi veya tamamen gerçekleştirememesi fakat test bittikten sonra uygulamanın kararlı ve doğru sonuçlar üretebilecek durumda olmasıdır.
Test Kavramları
* Ramp-up Time (Tırmanma Süresi)
Yapacağımız testte sunduğumuz uygulamanın 1000 kullanıcı için test edilmek istendiğini düşünelim. Sistemde ilk anda 1000 kullanıcının 1000’inin birden içeriye alınması çok gerçekçi değildir. Ramp-up Time, 1000 kullanıcının test aracı tarafından kaç saniye içerisinde sisteme dahil edileceğini belirler. 1000 kullanıcı için Ramp-up Time 20 saniye olarak verildiğinde ilk saniye sonunda sistemde 50, ikinci saniye sonunda 100 kullanıcı girmiş olacak ve 20 saniye sonunda bütün kullanıcılar sisteme giriş yapmış olacaklardır.
* Think Time (Düşünme Süresi)
Sahip olduğumuz bilgisayarlar biz insanların aksine çok hızlı bir şekilde işlem yapabilmektedirler. Gerçek kullanıcıların iki test adımı arasında mouse veya klavye ile giriş yapmaları bir miktar süre gerektirir. Test senaryosunda bu kullanıcı davranışını simüle etmek için iki adım arasına bir Timer konulur ve sanal kullanıcının (test kullanıcısı) iki adım arasında bir miktar beklemesi sağlanır. İki test adımı arasında kullanıcı için tanımlanan bekleme süresi Think Time olarak adlandırılır. Örneğin, bir HTML formununun bulunduğu sayfayı yükleyen gerçek kullanıcı, formu submit etmeden önce doldurmak için belirli bir süreye ihtiyaç duyacaktır.
* Loop Count (Döngü Sayısı)
Sisteminize 10 dakika içerisinde 100K kullanıcının gireceğine ve bir dakika boyunca işlem yapacağına göre plan yaptığınızı varsayalım. Hazırladığınız test senaryosunu 100K kullanıcıyı Ramp-up Time 10 dakika olarak sisteme sokacak şekilde hazırlamak yerine 1 dakikada 10K kullanıcıyı sisteme sokup işi biten kullanıcının sisteme tekrar tekrar (toplam 10 kere) girerek bütün adımları tekrarlamasını sağlayabilirsiniz. Loop Count buradaki her bir test kullanıcısının sisteme toplam giriş sayısıdır.
Jmeter Arayüzü ve Temel Kullanımı

Yukarıda Jmeter’ın ilk açıldığındaki görüntüsü var.
Örnekleyici(sampler) ile kolayca bir test ekleyebiliriz. (Add->Sampler->HTTP Request gibi)
Bir test eklediğimizde ise adı, isteğin iletileceği sunucu adı ya da ip’si ve web sunucusundan istenecek bölüm(path) doldurulmalıdır.

Testin sorgu içeriğini de doldurulduktan sonra çalıştırıldığında aşağıdaki gibi testlerin düzgün çalışıp çalışmadıgına bakabilir ve testlerde düzeltmeler yapabilir.

Kolaylıklar.