Cevap.
Flaky testler, kodda herhangi bir değişiklik olmaksızın geçebilen veya başarısız olabilen testlerdir ve bu durum rastgele dış faktörlerden kaynaklanır. Otomasyona olan güveni sarsar ve CI/CD süreçlerini zorlaştırır.
Soru tarihçesi: Flaky testler ile sorun, kitlesel E2E, entegrasyon ve UI testlerinin ortaya çıkmasıyla bağlamda yaşanmıştır; burada çevrenin ve bağımlı servislerin stabilitesi garanti edilmemektedir. Başlangıçta bu tür hatalar görmezden gelinmiş veya "manuel olarak yeniden başlatılmıştır".
Sorun:
- Flaky testler otomatik testlerin güvenilirliğini azaltır.
- Geliştiriciler gerçek hataları yanlış alarm olarak geçiştirmeye başlar.
- Testlerin bakımı için gereken süre artar ve kararsız sonuçların manuel olarak incelenmesi gerekir.
Çözüm:
- Flaky testlerin ayrı takibi. Etiketlenir (örneğin, @FlakyTest) veya ayrı bir kategoriye ayrılır.
- Otomatik yeniden çalıştırma. Test düştüğünde, X kez tekrar edilir — eğer her zaman düşmüyorsa, test kararsız olarak işaretlenir.
- Kararsızlığın nedenlerini analiz etme: günlüklerin, durum anlık görüntülerinin ve kaynak izleme (örneğin, kararsız ağ, kuyruklar veya GC'nin çalışması) kullanılması.
- Aşamalı düzeltme: test ortamıyla çalışma, senaryoları basitleştirme, kararsız bağımlılıkları mocklama.
Otomatik yeniden deneme için kod örneği:
import pytest
@pytest.mark.flaky(reruns=3, reruns_delay=2)
def test_random_fail():
... # test kodu
Anahtar özellikler:
- Flaky testleri gerçek hatalardan ayırmak önemlidir.
- Sadece "her şeyi yeniden denemek" doğru değildir — gerçek hatalar göz ardı edilmemelidir.
- Testin durumu düzenli olarak analiz edilip belgelenmeli, göz ardı edilmemelidir.
Aldatıcı sorular.
Flaky testler her zaman altyapı sorunlarıyla mı ilişkilidir?
Hayır, flaky sorunları iş mantığı hataları, kodda yarış koşulları, asenkronluk veya zaman yönetimindeki hatalardan kaynaklanabilir.
Başarısız olan testleri yeniden çalıştırmak yeterli midir?
Hayır, yeniden denemeler yalnızca sorunu maskeleyebilir. Nedenlerini bulmak ve gidermek gereklidir.
Tüm kararsız testleri silmek gerekli mi?
Hayır, geçici olarak izole edilmeli ve nedenleri düzeltilmelidir, sonsuza dek çıkarılmamalıdır.
Tipik hatalar ve anti-patentler
- Flaky testlerin göz ardı edilmesi, ciddi hataların kaçırılmasına neden olur.
- Sebep analiz edilmeden kitlesel yeniden deneme yapılması.
- Önemli testlerin flaky olarak işaretlenmesi ve düzeltici eylemde bulunmamak.
Hayattan bir örnek
Olumsuz vaka
Proje içinde flaky testler sadece işaretlenmiş ve daha fazla müdahale edilmemiştir; sorun "çözülemez" olarak değerlendirilmiştir.
Artıları:
- Yanlış "kırmızı" derlemelerin sayısında azalma
Eksileri:
- Gerçek hatalar üretime gider
- Sonuçların sürekli manuel kontrol edilmesi
Olumlu vaka
Her kararsız test için otomatik yeniden deneme ve kararsızlığın iç takibi sağlanmıştır. Sebepler üzerine düzenli ortak incelemeler yapılmış ve hatalar biriktikçe düzeltilmiştir.
Artıları:
- Test sisteminin stabilitesinde aşamalı iyileşme
- Yeni flaky testlerin hızlı tespiti ve düzeltilmesi
Eksileri:
- Kararsızlık analizine düzenli kaynaklar gerekmektedir.