Tüm yazılar
test-automation

TestFly Bölüm 11: Selenium 4 CDP ile Ağ Manipülasyonu ve API Mocking

TestFly ve Selenium 4 CDP ile harici proxy olmadan ağ hızını yavaşlatma (3G/Offline), API yanıtlarını mock'lama ve konsol JS hatalarını yakalama rehberi.

10 Eylül 20262 dk okuma
TestFly Bölüm 11: Selenium 4 CDP ile Ağ Manipülasyonu ve API Mocking

Özet: Ağ isteklerini engelleme ve sahte yanıtlarla besleme (mocking) uzun süre yalnızca Playwright'a özgü bir avantaj olarak görüldü. TestFly, Selenium 4'ün Chrome DevTools Protocol (CDP) yeteneklerini Java'da soyutlayarak harici proxy sunucularına gerek kalmadan yavaş ağ simülasyonu (3G / Offline), API yanıt stubbing ve otomatik konsol JavaScript hata denetimi sunar.


Ağ Manipülasyonu Modern Web Testlerinde Neden Zorunludur?

Tek sayfalı modern web uygulamaları (SPA); onlarca mikroservis, ödeme ağ geçidi ve harici analitik servisiyle iletişim kurar. Geleneksel Selenium testlerinde:

  • Ödeme servisinin 500 hatası vermesi gibi uç senaryoları test etmek için backend veritabanlarına müdahale etmek veya hantal proxy araçları (BrowserMob gibi) kurmak gerekirdi.
  • Üçüncü parti harici servislerin gecikmesi testleri kararsız (flaky) hale getirirdi.
  • Tarayıcı konsolunda patlayan JavaScript hataları, DOM'daki bir buton bozulmadığı sürece fark edilmezdi.

TestFly, Selenium 4'ün yerel CDP altyapısını kullanarak HTTP trafiğini doğrudan tarayıcı seviyesinde manipüle eder.


Yavaş Bağlantı (3G) ve Çevrimdışı (Offline) Mod Nasıl Simüle Edilir?

Mobil ve zayıf bağlantı koşullarında uygulamanızın davranışını test etmek kritik önem taşır:

java
package io.testfly.examples.network;

import io.testfly.network.NetworkSpeed;
import io.testfly.test.BaseTest;
import org.testng.annotations.Test;

public class AgManipulasyonTesti extends BaseTest {

    @Test
    public void cevrimdisiUyariKartiGoruntulenmeli() {
        open("/dashboard");

        // 1. Ağ bağlantısını anında kes
        network().emulateOffline();

        // 2. Ağ gerektiren işlemi yap
        find("#sync-btn").click();

        // 3. Çevrimdışı uyarısını doğrula
        assertThat(find("#offline-alert")).hasText("İnternet bağlantınız koptu");

        // 4. Ağı normale döndür
        network().resetThrottling();
    }

    @Test
    public void yavas3gYuklenmeAnimasyonuGosterilmeli() {
        // Gerçekçi 3G gecikmesi: 2000ms gecikme, 400kbps indirme hızı
        network().throttle(NetworkSpeed.SLOW_3G);

        open("/raporlar");
        assertThat(find(".loading-spinner")).isVisible();
    }
}

Arka Uç API Yanıtları Nasıl Mock'lanır (Stubbing)?

Backend servisine hiç dokunmadan belirli bir uç noktadan dönen HTTP durum kodunu veya JSON gövdesini manipüle edin:

java
@Test
public void odemeHatasiDurumundaKullaniciUyarisi() {
    // Ödeme servisine giden POST çağrısını yakala ve 500 dön
    network().intercept(rota -> rota
        .matchingUrl("**/api/v1/charge")
        .respondWith(500, "{\"error\": \"Ödeme servisi geçici olarak hizmet dışı\"}")
    );

    open("/checkout");
    find("#pay-btn").click();

    // Kullanıcıya gösterilen hata mesajını doğrula
    assertThat(find(".error-toast")).hasText("Ödeme servisi geçici olarak hizmet dışı");
}

Sessiz JavaScript Konsol Hataları Nasıl Yakalanır?

DOM elemanları doğru görünse bile arka planda fırlatılan kritik JavaScript hataları kullanıcı deneyimini bozar. TestFly'ın ConsoleErrorCollector modülü tarayıcı konsolunu sürekli dinler:

yaml
browser:
  captureConsoleErrors: true
  failOnConsoleErrors: true # Ciddi JS hatalarında testi otomatik başarısız say

Kritik bir hata (Uncaught TypeError, kayıp script dosyaları) oluştuğunda TestFly test raporuna hata yığınını ekler ve testi anında patlatır.


SSS

TestFly ağ engelleme için BrowserMob gibi harici bir proxy sunucusuna ihtiyaç duyar mı?

Hayır. TestFly doğrudan Chrome DevTools Protocol (CDP) WebSocket hattı üzerinden tarayıcı motoruyla konuşur; harici port veya sertifika kurulumu gerektirmez.

CDP ağ manipülasyonu headless tarayıcılarda çalışır mı?

Evet. CI/CD sunucularında çalışan headless Chrome/Chromium tarayıcılar CDP protokolünü eksiksiz destekler.

Yanıt başlıkları ve durum kodları özelleştirilebilir mi?

Evet. respondWith() metodu üzerinden istediğiniz HTTP durum kodunu (401, 403, 500, 503) ve JSON başlıklarını döndürebilirsiniz.

#TestFly#Selenium#CDP#Mocking#Network Interception#Java#SDET
Paylaş X LinkedIn

Yorumlar

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