Episode 2: oleh Vasilii di Munich (Mei 2019)
Episode sebelumnya
Pengujian tidak stabil adalah masalah umum di Chrome. Mereka mempengaruhi produktivitas pengembang lain, dan menjadi nonaktif seiring waktu. Pengujian yang dinonaktifkan berarti cakupan pengujian berkurang.
Tahap Triase
PEMILIK direktori bertanggung jawab untuk memperbaiki pengujian yang tidak stabil. Jika Anda menerima {i>bug<i} tentang pengujian yang tidak stabil, luangkan beberapa menit dan mengomentari masalah yang ada. Jika Anda memiliki pengujian lama yang tidak stabil dan tidak jelas apa masalahnya, coba aktifkan kembali pengujian tersebut. Tetapkan kembali bug sesegera mungkin jika jelas merupakan masalah di komponen lain. Pemilik komponen itu harus memiliki penilaian yang lebih baik tentang kegagalan,
Tahap Proses Debug
Sejumlah flag command line berguna untuk
memperbaiki pengujian yang tidak stabil. Misalnya, --enable-pixel-output-in-tests
akan melakukan {i>render<i} ke
UI {i>browser<i} yang sebenarnya.
Memiliki alat penggantian jika debugger menghilangkan fungsi yang tidak berfungsi. Penting
mungkin, di bawah debugger, pengujian itu tidak pernah tidak stabil. Dalam hal ini, catat
atau base::debug::StackTrace
dapat berguna.
Perhatikan alasan umum kegagalan EXPECT__*
selain bug dalam produksi
kode:
- Ekspektasi yang salah (mis., halaman yang aman berarti HTTPS; dapat berupa localhost).
- Kondisi balapan karena pengujian tidak menunggu acara yang tepat.
[Jangan uji implementasi][not-implementation] tetapi perilakunya.
// It takes 2 round trips between the UI and the background thread to complete.
SyncWithTheStore();
SyncWithTheStore();
CheckTheStore();
Dua perjalanan bolak-balik dapat berubah menjadi tiga perjalanan di masa mendatang, sehingga pengujian tidak stabil. Namun, hanya status toko yang relevan. Sebagai gantinya, gunakan observer untuk Anda.
Waspadai pola umum seperti berikut:
Submit TestPasswordForm(); // Wait until things settle down. RunLoop().RunUntilIdle(); CheckCredentialPromptVisible();
Cuplikan seperti pengujian browser di atas hampir pasti salah. Ada banyak peristiwa yang harus terjadi dalam berbagai proses dan sebelum beberapa UI muncul.
Berikut ini adalah perbaikan yang benar:
SubmitTestPasswordForm(); WaitUntilCredentialPromptVisible();
Perbaikan di atas benar dengan asumsi bahwa
WaitUntilCredentialPromptVisible()
tidak benar-benar memeriksa UI.
Pengujian browser tidak boleh bergantung pada peristiwa UI eksternal seperti "fokus hilang"
atau "jendela menjadi latar depan". Bayangkan sebuah implementasi di mana prompt
hanya muncul saat jendela browser aktif. Penerapan seperti ini
benar; namun, memeriksa jendela yang sebenarnya akan membuat pengujian menjadi tidak stabil.
Tahap Setelah Perbaikan
Setelah pengujian diperbaiki, jalankan pengujian ratusan kali secara lokal. Perhatikan Portal Kegagalan.