Ana içeriğe geç
Java 21 · Selenium 4 · TestNG · JUnit 5 · Cucumber · AI/MCP

Gürültüden uzak test otomasyonu

AgenticCheckoutTest.java
public class AgenticCheckoutTest extends BaseTest {
@Test
public void autonomousCheckoutFlow() {
open();
// 1. Goal-oriented action compiled & frozen to .testfly/action-cache.json
act("Log in as 'standard_user', add Backpack to cart, proceed to checkout");
// 2. Zero-shot semantic assertion on live DOM (anti-throttle protected)
assertThatPage().satisfiesAi("Checkout overview displays 1 item with valid tax");
assertThatPage().violatesAi("Error banner, stock shortage, or checkout failure");
}
}

Modern mühendislik ekipleri için Java test otomasyon SDK'sı. TestFly tarayıcı oturumları, API testleri, raporlama ve isteğe bağlı AI araçlarını birleştirir. Ayrı Node.js MCP köprüsü kod üretimi ve proje oluşturma araçları sunar.

1Tek Maven Bağımlılığı
1.0.7SDK Kaynak Sürümü
0Önbellek İsabetinde LLM Çağrısı
6Ayrı Köprü Aracı
Öncesi / Sonrası

Tesisat kodları değil,
gerçek testler yazın

TestFly'ın kırılgan explicit wait'leri, çöken seçici yamalarını ve saatler alan oturum kurulumlarını nasıl tek satırlık temiz ve dirençli otomasyona dönüştürdüğünü görün.

Explicit wait karmaşası, stale element hataları ve JS executor yerine akıllı bekleme ve aksiyon kontrolü

Geleneksel Selenium14 satır · 2 explicit wait · StaleElement riski
CheckoutTest.java
// Geleneksel Selenium: Kırılgan explicit wait ve JS scroll hilesi
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement btn = wait.until(
ExpectedConditions.elementToBeClickable(By.id("checkout")));
((JavascriptExecutor) driver).executeScript(
"arguments[0].scrollIntoView(true);", btn);
btn.click();
// Kırılgan XPath metin eşleşmesi ve manuel görünürlük kontrolü
WebElement status = wait.until(
ExpectedConditions.visibilityOfElementLocated(
By.xpath("//span[contains(@class,'order-badge')]")));
Assert.assertEquals(status.getText().trim(), "Confirmed");
TestFly2 satır · Yerleşik akıllı bekleme
CheckoutTest.java
// TestFly: Otomatik kaydırma, aksiyon kontrolü ve akıllı bekleme
find("#checkout").click();
// Otomatik bekleyen web öncelikli semantik doğrulama
assertThat(getByRole(Role.STATUS))
.isVisible()
.hasText("Confirmed");
Öne Çıkan Özellikler

İhtiyacınız olan her şey,
gürültüden uzak

Tek bağımlılık. Sıfır zorunlu ayar. BaseTest'i extend ettiğiniz anda kurumsal güçte test altyapısı hazır.

Sıfır Konfigürasyon & Boilerplate

BaseTest'i extend edin, @Test metodunuzu yazın. Driver yaşam döngüsü, ThreadLocal izolasyonu, akıllı beklemeler, otomatik retry ve raporlama tamamen yönetilir.

class CheckoutTest extends BaseTest {
@Test
void completeOrder() {
open();
find("#checkout").click();
assertThat(find("[role='alert']"))
.isVisible();
}
}

Agentic Testing & Compile & Freeze

act("...") ile doğal dil hedeflerini çalıştırın. İlk koşuda somut Selenium adımlarına derlenir, .testfly/action-cache.json dosyasına dondurulur ve önbellek isabetlerinde yeni bir LLM isteği olmadan yeniden oynatılır.

// First run compiles; subsequent runs replay frozen cache
act("Delete the first item in the cart and checkout");
// Dynamic semantic intent locator
byIntent("Proceed to payment").click();

AI Self-Healing & Otomatik Git Yaması (Auto-PR)

