Gerçek bir hatayı kararsız bir testten nasıl ayırt ederim?
Yeniden denemeleri kapatıp testi birkaç kez çalıştırın ve sonuçları sayın. Gerçek bir hata her çalıştırmada aynı şekilde başarısızlığa yol açar; kararsız bir test ise hiçbir şey değişmediği hâlde bazı çalıştırmalarda başarılı, bazılarında başarısız olur. Aşağıdaki örnek, Playwright kurulu herhangi bir makinede tam olarak bunu yapar ve ardından Nexus Studio'nun her sonucu nasıl ele aldığını gösterir.
Nexus Studio ekibi, Verdict System LLC tarafından. 27 Ekim 2026.
Bunları bir dakikada nasıl ayırt edebilirim?
Yeniden denemeleri kapatıp testi art arda birkaç kez çalıştırın. Playwright bunu iki bayrakla yapar: yeniden denemenin bir başarısızlığı gizleyememesi için --retries=0 ve her testi altı kez çalıştıran --repeat-each=6. Ardından her testin sonuçlarını sayın.
- Her seferinde başarısız oldu: aksini gösterene kadar bunu bir hata olarak değerlendirin. Her çalıştırmada yaşanan başarısızlık yine de engellenen bir istek veya erişilemeyen bir sunucu gibi ortam kaynaklı bir sorundan doğabilir; bu yüzden önce hata iletisini okuyun.
- Bazı çalıştırmalarda başarılı, bazılarında başarısız oldu: test kararsızdır. Bu çalıştırmalar arasında kod ve test değişmediğine göre uygulamada veya testte kararsız bir unsur vardır.
- Her seferinde başarılı oldu: henüz görünen bir sorun yok. Elli çalıştırmada bir ortaya çıkan bir kusur için daha fazla çalıştırma yapmak veya testin Geçmişine bakmak gerekir.
Bunu çalıştırılabilir bir örnek üzerinde deneyebilir miyim?
Bunu bug-or-flaky.spec.js adıyla kaydedin. İlk test kararsızlığı taklit eder: her üç çalıştırmadan birinde başarısız olur. İkinci testte gerçek bir hata vardır: sayfada "Welcome" yazar, test ise "Welcome back" bekler; bu yüzden hiçbir çalıştırma başarılı olamaz.
import { test, expect } from '@playwright/test';
// Fails on its first attempt of every third run, passes otherwise: a simulated flake.
test('flaky: a slow load now and then', async ({ page }, info) => {
await page.setContent('<h1>Welcome</h1>');
expect((info.repeatEachIndex + info.retry) % 3, 'simulated slow load').not.toBe(0);
});
// Fails the same way every time: the heading says "Welcome", the test expects "Welcome back".
test('real bug: wrong heading', async ({ page }) => {
await page.setContent('<h1>Welcome</h1>');
await expect(page.locator('h1')).toHaveText('Welcome back', { timeout: 300 });
});
Yeniden denemeleri kapatıp altı kez çalıştırın:
npx playwright test --retries=0 --repeat-each=6
Playwright 8 başarısız ve 4 başarılı sonuçla tamamlanır. Soruyu yanıtlayan şey test başına sonuç sayısıdır; liste raporlayıcısı da bunu satır satır yazdırır:
flaky: a slow load now and then 4 passed, 2 failed
real bug: wrong heading 0 passed, 6 failed
Şimdi iki yeniden denemeye izin vererek bir kez çalıştırın:
npx playwright test --retries=2
Playwright her grupta bir testle tamamlanır. Kararsız test ilk denemesinde başarısız olur ve 1. yeniden denemede başarılı olur. Gerçek hata içeren test üç denemede de başarısız olur.
1 failed
bug-or-flaky.spec.js:10:1 › real bug: wrong heading
1 flaky
bug-or-flaky.spec.js:4:1 › flaky: a slow load now and then
Başarılı bir yeniden deneme, uygulamanın sorunsuz olduğu anlamına mı gelir?
Hayır. Başarılı olan bir yeniden deneme, yalnızca denemelerin farklı sonuçlar verdiğini gösterir. Çalıştırma yeşile döner ve kimse incelemezse uygulamadaki yarış durumu, paylaşılan veri veya yavaş bir bağımlılık gibi aralıklı ortaya çıkan bir kusur görünmez hâle gelir. Üstelik bunlar, bulunması en maliyetli kusurlar arasındadır. Kararsız bir sonucu, görmezden gelinecek bir başarı olarak değil, bir bulgu olarak değerlendirin ve sorunun testte olduğunu varsaymayın.
Nexus Studio her sonucu nasıl ele alır?
Nexus Studio her denemeyi kaydeder ve sonuca ayrı bir değerlendirme atar; böylece yeniden deneme, bir kusuru sıradan bir yeşil çalıştırmaya dönüştürmez.
- FLAKY: test başarısız olmuş, ardından bir yeniden denemede başarılı olmuştur; ancak hiçbir şey düzeltilmemiştir. Çıkış kodu 0 olur, dolayısıyla derleme başarısız sayılmaz; rapor ve Geçmiş ise bu çekinceyi gösterir.
- BREACHED: test tek denemede başarısız olmuştur ve hatayı açıklayan herhangi bir ortam veya test altyapısı örüntüsü yoktur. Çıkış kodu 1 olur.
- BREACHED_FLAKY: test, önceki bir yeniden denemenin ardından son denemesinde başarısız olmuştur ve bunu açıklayan herhangi bir ortam örüntüsü yoktur. Çıkış kodu 1 olur. Hata kaydı açmadan önce denemeleri karşılaştırın.
Geçmiş, her testin her çalıştırması için bir satır tutar; böylece yeşil, kırmızı ve yeniden yeşil olan bir test, yeniden çalıştırmalar arasında kaybolmak yerine bir eğilim olarak görünür. Kararsız testler kılavuzu, her değerlendirmenin oluşturduğu dosyaları listeler.
Sınırlar nelerdir?
- Örnekteki kararsızlık, tekrarlanabilmesi için aritmetik işlemlerle taklit edilir. Gerçek kararsızlığın bir nedeni vardır ve bunu bulmak hâlâ bir insanın yapması gereken bir iştir.
- Altı çalıştırma, istatistiksel bir değerlendirme değil, hızlı bir ön kontroldür. Elli çalıştırmada bir ortaya çıkan bir başarısızlık, altı çalıştırmada hiç görülmeyebilir.
- Her çalıştırmada başarısızlık yaşanması, her zaman uygulamanızda bir hata olduğu anlamına gelmez: yavaş bir ağ, erişim engeli sayfası veya yanıt vermeyen bir tarayıcı da testleri başarısız kılabilir. Yanıltıcı başarısızlıklar kılavuzu, bunları nasıl ayırt edeceğinizi gösterir.
- Yeniden denemeler kapalıyken Nexus Studio'da aralıklı olarak oluşan bir hata BREACHED olarak sınıflandırılır, çünkü FLAKY ile sıradan bir başarısızlığı ancak yeniden deneme ayırt edebilir. Sınıflandırma hata metnine dayanır, bu nedenle bir sonuç sizi şaşırttığında metadata.json dosyasını açın.
Nerede görebilirim?
Sonuç kılavuzu, motorun 14 sonucun tümünü hangi sırayla belirlediğini açıklar; Kanıt sayfası ise başarısız olan bir testi, geride bıraktığı her dosya üzerinden takip eder. 30 günlük deneme sürümü aynı motoru kendi testleriniz üzerinde çalıştırır.