Ana içeriğe geç

TestFly

Spring Boot felsefesinde, sıfır boilerplate ile tasarlanmış modern Java test otomasyon platformu.

Maven Central License


TestFly Nedir?​

TestFly, her Java test otomasyon projesinde tekrar tekrar yazılan altyapı kodlarını ortadan kaldırır — WebDriver kurulumu ve kapatılması, bekleme yardımcıları, retry mekanizması, ekran görüntüsü yakalama, raporlama ve paralel çalıştırma — böylece test sınıflarınızda yalnızca test senaryonuzun gerçek niyeti kalır.

Spring Boot felsefesinden esinlenilmiştir: Akıllı varsayılanlar ve yapılandırma yerine uzlaşı (convention over configuration). Başlatma için bir testfly.yml dosyası zorunludur; belirtilmeyen isteğe bağlı ayarlar kendi varsayılanlarını kullanır.

public class LoginTest extends BaseTest {

@Test(description = "Geçerli kullanıcı giriş yapabilir")
public void loginTest() {
open();
new LoginPage(getDriver()).login("admin", "secret");
softAssert().that(new DashboardPage(getDriver()).isLoaded(), "Dashboard should be loaded");
}
}

WebDriver kurulum kodu yok. @AfterMethod kapatma kargaşası yok. Manuel bekleme yardımcıları yok. Retry yapılandırması yok. Sadece iş mantığı ve test.


Tasarım Felsefesi​

TestFly; kuralcı bir çatı mı, genişletilebilir bir araç seti mi, yoksa Selenium üzerine kurulu modern bir verimlilik katmanı mı? Cevap: Java test otomasyonunun Spring Boot'u — akıllı varsayılanlarla başlar, ihtiyaç duyduğunuzda derinlemesine özelleştirilebilir:

  1. Akıllı ve Kuralcı Çekirdek (Convention over Configuration). Test kodunda az altyapı kodu. Tek bağımlılığı ekleyin, zorunlu testfly.yml dosyasını sağlayın ve BaseTest, BaseJUnit5Test veya BaseCucumberSteps sınıfını genişletin. TestFlyDefaults, paylaşılan test-base kitaplıklarının YAML yüklendikten sonra belirli yedek değerleri kaydetmesini sağlar; yapılandırma dosyasının yerini almaz.
  2. Selenium'u Asla Gizlemez (Esneklik). TestFly ham WebDriver erişimini asla kısıtlamaz. İhtiyaç duyduğunuz anda getDriver() ile doğrudan WebDriver / By / WebElement seviyesine inebilirsiniz. Standartları belirler ama sizi bir kafese hapsetmez.
  3. Genişletilebilir Ekosistem (SPI Desteği). Java SPI tabanlı registry mimarisi (DriverProviderRegistry, PluginRegistry, ReportAdapterRegistry) ile özel driver'lar, rapor adaptörleri ve yaşam döngüsü hook'ları ekleyebilirsiniz.

Selenium Altyapınızı Korumaya Devam Edin​

Playwright'ın akıcı ergonomisini kullanmak için mevcut Selenium ekosisteminizden, Selenium Grid'inizden veya kurumsal Java birikiminizden vazgeçmeniz gerekmez. TestFly bu modern yaklaşımı doğrudan Selenium dünyasına getirir:

Playwright ErgonomisiTestFly Karşılığı
Erişilebilirlik odaklı seçicilergetByRole, getByLabel, getByText, getByPlaceholder, getByTestId — DOM refactor'lerine dirençli
Otomatik bekleme (Auto-waiting)WaitEngine destekli aksiyonlar — Thread.sleep() tamamen tarih olur
Web-öncelikli doğrulamalarKoşul sağlanana kadar otomatik yeniden deneyen assertThat(...)
Convention over configurationZorunlu testfly.yml; isteğe bağlı ayarlar için varsayılanlar

…tüm bunlar ham Selenium'u gizlemeden, mevcut Selenium / Java / TestNG / JUnit 5 stack'inizi, ekip yeteneklerinizi ve test altyapınızı koruyarak çalışır.

Neden Kendi Framework'ünüzü Sıfırdan Yazmamalısınız?​

Neredeyse her kurumsal Java ekibinin ev yapımı bir BaseTest'i, bir DriverFactory'si, bir yığın flaky bekleme utility'si ve bakım gerektiren özel bir raporlama kodu vardır — ve her yeni projede bunlar sıfırdan kopyalanıp yapıştırılır. Zamanla bu kodlar test edilmemiş, paralel çalışmada çöken ve sürekli hata veren bir teknik borca dönüşür.

TestFly bu tekerleği yeniden icat etme derdini bitirir — endüstri standartlarında inşa edilmiş, thread-safe, paralel yürütmeye hazır, kapsamlı test edilmiş ve dokümante edilmiştir:

Kendin yazTestFly
Driver lifecycle, bekleme, retry yaz ve bakımını yapSağlanır, thread-safe, sıfır config
Raporlama katmanını sıfırdan inşa etHTML rapor + JUnit XML dahil
Her projeye özel CI bağlantısı kurGitHub Actions / Jenkins / CircleCI'ı otomatik tanır
Onboarding = "iç wiki'mizi okuyun"Onboarding = public dokümanlar + tek bağımlılık
Bug'ları siz düzeltirsinizFramework düzeltmeleriyle birlikte gelir

