Chromium Chronicle #2: Test Sorunlarıyla Mücadele

2. Bölüm: Vasilii, Münih'ten (Mayıs 2019)
Önceki bölümler

Güvenilir olmayan testler Chrome'da yaygın bir sorundur. Diğer geliştiricilerin verimliliğini etkiler ve zamanla devre dışı bırakılır. Devre dışı bırakılan testler, test kapsamının azalması anlamına gelir.

Öncelik Belirleme Aşaması

Güvenilir olmayan testlerini düzeltmekten dizin SAHİPLERİ sorumludur. Kesintili bir testle ilgili hata aldıysanız birkaç dakika ayırıp hataya ne hata yaptığımızı yorumlayın. Eski bir stabil olmayan testiniz varsa ve sorunun ne olduğundan emin değilseniz testi yeniden etkinleştirmeyi deneyin. Başka bir bileşende sorun olduğu açıkça görülüyorsa hatayı en kısa sürede yeniden atayın. Söz konusu bileşenin sahipleri, başarısızlığı daha iyi değerlendirebilmelidir.

Hata Ayıklama Aşaması

Güvenilir olmayan testleri düzeltmek için bir dizi komut satırı işareti yararlıdır. Örneğin, --enable-pixel-output-in-tests gerçek tarayıcı kullanıcı arayüzünü oluşturur.

Hata ayıklayıcı, gevşekliği ortadan kaldırırsa yedek araçlarınız olmalıdır. Hata ayıklayıcı altında testin hiçbir zaman güvenilir olmaması mümkündür. Bu durumda günlük ifadeleri veya base::debug::StackTrace yararlı olabilir.

Yapılmaması gerekenler

Üretim kodundaki hataların yanı sıra EXPECT__* hatalarının da yaygın nedenlerini göz önünde bulundurun:

  • Yanlış beklentiler (ör. güvenli sayfa HTTPS anlamına gelir; bunun yerine bir yerel ana makine olabilir).
  • Uygun etkinlik beklenmeyen testlerden kaynaklanan yarış koşulları.

[Yapmayı test etmeyin][uygulamayı değil], yalnızca davranışı test edin.

// It takes 2 round trips between the UI and the background thread to complete.
SyncWithTheStore();
SyncWithTheStore();
CheckTheStore();

Bu iki gidiş-dönüş ileride üçe değişebilir ve bu da testin güvenilir olmasına yol açabilir. Ancak yalnızca mağaza durumu önemlidir. Bunun yerine, mağaza için bir gözlemci kullanın.

Yapılmaması gerekenler

Aşağıda örnekleri verilen yaygın kalıplara dikkat edin:

Submit TestPasswordForm();
// Wait until things settle down.
RunLoop().RunUntilIdle();
CheckCredentialPromptVisible();

Bir tarayıcı testinden alınmış yukarıdaki gibi bir snippet neredeyse büyük olasılıkla yanlıştır. Bazı kullanıcı arayüzleri görünmeden önce farklı işlemlerde ve iş parçacıklarında gerçekleşmesi gereken birçok etkinlik vardır.

Yapılması gerekenler

Bu, doğru bir çözümdür:

SubmitTestPasswordForm();
WaitUntilCredentialPromptVisible();

WaitUntilCredentialPromptVisible() ürününün kullanıcı arayüzünü kontrol etmediği varsayılırsa yukarıdaki düzeltme doğrudur. Tarayıcı testleri, "odak kayboldu" veya "pencere ön plana geldi" gibi harici kullanıcı arayüzü etkinliklerine bağlı olmamalıdır. İstemin yalnızca tarayıcı penceresi etkin durumdayken gösterildiği bir uygulama düşünün. Böyle bir uygulama doğru olur, ancak gerçek aralığın kontrol edilmesi testi güvenilir hale getirir.

Düzeltme Sonrası Aşama

Test düzeltildikten sonra yerel olarak yüzlerce kez çalıştırın. Flakiness Portal'ı takip edin.