Gürültüden uzak test otomasyonu
public class AgenticCheckoutTest extends BaseTest {@Testpublic void autonomousCheckoutFlow() {open();// 1. Goal-oriented action compiled & frozen to .testfly/action-cache.jsonact("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.
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 Selenium: Kırılgan explicit wait ve JS scroll hilesiWebDriverWait 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");
// TestFly: Otomatik kaydırma, aksiyon kontrolü ve akıllı beklemefind("#checkout").click();// Otomatik bekleyen web öncelikli semantik doğrulamaassertThat(getByRole(Role.STATUS)).isVisible().hasText("Confirmed");
İ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 {@Testvoid 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 cacheact("Delete the first item in the cart and checkout");// Dynamic semantic intent locatorbyIntent("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 checkoutnode bin/testfly-mcp.js --help# Configure the script as an MCP server; see the CLI guide.
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.
<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ştirinReportPortal & Allure Entegrasyonu
Allure sonuç dosyaları üretin veya ReportPortal sunucusuna TestNG/JUnit/Cucumber agent ile raporlayın.
İsteğe bağlı agent / servisVeritabanı 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 bilgisiaxe-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 POICDP Ağ & API Taklidi
Chromium üzerinde CDP ile ağ isteklerini yakalayın ve mock yanıt döndürün.
Chrome / Edge gerekliFlakiness 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 önbellekE-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ıkGörsel Regresyon Testleri
Önceden onaylanan ekran görüntüleriyle piksel farkını ve toleransı doğrulayın.
Baseline gerekirZaman 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şimiSPI 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 projesiTestFly CLI Geliştirici Deneyimi
Ayrı Node köprüsünde init, --version ve --help komutları bulunur; record ve studio henüz yoktur.
Ayrı Node projesiIDE Eklentileri (IntelliJ & VS Code)
IntelliJ ve VS Code için ayrı eklentiler; kurulum, MCP yapılandırması ve ortam doğrulaması gerektirir.
Ayrı IDE eklentileriTestleri 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.
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 useprivate 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;}}
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.
browser:name: chrome # Yerel Chrome sürücüsünü seçerheadless: false # Görünür pencere açarlifecycle: per-test # Her testten sonra tarayıcıyı kapatırarguments:- --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 iletilircapabilities:acceptInsecureCerts: true # Geçersiz TLS sertifikalarını kabul ederpageLoadStrategy: normal # Sayfa yüklenmesinin tamamlanmasını beklerexecution:mode: local # Yerel tarayıcı sürücüsünü kullanırbaseUrl: https://www.saucedemo.com/ # Göreli web adresleri için temel URLgridUrl: http://localhost:4444/wd/hub # Yalnızca mode: remote iken kullanılırparallel: methods # TestNG metotlarını paralel çalıştırırthreadCount: 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 deneraiHealing: false # AI seçici onarımı kapalı; anahtarla açılabilirai:failureAnalysis: false # Hata analizini kapatırgeneratePatch: false # AI patch üretimini kapatırprovider: openai-compatible # DeepSeek için OpenAI uyumlu sağlayıcıbaseUrl: https://api.deepseek.com # AI istekleri için sağlayıcı adresiapiKey: "${AI_API_KEY}" # Anahtarı ortam değişkeninden çözermodel: deepseek-v4-flash # İsteklerde iletilecek model adılanguage: tr # Hata analizi yanıt dilitimeoutSeconds: 20 # AI isteği için zaman aşımı (saniye)recording:enabled: true # Tarayıcı testlerinde video kaydını açarmode: retain-on-failure # Videoyu yalnızca hatada saklarformat: 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ırlarcdp: true # CDP tercih eder; JUnit 5 bu alanı okumazreporting:allureEnabled: true # Allure rapor entegrasyonunu açarhtmlReport: true # Yerel HTML test raporunu üretirreportPortal:enabled: false # ReportPortal aktarımını kapatırendpoint: "${REPORTPORTAL_ENDPOINT:-https://reportportal.example.com}" # Sunucu adresi; değişken yoksa örnek adresapiKey: "${REPORTPORTAL_API_KEY}" # Erişim anahtarını ortamdan çözerproject: 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 etiketleritype: auto # API veya Web çalıştırma türünü belirlermode: default # Kabul edilir; çalışma ak ışında kullanımı yokapi:baseUrl: https://fakeapi.net # API istemcisinin varsayılan temel adresitimeoutSeconds: 30 # API istekleri için zaman aşımı (saniye)logBody: false # Yanıt gövdesini loglarda göstermezretry:enabled: false # Başarısız testlerin yeniden denenmesini kapatırmaxAttempts: 2 # Yalnızca retry açıkken kullanılırtimeouts:explicit: 10 # Öğe bekleme süresi (saniye)pageLoad: 30 # Sayfa yükleme süresi (saniye)
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.