Tüm yazılar
test-automation

TestFly Bölüm 9: Java ile K6 ve Gatling Yük Testi — Sıfır Bağlam Değişimi

TestFly 1.1.0 ile gelen dahili Gatling ve K6 yük testi motorunu, @LoadTest deklaratif anotasyonunu ve P95 SLO kalite kapılarını keşfedin.

10 Eylül 20263 dk okuma
TestFly Bölüm 9: Java ile K6 ve Gatling Yük Testi — Sıfır Bağlam Değişimi

Özet: TestFly 1.1.0 sürümü, Gatling ve Java sanal iş parçacıkları (virtual threads) ile güçlendirilmiş dahili yük ve performans testi yeteneklerini sunar. SDET'ler artık harici araçlara ihtiyaç duymadan doğrudan standart TestNG veya JUnit 5 test sınıfları içerisinde yüksek eşzamanlı yük senaryoları yazabilir, parametrelendirebilir ve doğrulayabilir.


Fonksiyonel Testler ile Yük Testleri Neden Aynı Çatıda Olmalı?

Geleneksel yazılım geliştirme süreçlerinde performans testleri hep son aşamaya bırakılır ya da JMeter gibi ayrı kullanıcı arayüzlü araçlara hapsedilir. Bu ayrım şu sorunları doğurur:

  • Fonksiyonel testlerde kullanılan test verileri ve auth mekanizmaları yük testleri için sıfırdan tekrar yazılır.
  • Performans testleri sadece canlıya çıkış öncesi nadiren koşulur (Shift-Left ilkesine aykırıdır).
  • CI/CD hatlarında farklı araçların çıktılarını birleştirmek ve kalite kapıları kurmak zorlaşır.

TestFly bu engeli ortadan kaldırarak mühendislerin aynı BaseTest altyapısı, testfly.yml ayarları ve assertion kütüphanesiyle yük testleri yazmasını sağlar.


TestFly ile Yük Testi Nasıl Yazılır?

TestFly iki farklı yazım yaklaşımı sunar:

1. @LoadTest ile Deklaratif Yaklaşım

Herhangi bir test metodunu @LoadTest anotasyonu ile işaretleyerek eşzamanlı sanal kullanıcıları ve artış (ramp-up) sürelerini belirleyin:

java
package io.testfly.examples.loadtest;

import io.testfly.loadtest.LoadTest;
import io.testfly.test.BaseTest;
import org.testng.annotations.Test;

public class BasitYukTesti extends BaseTest {

    @Test
    @LoadTest(users = 100, rampUpSeconds = 15, durationSeconds = 60)
    public void yukAltindaOdemeHizmetiTesti() {
        apiClient().post("/api/checkout")
            .body("{\"cartId\": 1024}")
            .send()
            .assertStatus(200);
    }
}

2. LoadScenario ile Akıcı (Fluent) DSL Yaklaşımı

Çok adımlı kullanıcı gezintilerini ve dinamik veri besleyicilerini (feeder) kodlamak için akıcı DSL kullanılır:

java
package io.testfly.examples.loadtest;

import io.testfly.loadtest.LoadScenario;
import io.testfly.loadtest.LoadTestFeeder;
import io.testfly.test.BaseTest;
import org.testng.annotations.Test;

public class GelismisGezintiTesti extends BaseTest {

    @Test
    public void kullaniciAlisverisGezintisi() {
        LoadTestFeeder kullanicilar = LoadTestFeeder.csv("testdata/users.csv");

        LoadScenario.scenario("Katalog Arama ve Sepete Ekleme")
            .feed(kullanicilar)
            .step("Katalog Arama", client -> client.get("/products?q=ayakkabi").send().assertStatus(200))
            .pause(1000)
            .step("Sepete Ekle", client -> client.post("/cart/items").body("{\"id\": 42}").send().assertStatus(201))
            .users(500)
            .rampUp(20)
            .run();
    }
}

Performans Kalite Kapıları (SLO) Nasıl Denetlenir?

Ölçümlenen veriler otomatik olarak P50, P90, P95 ve P99 yüzdeliklerine dönüştürülür:

Yüzdelik (Percentile)AnlamıTipik Hedef (SLO)
P50 (Medyan)İsteklerin %50'sinin tamamlanma süresi< 150 ms
P90İsteklerin %90'ının tamamlanma süresi< 350 ms
P95İsteklerin %95'inin tamamlanma süresi< 500 ms
P99En yavaş %1'lik kuyruk gecikmesi< 1200 ms

Sözleşmelerinizi kod üzerinden doğrulayarak performans gerilemelerinde (regression) CI derlemesini otomatik kırabilirsiniz:

java
import static io.testfly.loadtest.LoadTestAssert.*;

assertP95Below(Duration.ofMillis(450));
assertErrorRateBelow(0.01); // %1'den az hata oranı

SSS

TestFly yük testi için JMeter veya harici bir kuruluma ihtiyaç duyar mı?

Hayır. TestFly, Gatling motorunu ve Java sanal iş parçacıklarını dahili olarak çalıştırır; harici hiçbir binary kurulumu gerekmez.

TestFly yük testleri CI/CD pipeline'ında çalıştırılabilir mi?

Evet. GitHub Actions, Jenkins ve Bitbucket Pipelines üzerinde headless olarak çalışır. Yüksek hacimli yükler için Docker ve Kubernetes podları ile yatayda ölçeklenebilir.

API yetkilendirme (Bearer token) yük testlerine dahil edilebilir mi?

Evet. ApiClient üzerinden alınan token veya oturum çerezleri yük testi senaryosundaki tüm adımlara otomatik enjekte edilir.

#TestFly#Load Testing#Gatling#K6#Performance Testing#Java#SDET
Paylaş X LinkedIn

Yorumlar

  • Henüz yorum yok. İlk yorumu sen yaz.