Yapılandırma Referansı
TestFly framework'ünün tüm çalışma davranışı testfly.yml dosyası ile yönetilir. Bu belge; framework tarafından desteklenen her bir üst düzey bölümün, iç içe geçmiş yapılandırma özelliklerinin, varsayılan değerlerin, ortam değişkeni çözünürlüğünün ve profil geçersiz kılmalarının kapsamlı referansıdır.
Dosya Çözümleme Öncelik Sırası
TestFly test paketi başlatılırken yapılandırma dosyasını şu öncelik sırasına göre arar:
- Sistem Özelliği (System Property) —
-Dtestfly.config=/path/to/custom.yml(en yüksek öncelik) - Classpath Kaynağı —
src/test/resources/testfly.yml - Çalışma Dizini (Working Directory) —
./testfly.yml(yedek konum)
Bu konumlardan hiçbirinde geçerli bir yapılandırma dosyası bulunamazsa, test paketi başlatması açıklayıcı bir IllegalStateException ile derhal durdurulur.
Ortam Değişkenleri ve Dinamik Değer Atama
Yer Tutucu Sözdizimi (${VAR_NAME})
testfly.yml içindeki tüm metin (string) değerler (metin liste öğeleri ve map değerleri dahil) ortam değişkenlerine veya Java sistem özelliklerine başvurabilir:
execution:
baseUrl: ${BASE_URL}
browserstack:
username: ${BS_USER}
accessKey: ${BS_KEY}
api:
auth:
admin:
type: bearer
token: ${API_TOKEN}
Çözümleme sırası: proje kökündeki .env, shell ortam değişkeni, Java sistem özelliği (-DVAR_NAME=value) ve ${VAR_NAME:-default} varsayılanıdır. Kaynak bulunamazsa yer tutucu korunur; gerekli değerleri çalıştırmadan önce sağlayın.
Yer tutucular YAML ayrıştırıldıktan sonra çözüldüğü için boolean ve sayısal alanlar (örneğin browser.headless, execution.threadCount) bunları kullanamaz — headless: ${HEADLESS:-true} açılışta ConstructorException ile başarısız olur. Bu değerler için bir profil dosyası (-Dtestfly.profile=ci) kullanın.
Ortam Profilleri (-Dtestfly.profile)
Farklı ortamlar için testfly-<profil>.yml adlandırmasıyla geçersiz kılma dosyaları oluşturabilirsiniz:
testfly.yml # Temel yapılandırma (ortak varsayılanlar)
testfly-staging.yml # Staging ortamına özel ayarlar
testfly-prod.yml # Canlı (Production) ortama özel ayarlar
testfly-ci.yml # CI/CD hattına özel ayarlar
Bir profili Maven veya Gradle ile etkinleştirebilirsiniz:
mvn test -Dtestfly.profile=staging
Her profil dosyası tam bir yapılandırmadır. TestFly seçilen dosyayı testfly.yml ile birleştirmeden yükler. Belirtilmeyen isteğe bağlı alanlar framework varsayılanlarını kullanır; zorunlu ayarlar profil dosyasında bulunmalıdır.
Ana testfly.yml Şablonu
Aşağıdaki açıklamalı şablon, framework'ün desteklediği tüm yapılandırma bloklarını ve önerilen varsayılanları içerir:
# ── Özellik Panosu (Feature Switchboard) ─────────────────────────────────────
# Her modülün kendi ayarlarının ÜZERİNDE duran ana aç/kapa paneli.
# Bir anahtarı hiç yazmazsanız o modülün kendi ayarları geçerli olur;
# true/false yazarsanız onun üzerine yazılır. Aşağıdaki değerler çalışan, önerilen bir profildir; tamamı alan varsayılanı değildir.
features:
ai: true # tüm AI/agentic yüzeyler: act(), aiAssert(), hata analizi, AI healing
recording: false # tarayıcı çalışmasının MP4/GIF video kaydı
tracing: false # adım adım ekran görüntüleri + çalıştırma zaman çizelgesi (target/traces/)
network: false # CDP ağ yakalama, route mocking, URL engelleme listeleri
healing: false # locator self-healing (AI yedeği dahil)
visual: true # görsel regresyon karşılaştırması
performance: false # Core Web Vitals toplama
flakiness: true # flakiness geçmiş skorlaması
quarantine: true # karantinadaki testlerin otomatik atlanması
testManagement: false # TestRail / Xray sonuç gönderimi
notifications: true # Slack / Teams çalıştırma bildirimleri
consoleErrors: false # tarayıcı konsol (JS) hatalarının toplanması
loadtest: false # loadtest.enabled değerine işlenir; açık çağrılar henüz bu bayrakla engellenmez
# ── Browser (Tarayıcı) ────────────────────────────────────────────────────────
browser:
name: chrome # chrome | firefox | edge | safari
headless: false # CI ortamı algılandığında otomatik true yapılır
lifecycle: per-test # per-test (her teste temiz oturum) | per-suite (thread başına oturum koruma)
downloadDir: ./target/downloads # indirilen dosyaların kaydedileceği dizin
captureConsoleErrors: false # tarayıcı console.error loglarını topla
failOnConsoleErrors: false # SEVERE konsol hatası varsa testi başarısız say
device: # isteğe bağlı mobil emülasyon profili (örn: "iPhone 14")
matrix: [] # çoklu tarayıcı matrisi (örn: [chrome, firefox])
arguments: # tarayıcı çalıştırılabilirine iletilecek ek bayraklar
- --start-maximized
- --disable-notifications
- --remote-allow-origins=*
capabilities: # doğrudan WebDriver capability geçersiz kılmaları
acceptInsecureCerts: true
pageLoadStrategy: eager
# ── Execution (Çalıştırma Modu) ───────────────────────────────────────────────
execution:
mode: local # local | remote | browserstack | saucelabs
baseUrl: https://example.com # open("/") çağrılarında kullanılan temel web URL'i
gridUrl: http://localhost:4444 # Selenium Grid hub URL'i (mode: remote iken)
parallel: none # none | methods | classes | tests | instances
threadCount: 1 # parallel etkin olduğunda eşzamanlı çalışan iş parçacığı sayısı
maxActiveSessions: 5 # eşzamanlı aktif tarayıcı sayısını sınırlayan semafor
sessionWaitSeconds: 300 # testin boş tarayıcı yuvası için bekleyeceği süre, sn (0 = beklemeden hata ver)
# ── CI Sharding (Parçalama)
sharding:
enabled: false # testleri CI worker'ları arasında bölüştür
total: 1 # toplam worker (shard) sayısı
index: 0 # bu worker'ın indeksi (0-tabanlı)
strategy: lpt # lpt (en uzun önce) | round-robin
metricsFile: target/testfly-metrics.json
# ── BrowserStack (mode: browserstack)
browserstack:
username: ${BS_USER}
accessKey: ${BS_KEY}
os: Windows # Windows | OS X
osVersion: "11"
browser: chrome # chrome | firefox | edge | safari
browserVersion: latest
device: # gerçek mobil cihaz adı (örn: "iPhone 14")
realMobile: true
capabilities: # ek bstack:options geçersiz kılmaları
debug: false
# ── Sauce Labs (mode: saucelabs)
saucelabs:
username: ${SAUCE_USER}
accessKey: ${SAUCE_KEY}
region: us-west-1 # us-west-1 | eu-central | apac-southeast
platformName: "Windows 11"
browser: chrome
browserVersion: latest
capabilities: # ek sauce:options geçersiz kılmaları
recordVideo: true
# ── Timeouts (Zaman Aşımlar ı) ────────────────────────────────────────────────
timeouts:
explicit: 10 # saniye — WaitEngine, Locator ve assertThat bekleme süresi
pageLoad: 30 # saniye — WebDriver sayfa yükleme zaman aşımı
# ── Retry (Yeniden Deneme) ───────────────────────────────────────────────────
retry:
enabled: true # global otomatik yeniden deneme anahtarı
maxAttempts: 2 # test başına toplam deneme sayısı (1 = tekrar yok, 2 = 1 asıl + 1 tekrar)
# ── Locators (Seçiciler ve İyileştirme) ───────────────────────────────────────
locators:
selfHealing: false # zaman aşımına uğrayan seçicileri alternatif stratejilerle otomatik onar
aiHealing: false # statik sezgiseller yetersiz kaldığında LLM ile seçici onarımı
maxDomTokens: 8000 # AI seçici onarımı için DOM budama belirteç (token) limiti
testIdAttribute: data-testid # getByTestId() tarafından sorgulanacak HTML özniteliği
# ── AI Failure Analysis (AI Hata Analizi) ────────────────────────────────────
ai:
enabled: true # TÜM AI yüzeyleri için ana anahtar (features.ai ile de ayarlanabilir)
failureAnalysis: false # test başarısız olduğunda AI ile kök neden analizi üret
generatePatch: false # test başarısız olduğunda target/remediations/ altında git diff .patch üret
actionCache: true # act() eylemlerini .testfly/action-cache.json içinde önbelleğe al
provider: gemini # gemini | claude | openai-compatible
apiKey: ${AI_API_KEY} # sağlayıcı API anahtarı
model: # isteğe bağlı — varsayılan: gemini-2.5-flash veya claude-haiku-4-5-20251001
language: tr # üretilecek analiz dili: tr, en, de, fr vb.
timeoutSeconds: 20 # AI sağlayıcısından yanıt bekleme zaman aşımı
baseUrl: # isteğe bağlı — özel uç nokta (openai-compatible için zorunludur)
# ── CI Kalite Kapıları ───────────────────────────────────────────────────────
ci:
failOnPassRateBelow: 0 # 0 = devre dışı. Örnek: 85 (başarı oranı %85 altındaysa build'i kır)
maxFlakyTests: -1 # -1 = devre dışı. Tekrar denemeyle geçen test sayısı aşılırsa build'i kır
captureMetadata: true # raporlara Git dalı, commit, build URL bilgilerini otomatik ekle
# ── Bildirimler (Notifications) ──────────────────────────────────────────────
notifications:
slack:
webhookUrl: ${SLACK_WEBHOOK}
notifyOnFailureOnly: false
teams:
webhookUrl: ${TEAMS_WEBHOOK}
notifyOnFailureOnly: false
# ── Reporting (Raporlama) ────────────────────────────────────────────────────
reporting:
mergeRuns: false # ardışık test koşumlarını sıfırlamak yerine kümülatif olarak birleştir (-Dtestfly.merge=true)
historyRuns: 10 # rapor geçmişi seçicisinde saklanacak geçmiş koşum sayısı
allure:
enabled: false # target/allure-results/ dizinine Allure 2 rapor çıktıları üret
reportportal:
enabled: false
endpoint: http://localhost:8080
apiKey: ${RP_API_KEY}
project: testfly_project
launch: "Regression Suite"
description: "Otomatik test koşumu"
attributes: "env:staging;team:qa"
type: auto # auto (Web vs API otomatik algıla) | web | api
mode: default # default | step
# ── Ekran Kaydı (Screen Recording) ───────────────────────────────────────────
recording:
enabled: false # tarayıcı oturumunu MP4 video olarak kaydet
mode: retain-on-failure # retain-on-failure | on | off
format: mp4 # mp4 (varsayılan, saf Java H.264) | gif
fps: 5 # saniyedeki kare sayısı (1-10 önerilir)
maxDurationSeconds: 60 # test başına maksimum video uzunluğu (saniye)
cdp: true # Chromium üzerinde Chrome DevTools Protocol screencast kullan
# ── Yürütme İzleme (Execution Tracing) ───────────────────────────────────────
tracing:
enabled: false # adım adım ekran görüntüleri ve zaman tüneli içeren HTML izleme dosyası üret
captureOnPass: false # başarılı testler için de izleme kaydet
# ── Görsel Karşılaştırma (Visual Regression) ─────────────────────────────────
visual:
baselineDir: src/test/resources/baselines # onaylanmış referans görseller dizini
diffDir: target/visual-diffs # görsel uyuşmazlık çıktılarının yazılacağı dizin
defaultTolerance: 0.01 # izin verilen piksel fark oranı (0.0 ile 1.0 arası)
updateBaselines: false # true ise geçerli ekran görüntülerini referans olarak kaydeder
# ── Çoklu Oturum İzolasyonu (Sessions) ───────────────────────────────────────
sessions:
maxPerTest: 2 # test başına izin verilen izole tarayıcı sayısı (örn: çok kullanıcılı sohbet)
# ── Performans (Core Web Vitals) ─────────────────────────────────────────────
performance:
captureOnEveryTest: false # geçen her tarayıcı testinden sonra metrikleri topla
lcpWarnMs: 2500 # Largest Contentful Paint uyarı eşiği (ms, 0 = devre dışı)
fcpWarnMs: 1800 # First Contentful Paint uyarı eşiği (ms)
ttfbWarnMs: 800 # Time to First Byte uyarı eşiği (ms)
clsWarn: 0.1 # Cumulative Layout Shift eşiği
# ── Karantina (Quarantine) ───────────────────────────────────────────────────
quarantine:
enabled: true # testfly-quarantine.yml veya Cucumber etiketli testleri otomatik atla
cucumberTag: quarantine # karantinaya alınmış senaryoları belirten etiket adı (@ olmadan)
# ── Kararsızlık Takibi (Flakiness) ───────────────────────────────────────────
flakiness:
historyRuns: 20 # kararlılık skoru için incelenecek geçmiş koşum sayısı
highRiskThreshold: 33.0 # yüksek risk sayılacak kararsızlık hata yüzdesi
failOnHighFlakiness: false # yüksek riskli kararsız test tespit edilirse build'i kır
# ── Zaman Simülasyonu (Clock Mocking) ────────────────────────────────────────
clock:
injectHeader: false # HTTP isteklerine simüle edilmiş tarih başlığı ekle
headerName: X-Mock-Date # backend ile zaman senkronizasyonu için özel başlık adı
# ── Ağ Araya Girme (Network Interception) ────────────────────────────────────
network:
interceptEnabled: false # CDP üzerinden ağ trafiğine müdahale ve yanıt mock'lamayı etkinleştir
blockUrls: # global engellenecek URL kalıpları (izleyiciler, reklamlar vb.)
- "*google-analytics.com*"
- "*doubleclick.net*"
# ── E-posta Doğrulama (Email Verification) ───────────────────────────────────
email:
provider: mailhog # mailhog | mailtrap | outlook | imap
timeoutSeconds: 30 # beklenen e-postanın gelmesi için maksimum bekleme süresi
pollIntervalMs: 1000 # gelen kutusunu sorgulama aralığı (ms)
autoClear: false # her testten önce gelen kutusunu otomatik temizle
mailhog:
host: localhost
port: 8025
mailtrap:
apiToken: ${MAILTRAP_TOKEN}
accountId: ${MAILTRAP_ACCOUNT}
inboxId: ${MAILTRAP_INBOX}
outlook:
tenantId: ${AZURE_TENANT_ID}
clientId: ${AZURE_CLIENT_ID}
clientSecret: ${AZURE_CLIENT_SECRET}
mailbox: [email protected]
imap:
host: imap.example.com
port: 993
ssl: true
username: ${EMAIL_USER}
password: ${EMAIL_PASS}
folder: INBOX
# ── Veritabanı Doğrulamaları (Database) ───────────────────────────────────────
database:
url: jdbc:postgresql://localhost:5432/maindb
username: ${DB_USER}
password: ${DB_PASS}
driver: org.postgresql.Driver
datasources:
analytics:
url: jdbc:postgresql://localhost:5432/analytics
username: ${ANALYTICS_USER}
password: ${ANALYTICS_PASS}
# ── API Testi (API Testing) ──────────────────────────────────────────────── ──
api:
baseUrl: https://api.example.com # ApiClient için varsayılan HTTP adresi
timeoutSeconds: 30 # istek başına zaman aşımı (saniye)
connectTimeoutSeconds: 30 # TCP/TLS bağlantı zaman aşımı; > 0 olmalı
maxConcurrentRequests: 0 # eşzamanlı gerçek HTTP gönderim tavanı; 0 = sınırsız
ssl:
trustAll: false # tüm sertifika zincirlerine güven (hostname yine doğrulanır)
# trustStore: # özel güven deposu — trustAll ile birlikte kullanılamaz
# path: certs/truststore.p12 # trustStore bloğu yazıldığında zorunludur
# type: PKCS12 # PKCS12 (varsayılan) veya JKS
# password: ${TESTFLY_TRUSTSTORE_PASSWORD}
logBody: false # istek ve yanıt gövdelerini HTML adım günlüğüne ekle
logContext: true # sorgu parametrelerini ve başlıkları günlüğe kaydet
prettyLog: false # JSON yanıtlarını biçimlendirilmiş (girintili) yaz
logCurl: false # başarısız isteklerde eşdeğer curl komutunu yazdır
truncationLimit: 300 # yanıt gövdelerinin günlüğe yazılacak maksimum karakter sınırı
maskedHeaders: # günlüklere yazılırken maskelenecek başlıklar
- Authorization
- Cookie
- X-Api-Key
retry:
enabled: false # geçici HTTP hatalarında otomatik yeniden dene
maxAttempts: 3
backoffMs: 500
retryOnStatus: [502, 503, 504]
retryOnException: true
auth:
adminBearer:
type: bearer
token: ${ADMIN_TOKEN}
basicAuth:
type: basic
username: apiuser
password: ${API_PASS}
oauthClient:
type: oauth2
tokenUrl: https://auth.example.com/oauth/token
clientId: ${CLIENT_ID}
clientSecret: ${CLIENT_SECRET}
# ── Test Yönetim Sistemleri (Test Management) ────────────────────────────────
testmanagement:
testrail:
enabled: false
url: https://myorg.testrail.io
username: ${TR_USER}
apiKey: ${TR_KEY}
projectId: 1
suiteId: 10
runName: "Otomatik Test Koşumu"
autoCreateRun: true
xray:
enabled: false
mode: cloud # cloud | server
clientId: ${XRAY_ID}
clientSecret: ${XRAY_SECRET}
projectKey: PROJ
testPlanKey: PROJ-100
# ── Yük Testi (Load Testing) ─────────────── ───────────────────────────────────
loadtest:
enabled: false # ayrılmış bayrak; açık LoadTestRunner.run() çağrılarını engellemez
baseUrl: https://api.example.com # yük testi hedef temel adresi
engine: auto # auto (varsa Gatling, yoksa JDK) | gatling | jdk
users: 10 # eşzamanlı sanal kullanıcı sayısı
rampUp: 10s # kullanıcı sayısına kademeli artış süresi (örn: 10s, 1m)
hold: 30s # zirve kullanıcı yükünün korunacağı süre (örn: 30s, 5m)
cooldown: 5s # kademeli soğuma süresi (örn: 5s)
maxUsers: 1000 # izin verilen tavan kullanıcı sayısı
resultsDir: target/loadtest # yük testi çıktı ve rapor dizini
reportEnabled: true # bağımsız HTML yük testi raporu oluştur
requestTimeoutSeconds: 30 # HTTP istek zaman aşımı (saniye)
Detaylı Bölüm Rehberi
Özellik Panosu (Features)
Tüm isteğe bağlı framework modülleri için tek bir aç/kapa paneli. Her modülün kendi ayarlarının üzerinde durur; böylece bir alt sistemi kapatmak için hangi anahtarın onu yönettiğini aramanız veya modülün detaylı yapılandırmasını silmeniz gerekmez.
features:
ai: false # çalıştırma boyunca hiçbir AI çağrısı yapılmasın
recording: true # recording.enabled false olsa bile videoyu zorla aç
healing: false # locator self-healing kapalı
Çözümleme
Her anahtar üç durumludur:
| Değer | Etkisi |
|---|---|
yazılmamış (veya null) | Modülün kendi ayarları karar verir. features: bloğunu hiç yazmamak, 1.0.5 öncesi davranışı birebir korur. |
true | Modülün birincil enabled bayrağı zorla açık yapılır. Alt ayarlara (recording.mode, recording.fps, …) dokunulmaz. |
false | Modül kendi ayarları ne derse desin zorla kapalı yapılır. |
Desteklenen anahtarlar
| Anahtar | Üzerine yazdığı ayar | Varsayılan |
|---|---|---|
ai | ai.enabled — act(), aiAssert(), hata analizi, patch üretimi ve AI locator healing'i kapsar | true |
recording | recording.enabled | false |
tracing | tracing.enabled — adım adım ekran görüntüleri ve zaman tüneli içeren HTML izleme dosyası (target/traces/) üretir | false |
network | network.interceptEnabled | false |
healing | locators.selfHealing ve locators.aiHealing | false |
visual | modül bayrağı yok — kapatılmadığı sürece görsel regresyon kullanılabilir | true |
performance | performance.captureOnEveryTest | false |
flakiness | modül bayrağı yok — kapatılmadığı sürece flakiness analizi çalışır | true |
quarantine | quarantine.enabled | true |
testManagement | testManagement.testrail.enabled ve testManagement.xray.enabled | false |
notifications | modül bayrağı yok — kapatılmadığı sürece Slack/Teams adapter'ları kaydolur | true |
consoleErrors | browser.captureConsoleErrors | false |
loadtest | Ayrıştırılan loadtest.enabled değerini geçersiz kılar; açık LoadTestRunner.run() çağrıları henüz bu değeri okumaz | false |
Bir test özelliği açıkça istediğinde "kapalı" ne demek?
Arka planda çalışan davran ışlar (recording, tracing, performance toplama, flakiness analizi, bildirimler, TestRail/Xray gönderimi) hiç çalışmaz.
Bir testin açıkça çağırdığı özellikler ise asla sessizce geçmez — çünkü sessizce atlanan bir doğrulama, sahte bir yeşildir:
| Çağrı | Özellik kapalıyken |
|---|---|
act("...") | IllegalStateException: AI features are disabled via ai.enabled=false or features.ai=false in testfly.yml |
aiAssert(...) | doğrulama şu gerekçeyle başarısız olur: AI features are disabled via ai.enabled=false or features.ai=false |
VisualAssert.assertScreenshot(...) | TestNG SkipException — test atlandı olarak raporlanır, geçmiş sayılmaz |
Tanılama
FrameworkBootstrap, suite başlangıcında aktif override'ları yazdırır:
[TestFly] features: ai=OFF, recording=ON, healing=OFF
Eklentiler kendi davranışlarını özel bir özellik adıyla yönetebilir. Tanınmayan adlar kabul edilir (bir eklentiye ait olabilir) ancak bir kez raporlanır; böylece bir yazım hatası sessizce yutulmak yerine görünür olur:
[TestFly] Unknown feature name in testfly.yml: 'features.recordng' — ignored. Known features: [...]
Programatik erişim io.testfly.config.FeatureGate üzerinden sağlanır:
FeatureGate.enabled(FeatureGate.AI); // yalnızca panel, varsayılan açık
FeatureGate.enabled(FeatureGate.RECORDING, rec.isEnabled()); // panel, modül bayrağının üzerine yazıyor
FeatureGate.override(FeatureGate.VISUAL); // ham üç-durum, ayarlanmamışsa null
testfly.yml hoşgörülü biçimde ayrıştırılır: karşılığı olmayan bir anahtar, çalışmayı ConstructorException ile çökertmek yerine atlanır ve stderr'e raporlanır ([TestFly] Unknown config key 'headles' on Browser — ignored).
Tarayıcı (Browser)
Tarayıcı sağlama, çalıştırma modu, yetenekler ve süreç argümanlarını yönetir.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
name | string | zorunlu | Başlatılacak tarayıcı. Geçerli değerler: chrome, firefox, edge, safari. Yalnızca browser.matrix boş değilse atlanabilir. |
headless | boolean | false | Tarayıcıyı görsel bir pencere olmadan arka planda çalıştırır. CI ortamında otomatik true yapılır. |
lifecycle | string | per-test | WebDriver yaşam döngüsü: per-test (her testten sonra kapatır) veya per-suite (thread başına oturumu testler boyunca açık tutar). |
downloadDir | string | ./target/downloads | İndirilen dosyaların kaydedileceği yerel dizin. |
captureConsoleErrors | boolean | false | true ise yürütme sırasında tarayıcı console.error loglarını yakalar. |
failOnConsoleErrors | boolean | false | true ise test sırasında SEVERE düzeyinde konsol hatası oluştuğunda testi başarısız sayar. |
device | string | null | Mobil emülasyon profili adı (örn: "iPhone 14", "Pixel 7"). |
matrix | list<string> | [] | Çoklu tarayıcı test koşumu için tarayıcı listesi (örn: [chrome, firefox]). |
arguments | list<string> | [] | Tarayıcı ikili dosyasına aktarılan komut satırı bayrakları (örn: --incognito, --no-sandbox). |
capabilities | map | {} | WebDriver seçeneklerine eklenen ham yetenekler (örn: acceptInsecureCerts, pageLoadStrategy). |
Çalıştırma (Execution)
Test dağıtımı, temel adresler, eşzamanlılık ve bulut ızgara (grid) sağlayıcılarını kontrol eder.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
mode | string | zorunlu | Çalıştırma ortamı: local, remote, browserstack veya saucelabs. |
baseUrl | string | null | Web testleri için temel URL. open("/home") çağrıldığında bu adresin ardına eklenir. |
gridUrl | string | null | Uzak Selenium Grid adresi (mode: remote iken zorunludur). Örnek: http://localhost:4444. |
parallel | string | none | TestNG paralel dağıtım modu: none, methods, classes, tests, instances. |
threadCount | int | 1 | Paralel mod aktifken çalışacak iş parçacığı (worker thread) sayısı. |
maxActiveSessions | int | 5 | Eşzamanlı aktif tarayıcı oturumlarını sınırlayan semafor. Ekstra thread'ler yuva boşalana kadar kuyrukta bekler (bkz. sessionWaitSeconds). MultiSessionManager ile açılan adlandırılmış oturumlar da aynı sınıra sayılır. |
sessionWaitSeconds | int | 300 | Bir thread'in boş oturum yuvası için, zaman aşımı hatası vermeden önce bekleyeceği süre (saniye). 0 değeri, boş yuva yoksa beklemeden hata verir. >= 0 olmalıdır. Önceki sürümlerde sabit 30 saniyeydi. |
sharding.enabled | boolean | false | CI ortamlarında testleri paralel worker'lar arasında bölüştürür. |
sharding.total | int | 1 | Toplam paralel CI worker (shard) sayısı. |
sharding.index | int | 0 | Bu worker'ın sıfır-tabanlı indeksi (0 ile total-1 arası). |
sharding.strategy | string | lpt | Bölüştürme stratejisi: lpt (en uzun test önce) veya round-robin. |
sharding.metricsFile | string | target/testfly-metrics.json | LPT stratejisi için geçmiş süre metriklerinin okunduğu dosya. |
Boyutlandırma kuralı: maxActiveSessions değerini en az threadCount kadar yapın (bir test aynı anda ek adlandırılmış oturum açıyorsa her biri için bir yuva daha ekleyin). parallel değeri none değilse ve threadCount, maxActiveSessions değerinden büyükse TestFly başlangıçta uyarı yazar: fazla thread'ler yuva için kuyrukta bekler ve yuva sessionWaitSeconds içinde boşalmazsa zaman aşımı hatasıyla başarısız olur. Çalıştırma reddedilmez.
Bulut Blokları: browserstack & saucelabs
execution:
mode: browserstack
browserstack:
username: ${BS_USER}
accessKey: ${BS_KEY}
os: Windows
osVersion: "11"
browser: chrome
browserVersion: latest
capabilities:
projectName: "E-Ticaret"
buildName: "Build #104"
Zaman Aşımları (Timeouts)
Saniye cinsinden merkezi bekleme süreleri.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
explicit | int | zorunlu, > 0 | WaitEngine, Locator ve assertThat() DOM sorgularında kullanılan zaman aşımı (saniye). |
pageLoad | int | zorunlu, > 0 | WebDriver.Timeouts.pageLoadTimeout() süresi (saniye). |
Yeniden Deneme (Retry)
Başarısız testlerin otomatik olarak yeniden denenmesi.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
enabled | boolean | true | Otomatik test tekrarını küresel olarak açar/kapatır. |
maxAttempts | int | 1 | Test başına toplam deneme sayısı. 1 = tekrar yok, 2 = 1 asıl koşum + 1 tekrar. |
Belli bir test için genel ayarı @Retryable(maxAttempts = 3) anotasyonu ile ezebilirsiniz.
Seçiciler (Locators)
Akıllı seçici sentezi ve dayanıklılık ayarları.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
selfHealing | boolean | false | Açıldığında, waitForVisible sırasında zaman aşımına uğrayan seçiciler alternatif stratejilerle (id, test-id, text, placeholder) otomatik onarılır ve target/healed-locators.json dosyasına yazılır. |
aiHealing | boolean | false | Standart sezgiseller yetersiz kaldığında LLM ile seçici sentezlemeyi açar. |
maxDomTokens | int | 8000 | AI seçici onarımında modele gönderilecek budanmış DOM token bütçesi. |
testIdAttribute | string | data-testid | getByTestId("submit-btn") çağrısının hedeflediği HTML niteliği (data-qa, data-test vb. olarak değiştirilebilir). |
AI Hata Analizi
Yapay zeka destekli hata sınıflandırma ve öneri motoru.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
enabled | boolean | true | Tüm AI yüzeyleri için ana anahtar: act(), aiAssert(), hata analizi, patch üretimi ve AI locator healing. Aşağıdaki ayrıntılı anahtarlar hangilerinin çalışacağını seçer; bu false iken hiçbiri çalışamaz. features.ai üzerinden de ayarlanabilir. |
failureAnalysis | boolean | false | true ise test çöktüğünde hata yığını, adım günlüğü ve DOM durumunu LLM modeline gönderir. |
generatePatch | boolean | false | true ise test başarısız olduğunda target/remediations/ dizininde otomatik Git diff .patch dosyası üretir. |
actionCache | boolean | true | true ise derlenmiş act() planlarını .testfly/action-cache.json dosyasında saklar; önbellek isabeti yeni bir LLM isteğini önler, ancak önbellek okuma ve tarayıcı yürütme süresi devam eder. |
provider | string | claude | AI arka ucu: gemini, claude veya openai-compatible. |
apiKey | string | null | Seçilen sağlayıcı için yetkilendirme anahtarı. |
model | string | null | Hedef model adı. Boş bırakıldığında Gemini için gemini-2.5-flash, Claude için claude-haiku-4-5-20251001 varsayılandır. |
baseUrl | string | null | Özel API adresi (openai-compatible sağlayıcılar için zorunludur). |
language | string | tr | Üretilecek analiz raporunun dili (tr, en, de, fr vb.). |
timeoutSeconds | int | 20 | AI yanıtı için maksimum bekleme süresi (saniye). |
CI Kalite Kapıları
CI ortamı algılama ve derleme başarı kriterleri.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
failOnPassRateBelow | double | 0 | Minimum test başarı yüzdesi (örn: 85.0). Başarı bu oranın altındaysa derleme kırılır. 0 devre dışıdır. |
maxFlakyTests | int | -1 | Tekrar denemeyle geçen (flaky) test sayısı bu sınırı aşarsa derleme kırılır. -1 devre dışıdır. |
captureMetadata | boolean | Otomatik | CI ortam bilgilerini (Git dalı, commit SHA, PR no, build URL) raporlara işler. |
Raporlama (Reporting)
Dahili HTML gösterge paneli (dashboard) raporu, koşum geçmişi arşivleme ve üçüncü taraf test portalları ayarları.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
mergeRuns | boolean | false | true yapıldığında, ardışık test koşumları önceki testleri silmek yerine sonuçları kümülatif tek bir raporda birleştirir. Komut satırından da açılabilir: -Dtestfly.merge=true. |
historyRuns | int | 10 | target/reports/ altında saklanacak ve interaktif HTML raporundaki koşum seçici menüsünde listelenecek maksimum geçmiş koşum sayısı. |
TestFly, ana target/testfly-report.html raporunun yanı sıra her test koşumunu otomatik olarak target/reports/testfly-report-YYYYAAGG-SSddss.html adıyla zaman damgalı olarak arşivler. Raporun üst başlığında bulunan koşum seçici açılır menüsü veya Run History sekmesi üzerinden geçmiş koşumlar, zaman çizelgeleri ve başarı oranları arasında kolayca geçiş yapabilirsiniz.
reportportal
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
enabled | boolean | false | Sonuçları ReportPortal'a aktarmayı açar. |
endpoint | string | null | ReportPortal sunucu adresi (örn: http://reportportal.sirketim.com:8080). |
apiKey | string | null | Kullanıcı API Erişim Belirteci. |
project | string | superadmin_personal | Proje adı. |
launch | string | TestFly Suite | ReportPortal'da açılacak test koşumunun adı. |
type | string | auto | Koşum zenginleştirme tipi: auto (Web vs API otomatik algılar), web veya api. |
mode | string | default | Dinleyici modu: default veya step. |
attributes | string | "" | Koşuma eklenecek etiketler (örn: "env:ci;takim:qa"). |
allure
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
enabled | boolean | false | target/allure-results/ dizinine Allure 2 çıktıları üretir. |
Bildirimler (Notifications)
Test koşumu tamamlandığında webhook üzerinden özet bildirim gönderimi.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
slack.webhookUrl | string | null | Slack Incoming Webhook URL'i. |
slack.notifyOnFailureOnly | boolean | false | Yalnızca başarısız test varsa bildirim gönder. |
teams.webhookUrl | string | null | Microsoft Teams Connector Webhook URL'i. |
teams.notifyOnFailureOnly | boolean | false | Yalnızca başarısız test varsa bildirim gönder. |
API Testi (API Testing)
Yerleşik REST istemcisi (ApiClient & BaseApiTest) yapılandırması.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
baseUrl | string | null | API testleri için varsayılan HTTP adresi (tanımsızsa execution.baseUrl kullanılır). |
baseUrls | map<string,string> | {} | ApiClient.toService(name) / apiToService(name) için adlandırılmış servis adresleri. Eksik servis api.baseUrl değerine düşer; ikisi de yoksa çağrı başarısız olur. |
timeoutSeconds | int | 30 | İstek zaman aşımı (saniye). |
logBody | boolean | false | İstek ve yanıt gövdelerini HTML adım raporuna ekle. |
logContext | boolean | true | Başlıkları, sorgu parametrelerini ve HTTP metotlarını günlüğe yaz. |
prettyLog | boolean | false | JSON gövdelerini biçimlendirerek yaz. |
logCurl | boolean | false | Başarısız isteklerde eşdeğer curl komutunu yazdır. |
truncationLimit | int | 300 | Yanıt gövdelerinin günlüğe yazılacağı maksimum karakter sayısı. |
maskedHeaders | list<string> | ["Authorization", "Cookie", "X-Api-Key"] | Günlüklerde maskelenecek başlıklar. |
SSL ve transport ayarları
| Alan | Tip | Varsayılan | Anlamı |
|---|---|---|---|
api.connectTimeoutSeconds | int | 30 | Alttaki JDK HttpClient bağlantı zaman aşımı. > 0 olmalıdır; aksi halde ilk istek IllegalArgumentException ile başarısız olur. |
api.maxConcurrentRequests | int | 0 | Runtime genelinde eşzamanlı gerçek HTTP gönderim tavanı (adil semafor); 0 sınırsızdır, negatif değerler reddedilir. Mock yanıtlar permit tüketmez. Test kapsamları aktifken değer değiştirilemez. |
api.ssl.trustAll | boolean | false | Her sertifika zincirine güvenir, HTTPS hostname doğrulamasını korur; kapsam başına bir kez WARN adımı loglar. |
api.ssl.trustStore.path | string | — | Özel güven deposunun dosya yolu; bu profil için varsayılan JDK deposunun yerini alır. trustStore bloğu yazıldığında zorunludur. |
api.ssl.trustStore.type | string | PKCS12 | PKCS12 veya JKS; başka değerler reddedilir. |
api.ssl.trustStore.password | string | null | Parolayı ${TESTFLY_TRUSTSTORE_PASSWORD} ile sağlayın; asla commit'lemeyin. |
trustAll: true ile birlikte bir trustStore bloğu tanımlamak Conflicting SSL selection hatası verir. İstek üzerindeki .trustStore(...) veya .trustAllCerts() o istek için YAML SSL seçiminin tamamını geçersiz kılar. .requestTimeout(Duration) veya mevcut .timeout(int) istek başına zaman aşımını değiştirir; son çağrı kazanır. Bu bir socket read-idle timeout değildir. Batch limiti mantıksal çağrıları, global limit gerçek gönderimleri sınırlar.
SSL yapılandırması ve Timeouts & Performance sayfalarına bakın.
api.retry
Geçici sunucu hatalarında (örn: 502, 503, 504) HTTP düzeyinde yeniden deneme politikası:
api:
retry:
enabled: true
maxAttempts: 3
backoffMs: 500
retryOnStatus: [502, 503, 504]
retryOnException: true
api.auth
Testlerde @UseAuth("ad") veya apiClient().withAuth("ad") ile çağrılan adlandırılmış kimlik doğrulama profilleri:
api:
auth:
adminBearer:
type: bearer
token: ${SECRET_TOKEN}
gatewayUser:
type: basic
username: testuser
password: ${USER_PASS}
keyAuth:
type: apiKey
headerName: X-API-Token
apiKey: ${API_KEY}
oauth2Service:
type: oauth2
tokenUrl: https://auth.sirketim.com/oauth/token
clientId: ${CLIENT_ID}
clientSecret: ${CLIENT_SECRET}
Veritabanı (Database)
db() yardımcısı ile veritabanı durumu doğrulama ve veri tohumlama bağlantısı.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
url | string | null | Varsayılan veri kaynağı için JDBC bağlantı dizesi. |
username | string | null | Veritabanı kullanıcısı. |
password | string | null | Veritabanı parolası. |
driver | string | null | JDBC sürücü sınıfı (çoğu popüler veritabanında URL'den otomatik algılanır). |
datasources | map | {} | db("ad") ile erişilen adlandırılmış veri kaynakları. |
E-posta Doğrulama (Email)
Gelen kutusu test entegrasyonları (Mailhog, Mailtrap, Outlook Graph, IMAP).
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
provider | string | mailhog | Aktif sağlayıcı: mailhog, mailtrap, outlook, imap. |
timeoutSeconds | int | 30 | E-postanın gelmesi için bekleme süresi (saniye). |
pollIntervalMs | int | 1000 | Gelen kutusunu kontrol etme aralığı (ms). |
autoClear | boolean | false | Her test metodundan önce gelen kutusunu temizle. |
Performans (Performance)
Web testlerinde Google Core Web Vitals metriklerini otomatik toplama ve doğrulama.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
captureOnEveryTest | boolean | false | Geçen her tarayıcı testinden sonra performans metriklerini bir kez topla. Bir open()/navigasyon hook'u değildir. |
lcpWarnMs | double | 0 | Largest Contentful Paint uyarı eşiği (ms, 0 = devre dışı). |
fcpWarnMs | double | 0 | First Contentful Paint uyarı eşiği (ms). |
ttfbWarnMs | double | 0 | Time to First Byte uyarı eşiği (ms). |
clsWarn | double | 0 | Cumulative Layout Shift skor eşiği (örn: 0.1). |
Görsel Karşılaştırma (Visual)
Piksel tabanlı ekran görüntüsü karşılaştırması ve referans görsel yönetimi.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
baselineDir | string | src/test/resources/baselines | Onaylanmış referans görseller dizini. |
diffDir | string | target/visual-diffs | Fark tespit edilen görsellerin yazılacağı dizin. |
defaultTolerance | double | 0 | İzin verilen piksel fark tolerans oranı (örn: %2 için 0.02). |
updateBaselines | boolean | false | Test koşumundaki güncel ekran görüntülerini referans görsel olarak kaydet. |
failOnNewBaseline | boolean | false | Referans görsel yoksa yeni referans oluşturmak yerine testi başarısız yap. |
Ekran Kaydı ve İzleme
Hata ayıklama, kök neden analizi ve denetim uyumluluğu için tarayıcı oturumu yakalama. Detaylar için Video Kaydı Kılavuzu sayfasına bakın.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
recording.enabled | boolean | false | Web UI video kaydını açıp kapatan ana anahtar. |
recording.mode | string | retain-on-failure | retain-on-failure: Test geçerse kareleri atar, kalırsa video üretir.on: Tüm testleri kaydeder.off: Video kaydını kapatır. |
recording.format | string | mp4 | Video formatı: mp4 (saf Java H.264 video, varsayılan) veya gif (hareketli GIF). |
recording.fps | int | 2 | Saniyede yakalanan kare hızı (önerilen 2–5). |
recording.maxDurationSeconds | int | 60 | Test başına izin verilen maksimum video uzunluğu (saniye). |
recording.cdp | boolean | true | True olduğunda Chrome/Edge üzerinde CDP screencast kullanarak test hızını düşürmeden kayıt alır. |
tracing.enabled | boolean | false | Zaman tüneli, tıklanabilir adım ekran görüntüleri ve hata anı görseli içeren bağımsız HTML izleme dosyası üretir (target/traces/{Class}/{method}-trace.html). |
tracing.captureOnPass | boolean | false | Başarılı testlerde de izleme kaydeder. |
Karantina (Quarantine)
Kararsız veya bakım altındaki testlerin otomatik yönetimi.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
enabled | boolean | true | testfly-quarantine.yml içinde listelenen veya Cucumber etiketi alan testleri otomatik atlar. |
cucumberTag | string | quarantine | Karantinadaki senaryoları belirten Cucumber etiketi (@ olmadan). |
Kararsızlık Takibi (Flakiness)
Geçmiş test kararlılık skorlaması ve kırılgan test önleme.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
historyRuns | int | 20 | Skorlama için incelenecek geçmiş çalıştırma sayısı. |
highRiskThreshold | double | 33.0 | Yüksek riskli sayılacak hata yüzdesi. |
failOnHighFlakiness | boolean | false | Yüksek riskli test varsa derlemeyi başarısız sayar. |
Test Yönetim Sistemleri
Test sonuçlarını ve koşum bağlantılarını Jira ve TestRail'e otomatik aktarır.
testmanagement:
testrail:
enabled: true
url: https://sirketim.testrail.io
username: ${TR_USER}
apiKey: ${TR_KEY}
projectId: 1
suiteId: 2
autoCreateRun: true
xray:
enabled: true
mode: cloud # cloud | server
clientId: ${XRAY_ID}
clientSecret: ${XRAY_SECRET}
projectKey: PROJ
testPlanKey: PROJ-12
Saat ve Ağ Müdahalesi
clock.injectHeader: Tarayıcı isteklerine sahte tarih HTTP başlığı ekler (varsayılanfalse).clock.headerName: Özel başlık adı (varsayılan"X-Mock-Date").network.interceptEnabled: Chrome DevTools Protokolü üzerinden ağ trafiğine müdahale ve stubbing'i açar (varsayılanfalse).network.blockUrls: Eşleşen URL isteklerini ağ düzeyinde global olarak engeller (örn: reklamlar, izleyiciler) (varsayılan:[]).
Yük Testi (Load Testing)
Gatling ve Java Sanal İş Parçacığı (Virtual Threads) tabanlı eşzamanlı yük testi koşturma motoru ayarları. Detaylı bilgi için Yük Testi Başlangıç Rehberi ve Yük Testi Konfigürasyonu sayfalarına bakın.
| Özellik | Tip | Varsayılan | Açıklama |
|---|---|---|---|
enabled | boolean | false | Ayrılmış etkin bayrak (features.loadtest ile geçersiz kılınabilir); mevcut LoadTestRunner.run() yolu bu değeri uygulamaz. |
baseUrl | string | null | Senaryo/annotation önceliğinden sonra kullanılan yük testi adresi. Gatling execution.baseUrl değerine düşer; JDK motoru açık bir load/senaryo/annotation adresi gerektirir. |
engine | string | auto | Çalıştırma motoru: auto (varsa Gatling, yoksa JDK), gatling (kesinlikle Gatling gerektirir), jdk (yerel sanal iş parçacıkları / virtual threads). |
users | int | 10 | Kodda belirtilmediğinde kullanılacak varsayılan eşzamanlı kullanıcı sayısı. |
rampUp | string | 10s | Zirve kullanıcı sayısına ulaşırken geçecek kademeli artış süresi (örn: 10s, 1m). |
hold | string | 30s | Zirve kullanıcı yükünün korunacağı süre (örn: 30s, 5m). |
cooldown | string | 5s | Test bitimindeki kademeli soğuma süresi (örn: 5s). |
maxUsers | int | 1000 | İzin verilen tavan kullanıcı sayısı (güvenlik sınırı). |
resultsDir | string | target/loadtest | Yük testi metrik ve rapor dosyalarının yazılacağı dizin. |
reportEnabled | boolean | true | Müstakil HTML yük testi raporunun ve Gatling bağlantılarının üretilmesini sağlar. |
requestTimeoutSeconds | int | 30 | HTTP bağlantı ve istek zaman aşımı süresi (saniye). |
Doğrulama ve Başlatma Tanılaması
Yapılandırma doğrulaması toplu değil, aşamalı ve ilk hatada duran bir süreçtir:
- SnakeYAML, eşleşen bir property bulunmayan anahtarları stderr'e yazar ve yok sayar.
ConfigurationLoader, tarayıcı adı (veya matrix), execution modu ve pozitif explicit/page-load timeout değerleri ister.- Ardından
ExecutionValidatorparalel modu, thread/session sınırlarını ve ilgili execution kısıtlarını doğrular. - Bulut kimlik bilgileri gibi sağlayıcıya özel gereksinimler sağlayıcı oluşturulurken kontrol edilir. Loader bu hataları toplamaz ve daha önce gösterilen biçimde
execution.baseUrldoğrulaması yapmaz.