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

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

Güvenilir olmayan testler, Chrome'da yaygın olarak karşılaşılan bir sorundur. Onlar diğer geliştiricilerin üretkenliğini etkileyebilir ve zaman içinde devre dışı bırakılabilir. Testlerin devre dışı bırakılması, test kapsamının daralmasına neden olur.

Önceliklendirme Aşaması

Dizinlerin SAHİPLERİ, güvenilir olmayan testlerini düzeltmekten sorumludur. Güvenilir olmayan bir testle ilgili bir hata aldıysanız birkaç dakika neler yanlış gittiğine dair yorum yazın. Eski bir gevşek testiniz varsa Sorunun ne olduğu anlaşılamadı. Testi tekrar etkinleştirmeyi deneyin. Başka bir bileşende sorun olduğu açıkça belliyse hatayı en kısa sürede yeniden atayın. Bileşenin sahipleri arızayı daha iyi değerlendirmelidir.

Hata Ayıklama Aşaması

Bir dizi komut satırı işareti güvenilir olmayan testler var. Örneğin, --enable-pixel-output-in-tests gerçek tarayıcının kullanıcı arayüzünü oluşturur.

Hata ayıklayıcı, sapmaları ortadan kaldırırsa yedek araçlara sahip olun. İnsanların olması mümkündür. Bu durumda ifadeleri veya base::debug::StackTrace yararlı olabilir.

Yapılmaması gerekenler:

Üretim hataları dışında EXPECT__* hatalarının yaygın nedenlerini unutmayın kod:

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

[Uygulamayı test etmeyin][uygulamayı değil], 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üş gelecekte üçe değişebileceği için testte sorun olabilir. Ancak yalnızca mağaza durumu önemlidir. Bunun yerine, mağaza.

Yapılmaması gerekenler:

Aşağıdakiler gibi yaygın kalıplara dikkat edin:

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

Tarayıcı testinden alınan yukarıdaki gibi bir snippet neredeyse kesinlikle yanlıştır. Farklı süreçlerde ve farklı süreçlerde gerçekleşmesi gereken birçok olay ileti dizileri.

Yapılması gerekenler

Aşağıdaki düzeltme doğru bir çözümdür:

SubmitTestPasswordForm();
WaitUntilCredentialPromptVisible();

Yukarıdaki düzeltme, WaitUntilCredentialPromptVisible(), kullanıcı arayüzünü gerçekten kontrol etmiyor. Tarayıcı testleri harici kullanıcı arayüzü etkinliklerine bağlı olmamalıdır (ör. "odak kaybedildi") veya "pencere ön plan oldu" gibi bir ifade kullanabilirsiniz. İstemin yalnızca tarayıcı penceresi etkin olduğunda görünür. Böyle bir uygulama seçeneğini kullanarak ancak gerçek zaman aralığını kontrol etmek testin güvenilir olmamasına neden olur.

Onarım Sonrası Aşaması

Test düzeltildikten sonra yerel olarak yüzlerce kez çalıştırın. Bir göz atmayı unutmayın: Sadelik Portalı.