TestFly, Selenium'un Spring Boot'udur — sıfır kurulum, daha akıllı varsayılanlar, Playwright'tan esinlenmiş API'ler ve kurumsal özellikler, Selenium'u gizlemeden.


TestFly MCP Köprüsü & Yapay Zeka Otomasyonu

TestFly MCP Köprüsü (@testfly/mcp) artık yayında! npx @testfly/mcp init ile saniyeler içinde yeni Java 21 projeleri oluşturun ya da Playwright MCP eşleşmesiyle yapay zeka asistanlarının (Cursor, Claude, Copilot) gerçek tarayıcıları yönetmesini ve idiomatik TestFly kodları üretmesini sağlayın. İncelemek için: TestFly MCP & CLI Rehberi ve Yapay Zeka & MCP Genel Bakış.


Kutudan çıkanlar​

Önce sonuçlar — sağdaki API'ye doğrudan atlayabilirsiniz.

Ne kazanırsınızNasıl
Driver kurulumu/kapatması tekrar yazmayınHer test için bir driver, testten önce oluşturulur, sonra kapatılır
Kodu dokunmadan ortam değiştirinYAML config — browser, parallel, timeout, retry tek dosyada
Thread.sleep() tekrar yazmayınOtomatik bekleme destekli WaitEngine, 10+ hazır koşul
Flaky test'ler build'ı bozmasınGlobal, metot başı @Retryable, veya Cucumber senaryo başı @retryable tag'i
Test neden fail etti tam görünFail anında otomatik ekran görüntüsü, raporda base64 gömülü
Test'i spec gibi okuyunStepLogger adımları, isteğe bağlı adım başı ekran görüntüsü
Paydaşların okuyacağı rapor verinSekmeli HTML dashboard — özet, test case'ler, hatalar, flakiness radar
Ekstra araç olmadan her CI'ya takılınJUnit XML Jenkins, GitHub Actions, GitLab CI tarafından doğal olarak parse edilir
CI kendini yapılandırsınCI algılandığında headless zorlanır, thread sayısı otomatik ayarlanır
Fork etmeden genişletinSPI tabanlı plugin'ler — özel driver, hook, rapor adapter'ı
Kendi test runner'ınızı getirinBaseJUnit5Test veya @ExtendWith(TestFlyExtension.class) ile tam JUnit 5 parity
Ürün ekibinin okuyabileceği spec yazınBDD / Cucumber — BaseCucumberSteps, CucumberHooks, raporda senaryo başı adımlar
UI ve API'yi aynı suite'te test edinBaseApiTest, fluent ApiClient, JSONPath, schema validation, hibrit UI+API
Elementi akıcıca sabitleyinfind(".row").filter(".active").nth(0).withText("Save") — açık argümanlı zincirlenebilir locator'lar
Test'ler CSS/DOM refactor'lerinden sağ çıksınErişilebilirlik-öncelikli locator'lar — getByRole(Role.BUTTON).withName("Submit"), getByText, getByLabel, getByPlaceholder, getByTestId
Assertion'lar timing yüzünden flake olmasınWeb-öncelikli assertThat(By.id("x")).isVisible() — timeout'a kadar otomatik retry
Bir testte admin ve kullanıcı akışlarını test edinwithSession("admin", () -> { ... }) — bir testte iki browser
DB'ye gerçekten ne düştüğünü doğrulayındb().assertRowExists(), db().query().assertValue() — plain JDBC, ORM yok
Uygulamanın gönderdiği e-postayı doğrulayınmailbox().waitForEmail(to("[email protected]")) — Mailhog, Mailtrap, Outlook, IMAP
UI gerektirmeyen testlerde browser'ı atlayın@NoBrowser — DB assertion, API kontrolleri, dosya işlemleri, WebDriver yok
Gerçek cloud browser'larda değişiklik yapmadan çalıştırınexecution.mode: browserstack / saucelabs — oturum URL'si HTML raporda
Hataları kazmadan anlayınAI failure analysis — Claude test neden fail etti açıklar ve çözüm önerir
Locator'lar kendi kendini onarsınBir locator fail ettiğinde self-healing fallback stratejileri
Hangi test'lerin gelecekte flaky olacağını bilinFlakiness prediction — geçmiş çalışmalardan risk skoru, raporda radar grafik
Mevcut verilerinizden test sürdürünHarici test verisi — @TestData("csv:..."), @TestData(value="excel:...", sheet="Login"), @TestData("db:SELECT...")
Zamana bağlı davranışı deterministik test edinClock mocking — clock().set("2030-01-01T00:00:00Z"), JS Date override, otomatik reset

Felsefe​

  1. Sıfır tekrarlayan kod — kullanıcı bir şeyi etkinleştirmek için 1 satırdan fazla yazıyorsa, varsayılan olmalı
  2. Yapılandırmaya üstün gelen convention — akıllı varsayılanlar, gelişmiş davranışlar için YAML opt-in
  3. Gerekli harici servis yok — çevrimdışı çalışır, çekirdekte cloud API yok
  4. Opt-in karmaşıklık — gelişmiş özellikler config flag'lerinin arkasında, varsayılan kapalı
  5. Tek bağımlılık — testfly ekle, başka bir şey gerekmez
  6. Test kodu temiz kalsın — lifecycle iç işler halleder; test metotlarında yalnızca amaç olur

Sonraki Adımlar​