Gatling ile Yük Testi

Oğuz Zarcı
Devops Türkiye☁️ 🐧 🐳 ☸️
5 min readJul 18, 2019

Herkese merhaba, gatling kullanarak mini bir yük testi uygulaması yazacağız. Bunun için gerekli araçlar;

  • Gatling 2.3.0
  • Maven
  • Fiddler web proxy
  • Java 1.8
  • Scala 2.12.3
  • IntelliJ IDEA

Fiddler ile performans testi yapacağımız sayfanın header bilgilerine kolaylıkla ulaşabiliriz. Böylelikle scriptlerimizi yazarken bize büyük bir kolaylık sağlıyor.

Performans testimizi github üzerinden yapacağız. Akışımız şöyle olacaktır;

Kullanıcı ilk anasayfa ondan sonra login’e gidecek. Başarılı olursa profil sayfasına gelecek ve logout olacak. Eğer başarısız olursa tekrar anasayfada kalacak.

İlk olarak projemizi oluşturalım. Komut satırımızı açarak aşağıdaki komutları yazarak devam ediyoruz.

  • mvn archetype:generate
  • gatling
  • 1
  • 19
  • com.oguzzarci.gatlingtest
  • GatlingSimpleApp
  • 1.0
  • package
  • Y

Evet artık projemiz hazır.

Şimdi scriptlerimi yazmaya başlayabiliriz. İlk olarak scala klasorüne sağ tuş new -> package diyerek scenarios adında bir package ekliyoruz. Buraya yük testinde koşacağımız senaryoları ekleyeceğiz. Sonra tekrar services adında başka bir package ekliyoruz. Burada ise servislerimizi yani anasayfa login logout gibi adımları ekleyeceğiz. Böylelikle test scriptlerimiz daha düzenli olacak.

İlk olarak servislerimizi yazacağız. Services package üzerine gelip sağ tuş new diyerek “HomePage” adında yeni bir Package oluşturuyoruz.Daha sonra HomePage package gelip sağ tuş ile yeni bir Package Object ekliyoruz.

Daha sonra “Login” ve “Logout” adında iki tane daha servis ekliyoruz.

HomePage dosyasını açıyoruz ve ilk olarak;

Fiddler programımızı açıyoruz ve github.com sitesine tarayıcı üzerinden gidiyoruz.

Fiddler header bilgilerini almamızda çok kolaylık sağlıyor. Şimdi anasayfamızın header bilgilerine ulaştık scriptimizi yazmaya başlayabiliriz.İlk olarak importlarımızı yapıyoruz;

import io.gatling.core.Predef._
import io.gatling.http.Predef._

Header bilgilerini Map tipinde tanımlamamız gerekiyor. Header bilgilerimizi HomePage.scala dosyamıza aşağıdaki gibi ekliyoruz.

Şimdi ise execute etmemiz için fonksiyonumuzu yazıyoruz.

.check (status is 20) = Fiddler attığımız requestleri takip ettiğimizde Result olarak 200 döndüğünü görüyoruz. Bu değişiklik elbette gösterebilir. Sizde yaptığınız her requestin result olarak ne döndüğünü kontrol ederek “.check” de dönen değeri kontrol etmeniz gerek.

requestName = Sonuçlarımızı daha rahat incelebilmemiz için verdiğimiz bir isim.

Headers = Home sayfasının header bilgilerini yazıyoruz.

.get = Sayfaya attığımız requestin tipi. Örn: post

Artık HomePage.scala sayfamız hazır. Şimdi diğer servislerimizi yazalım. Geriye login ve logout kaldı. Sıra ile gidelim sırada login servisimiz var. Yine HomePage sayfamızda yaptığımız mantık ile kodlarımızı yazıyoruz.

İlk olarak headerlar. Burada aşağıdaki 4 requestin header bilgilerini alacağız.

Headerlarımızı yazdık;

Şimdi execute kısmına geliyoruz. Requestlerimizi sırasıyla yazıyoruz; Session requesti post metodu ile bir kaç tane parametre yolluyor. Bunlar kullanıcı adımız ve şifremiz gibi.

Fiddler üzerinden bunları rahatça görebiliriz.

authenticity_token = Bu token github tarafından otomatik oluşturuluyor. Bunuda /login requestinde otomatik olarak alacağız. Bunun için cssSelector’u kullanacağız. /login requestinin fiddler result değerine baktığınızda authenticity_token isimli bir input olacaktır. Arama kısmında arayarak daha hızlı bulacaksınızdır.

check(css("input[name=authenticity_token]", "value").saveAs("authenticity_token"))

cssSelector ile bu inputun value değerini alıp authenticity_token adlı bir değişkene atadık. Şimdi bu değişkenimizi /session requestimizde kullanalım.

İşte post ile gönderdiğimiz parametreler. Şimdi bu parametreleri scriptimizde nasıl yazıyoruz onu görelim.

✓ karakterinin yerine Hex kodunu yazalım.

Hex Kodu : ✓

oguzzarci requestimizde yine authenticity_token geliyor bunuda logout olurken kullanacağız.

val LogoutToken: String = """${LogoutToken}"""

LogoutToken adında bir public değişken tanımlıyoruz ve gelen yeni token’ı bu değişkenimize alıyoruz.

Login servisimizde hazır, geriye sadece logout servisimiz kaldı.

Logout servisimizde bu token değişkenini almamız gerek. Onuda bu şekilde hızlı bir şekilde alabilirsiniz.

val LogoutToken: String = Login.LogoutToken

Evet logout servisimizde hazır. Böylece tüm servislerimizi tamamladık.

Tüm servislerimiz hazır ve bu servislerimizi oluşturacağımız senaryoda tanımlayıp testimizi koşacağız.

İlk olarak;

scenarios klasörüne sağ tuş new diyerek LoginScenario adında scala class dosyası ekliyoruz.

Bağlantı adresimizi ve protokolü tanımlıyoruz. Daha sonra senaryomuzu execute etmek için fonksiyonumuzu yazıyoruz. Senaryo dosyasımızın en sade hali böyle olacak.

Şimdi servislerimizi çağırmaya başlayabiliriz.

Evet servislerimizi çağırdık. Sıra testimizi koşmaya geldi. Koşmadan önce aşağıdaki ayarı yaparsanız log kısmında result olarak request attığınız sayfaların html çıktılarını görebilirsiniz. Bu size log okurken testinizin ne kadar doğru çalıştığı hakkında büyük kolaylık sağlayacaktır.

Testimizi koşmak için Engine sağ tuş ve Run ‘Engine’ dememiz yeterli olacaktır.

Daha sonra aşağıdaki ekran gelecek. İster 1 enter yapın istersenize senaryonuzun ismini yazıp enter yapın.

Select run description (optional) = Bu kısmı enter diyerek boş geçebilirsiniz.

Testimiz başarıyla sonuçlandı. Tüm requestlerimiz başarılı bir şekilde atılmış durumda.

Ek olarak gatling bizim için daha detaylı bir sayfa daha oluşturuyor. Onada bakalım hemen;

Her türlü sorunuz için, bana LinkedIn hesabımdan ulaşabilirsiniz.

SourceCode : https://github.com/oguzzarci/GatlingYukTesti

--

--