Seçiciler kırıldığında DomPruner DOM ağacını 8K token altına budar, LLM semantik yedeği bulup testi kurtarır. Kalıcı hatalarda ise target/remediations/*.patch Unified Git Diff dosyası üretir.

Semantik Doğrulamalar (satisfiesAi & violatesAi)

Kırılgan metin eşleşmeleri yerine LLM muhakemesiyle sayfa veya element durumunu doğrulayın. Her doğrulama DOM üzerinde tek bir AI değerlendirmesi yapar; sağlayıcı kota sınırları yine geçerlidir.

assertThatPage()
.satisfiesAi("Order confirmation summary shows valid total");
assertThatPage()
.violatesAi("500 server error or session expired");

Paydaşların Gerçekten Okuduğu HTML Rapor

Başarı oranı göstergesi, Flakiness Radar, adım adım ekran görüntüleri, video kayıtları, filtrelenebilir hatalar ve karanlık mod desteğiyle tam teşekküllü HTML paneli.

Ayrı MCP Köprüsü & Kod Üretimi

Java SDK’dan ayrı Node.js köprüsü altı MCP aracı sunar. Canlı tarayıcı denetimi için Playwright MCP kullanın; gözlemlenen adımları Java test koduna dönüştürüp çıktıyı doğrulayın. Canlı kayıt henüz yok.

# From the separate testfly-mcp checkout
node bin/testfly-mcp.js --help
# Configure the script as an MCP server; see the CLI guide.
SDK Kaynak Sürümü · 1.0.7

Tek Bir Bağımlılıkla Tüm Gücü Açın

Bağımlılık karmaşasına ve versiyon çakışmalarına son: Selenium 4, akıllı beklemeler, native CDP video kaydı, AI analiz motoru ve test çalıştırıcı köprüleri tek bir standart JAR altında çakışmasız gelir.

Java 21+Yayın doğrulaması bekleniyorSıfır ÇakışmaApache 2.0
pom.xml
<dependency>
<groupId>io.github.hakanngul</groupId>
<artifactId>testfly</artifactId>
<version>1.0.7</version>
</dependency>

SDK Yetenekleri

16 SDK yeteneği. Bazıları etkinleştirme, desteklenen tarayıcı, ek bağımlılık veya harici servis gerektirir.

🎥

Test Çalışması Video Kaydı

Chromium’da CDP, diğer sürücülerde ekran görüntüleriyle kayıt; başarısız testler MP4 veya GIF olarak saklanabilir.

YAML ile etkinleştirin
📊

ReportPortal & Allure Entegrasyonu

Allure sonuç dosyaları üretin veya ReportPortal sunucusuna TestNG/JUnit/Cucumber agent ile raporlayın.

İsteğe bağlı agent / servis
🗄️

Veritabanı Doğrulama (DbClient)

JDBC üzerinden parametreli SQL sorguları ve satır doğrulamaları çalıştırın.

JDBC sürücüsü + bağlantı
🎯

TestRail & Jira Xray Senkronizasyonu

İşaretli testlerin sonucunu ve hata açıklamasını TestRail veya Xray’e aktarın; ekran görüntüsü aktarımı dahil değildir.

Servis + erişim bilgisi
♿

axe-core ile Erişilebilirlik (a11y)

Akışın gerekli noktalarında accessibility().run() ile axe-core WCAG taramaları ve ayrıntılı ihlal raporları çalıştırın.

JS destekli tarayıcı
📈

Core Web Vitals & Performans

Desteklendiği tarayıcılarda LCP, FCP, TTFB ve CLS metriklerini toplayıp performans eşiklerini doğrulayın.

Tarayıcı desteğine bağlı
📋

@TestData Veri Sürücüsü (Excel/CSV)

Excel (.xlsx), CSV, JSON veya veritabanı satırını yükleyin; getTestData() ya da tipli anahtar erişimiyle okuyun.

Excel için Apache POI
🌐

CDP Ağ & API Taklidi

Chromium üzerinde CDP ile ağ isteklerini yakalayın ve mock yanıt döndürün.

Chrome / Edge gerekli
🔁

Flakiness Radar & Karantina

Önceki koşulara göre kararsızlığı puanlayın; testfly-quarantine.yml ile seçilen testleri atlayın.

Geçmiş koşu verisi
🔐

@PreCondition Oturum Önbelleği

Aynı iş parçacığında çerez ve localStorage durumunu saklayıp sonraki testlerde geri yükleyin.

Thread-local önbellek
📧

E-Posta & OTP Doğrulama

Mailhog, Mailtrap, Outlook Graph veya IMAP posta kutularından OTP ve bağlantıları okuyun.

Posta servisi; IMAP için ek bağımlılık
📸

Görsel Regresyon Testleri

Önceden onaylanan ekran görüntüleriyle piksel farkını ve toleransı doğrulayın.

Baseline gerekir
🕐

Zaman Taklidi (TestClock)

İstemci tarafındaki Date saatini taklit edin; navigasyonlar boyunca kalıcılık Chromium CDP’ye bağlıdır.

Tarayıcıya bağlı
🪜

Adım Günlüğü (StepLogger)

Adımları kaydedin; isteğe bağlı ekran görüntülerini ve zaman çizelgesini raporda gösterin.

Ekran görüntüsü isteğe bağlı
☁️

Bulut & Selenium Grid Desteği

Selenium Grid, BrowserStack veya Sauce Labs sürücüsüyle uzaktan test çalıştırın.

Grid / bulut erişimi
🔌

SPI Eklenti Mimarisi

Java ServiceLoader ile özel driver sağlayıcıları, yaşam döngüsü kancaları ve rapor adaptörleri ekleyin.

Özel adaptör isteğe bağlı

Ayrı Araçlar

3 ayrı Node/IDE aracı; Java SDK JAR dosyasına dahil değildir.

🎙️

MCP Köprüsü & Java Kod Üretimi

Ayrı Node köprüsü altı araçla proje oluşturur ve verilen adımlardan Java kodu üretir; canlı tarayıcı için Playwright MCP gerekir.

Ayrı Node projesi
💻

TestFly CLI Geliştirici Deneyimi

Ayrı Node köprüsünde init, --version ve --help komutları bulunur; record ve studio henüz yoktur.

Ayrı Node projesi
🧩

IDE Eklentileri (IntelliJ & VS Code)

IntelliJ ve VS Code için ayrı eklentiler; kurulum, MCP yapılandırması ve ortam doğrulaması gerektirir.

Ayrı IDE eklentileri
Java SDK & Ayrı MCP Köprüsü

Testleri videoya kaydedin,
gözlemlenen adımlardan Java üretin

Java SDK, test çalışırken isteğe bağlı video kaydı alır. Ayrı Node.js MCP köprüsü, sağladığınız tarayıcı adımlarını Java test koduna çevirebilir; tarayıcı incelemesi için Playwright MCP kullanılır. Canlı etkileşim kaydedicisi henüz sunulmaz.

com/example/pages/InventoryPage.java
package com.example.pages;
import io.testfly.test.BasePage;
import io.testfly.locator.Locator;
import org.openqa.selenium.WebDriver;
public class InventoryPage extends BasePage {
// Illustrative locators: verify these against the actual page before use
private final Locator backpackBtn = getByTestId("add-to-cart-sauce-labs-backpack");
private final Locator cartBadge = getByTestId("shopping-cart-badge");
private final Locator checkoutBtn = getByTestId("checkout");
public InventoryPage(WebDriver driver) {
super(driver);
}
public InventoryPage addBackpackToCart() {
backpackBtn.click();
return this;
}
public InventoryPage proceedToCheckout() {
checkoutBtn.click();
return this;
}
}
🎥
Test Çalışması Video KaydıChromium için CDP, diğer sürücüler için ekran görüntüsü yedeği; retain-on-failure modu
👁️
Tarayıcı DenetimiAyrı Playwright MCP ile canlı sayfayı inceleyin ve gerçek seçicileri doğrulayın
🏗️
Sağlanan Adımlardan Kod ÜretimiKöprü TestNG Java kodu üretir; çıktıyı projeye eklemeden önce inceleyip derleyin
🤖
Altı MCP AracıAyrı köprü: proje oluşturma, kod üretimi, eylem önbelleği ve onarım araçları
Deklaratif Test Orkestrasyonu

Tek bir YAML dosyası,
tüm kurumsal test gücü

Yüzlerce satırlık driver fabrikaları ve dağınık setup script’leri yazmaya son. Tek YAML ile paralel testleri, tarayıcı oturum sınırını, CDP tercihli MP4 kaydını ve seçici onarımını yapılandırın. Allure açıktır; DeepSeek/OpenAI analizi ve ReportPortal için gerçek erişim bilgilerinizi ekleyip ilgili anahtarları açabilirsiniz.

⚡
ThreadLocal Paralel İzolasyonMethods veya classes düzeyinde güvenli paralelleştirme
🎥
Native Chromium CDP MP4 ScreencastTest boyunca kaydedilir, yalnızca hata anında saklanır
🧠
DeepSeek & OpenAI AI Analiz MotoruErişim anahtarıyla açılabilen hata analizi ve patch üretimi
📊
Allure & ReportPortal EntegrasyonuYerel HTML ve Allure açık; ReportPortal erişim bilgisiyle açılır
testfly.yml
browser:
name: chrome # Yerel Chrome sürücüsünü seçer
headless: false # Görünür pencere açar
lifecycle: per-test # Her testten sonra tarayıcıyı kapatır
arguments:
- --start-maximized # Pencereyi büyütür (headless modda boyut belirler)
- --disable-notifications # Chrome bildirimlerini kapatır
- --remote-allow-origins=* # Chrome başlatma argümanı olarak iletilir
capabilities:
acceptInsecureCerts: true # Geçersiz TLS sertifikalarını kabul eder
pageLoadStrategy: normal # Sayfa yüklenmesinin tamamlanmasını bekler
execution:
mode: local # Yerel tarayıcı sürücüsünü kullanır
baseUrl: https://www.saucedemo.com/ # Göreli web adresleri için temel URL
gridUrl: http://localhost:4444/wd/hub # Yalnızca mode: remote iken kullanılır
parallel: methods # TestNG metotlarını paralel çalıştırır
threadCount: 4 # TestNG paralel thread sayısı
maxActiveSessions: 4 # Eşzamanlı tarayıcı oturumu sınırı
locators:
selfHealing: true # Başarısız seçiciler için onarım dener
aiHealing: false # AI seçici onarımı kapalı; anahtarla açılabilir
ai:
failureAnalysis: false # Hata analizini kapatır
generatePatch: false # AI patch üretimini kapatır
provider: openai-compatible # DeepSeek için OpenAI uyumlu sağlayıcı
baseUrl: https://api.deepseek.com # AI istekleri için sağlayıcı adresi
apiKey: "${AI_API_KEY}" # Anahtarı ortam değişkeninden çözer
model: deepseek-v4-flash # İsteklerde iletilecek model adı
language: tr # Hata analizi yanıt dili
timeoutSeconds: 20 # AI isteği için zaman aşımı (saniye)
recording:
enabled: true # Tarayıcı testlerinde video kaydını açar
mode: retain-on-failure # Videoyu yalnızca hatada saklar
format: mp4 # Videoyu MP4 olarak kaydeder (hata halinde GIF)
fps: 5 # Saniyede hedeflenen kare sayısı
maxDurationSeconds: 60 # Saklanan kareleri fps × süre ile sınırlar
cdp: true # CDP tercih eder; JUnit 5 bu alanı okumaz
reporting:
allureEnabled: true # Allure rapor entegrasyonunu açar
htmlReport: true # Yerel HTML test raporunu üretir
reportPortal:
enabled: false # ReportPortal aktarımını kapatır
endpoint: "${REPORTPORTAL_ENDPOINT:-https://reportportal.example.com}" # Sunucu adresi; değişken yoksa örnek adres
apiKey: "${REPORTPORTAL_API_KEY}" # Erişim anahtarını ortamdan çözer
project: demo-web # ReportPortal proje adı
launch: "Demo Web - Dev" # Rapor çalıştırması adı
description: "Automated test execution powered by TestFly" # Çalıştırma açıklaması
attributes: "env:dev" # Çalıştırma etiketleri
type: auto # API veya Web çalıştırma türünü belirler
mode: default # Kabul edilir; çalışma akışında kullanımı yok
api:
baseUrl: https://fakeapi.net # API istemcisinin varsayılan temel adresi
timeoutSeconds: 30 # API istekleri için zaman aşımı (saniye)
logBody: false # Yanıt gövdesini loglarda göstermez
retry:
enabled: false # Başarısız testlerin yeniden denenmesini kapatır
maxAttempts: 2 # Yalnızca retry açıkken kullanılır
timeouts:
explicit: 10 # Öğe bekleme süresi (saniye)
pageLoad: 30 # Sayfa yükleme süresi (saniye)
Sıkça Sorulan Sorular

Kritik Sorular & Cevaplar

İlk kurulumdan test çalıştırmaya, isteğe bağlı AI ve entegrasyonlara kadar kısa yanıtlar.

TestFly, Java 21 için çok alanlı bir test otomasyon SDK’sıdır. Selenium tabanlı web testlerinin yanında API, yük ve diğer test alanları için de araçlar sunar; tarayıcı sürücüsü framework’ün tamamı değil, bir adaptörüdür.

Java 21 ve Maven ile TestFly bağımlılığını ekleyin, src/test/resources/testfly.yml içinde tarayıcı, çalışma modu ve zaman aşımı ayarlarını tanımlayın. Web testi için BaseTest, API testi için BaseApiTest kullanabilirsiniz. İlk örnek için Başlangıç rehberini izleyin.

Standart başlatma akışı yapılandırma dosyası arar. Önce -Dtestfly.config ile verilen dosyaya, ardından classpath üzerindeki testfly.yml dosyasına, son olarak çalışma dizinine bakar; testfly.profile verilirse profil dosyasını arar. Hiçbiri bulunmazsa hata verir. Her özelliği YAML’a yazmanız gerekmez.

TestNG, JUnit 5 ve Cucumber BDD adaptörleri bulunur; yaşam döngüsü ve bazı özellikler adaptöre göre değişebilir. Yerel tarayıcılar ve uzak sağlayıcılar, gereken sürücü, yapılandırma ve erişim bilgileri sağlandığında kullanılabilir.

TestNG için execution.parallel ve execution.threadCount paralelliği belirler; execution.maxActiveSessions eşzamanlı tarayıcı oturumlarını sınırlar. Yerel HTML raporu ayrı bir ayardır; Allure ve ReportPortal isteğe bağlı entegrasyonlardır. ReportPortal için ayrıca geçerli sunucu ve erişim bilgileri gerekir.

Hayır. locators.selfHealing yerel onarma stratejilerini, locators.aiHealing AI destekli seçici onarımını açar. Hata analizi için ai.failureAnalysis ve uygun sağlayıcı/anahtar gerekir. Başarılı onarma veya analiz garanti edilmez.

Hayır. ai.generatePatch etkinse, AI erişimi varsa, hataya ait kaynak kod bulunursa ve geçerli bir diff üretilebilirse target/remediations/ altında incelenebilecek bir .patch dosyası yazılır. Uygulama kararı size aittir.

act(...) ile oluşturulan eylem planı .testfly/action-cache.json içinde saklanabilir. Aynı hedefte önbellek isabeti yeni bir LLM isteğini önler; tarayıcı eylemleri ve beklemeler yine çalışır. Önbellek özelliği ve AI sağlayıcısı kendi ayarlarına bağlıdır.

Hayır. Java SDK’dan ayrı Node.js MCP köprüsü proje oluşturma ve kod üretme araçları sunar; canlı tarayıcı incelemesi için Playwright MCP kullanılır. Mevcut Node köprüsünde testfly record komutu bulunmaz; bu komut tarihsel Python kaydedicisine aittir. Ayrıntılar için CLI rehberine bakın.

Evet. Web testlerinde getDriver() canlı WebDriver oturumunu verir; TestFly Locator nesneleri toBy() ile Selenium By değerine dönüştürülebilir. CDP özellikleri kullanılan tarayıcı ve sürücünün desteğine bağlıdır.

Kırılgan testlerinize ve altyapı yükünüze veda edin

Tek bağımlılık. Tek YAML dosyası. Niyetinizi doğrudan koda döken otonom testler.