Dalam piramida pengujian End-to-End (E2E), pengujian menempati salah satu anak tangga teratas. Dengan menulis satu pengujian E2E, Anda dapat yakin dengan hasil logika aplikasi Anda, menguji integrasi dengan sistem lain, dan membuat "kontrak" untuk aplikasi Anda.
Sayangnya, banyak rekan kerja saya tidak menulis tes E2E. Sebagian karena mereka langsung menuju pengujian unit dan berpikir itu lebih baik karena sejumlah alasan, termasuk tren TDD. Sebagian karena mereka yakin bahwa tes E2E sulit untuk ditulis, mereka membutuhkan waktu lama untuk melaksanakannya, dan terdapat masalah dengan instrumentasi.
Mari kita pilah pendapat ini dan lihat kelebihan yang ditawarkan pengujian E2E.
Terminologi
Mari kita letakkan jenis tes otomatis di bawah tes E2E. Autotest ini harus mencakup semua fungsi layanan dari sudut pandang klien. Mereka melakukan ini dengan mensimulasikan interaksi klien yang sebenarnya, baik itu permintaan HTTP atau mengklik tombol di UI.
Pendekatan pengujian unit lebih baik
Menulis unit test, menurut pengalaman saya, membutuhkan waktu lebih lama daripada tes E2E. Ya, pada awalnya Anda harus mencari tahu bagaimana tes E2E lebih baik untuk ditulis, tetapi hal yang sama berlaku untuk tes unit.
Di sisi lain, sebagai hasilnya, satu pengujian E2E mencakup lebih banyak kode daripada satu pengujian Unit, meskipun mungkin memerlukan lebih sedikit baris dibandingkan dengan rangkaian pengujian unit yang serupa.
Anda tidak perlu membuang waktu untuk memahami cara memalsukan dependensi dengan benar, karena sistem eksternal menjadi mereka dalam pengujian E2E, dan interaksi dengan layanan yang sedang diuji dibangun di atas prinsip "kotak hitam".
Anda tidak perlu memeriksa semua kondisi batas untuk metode kelas tunggal. Hal ini meningkatkan fleksibilitas bekerja dengan kode, karena tidak perlu memfaktorkan ulang seluruh rangkaian pengujian dengan perubahan sekecil apa pun dalam logika internal aplikasi.
, , 100 ( ), .
backend- , API HTTP ( GraphQL) MQ. HTTP, mainstream .
Frontend- , , Web- () . , , , .
E2E , . . .. . , .
E2E
, , .
"" code-coverage. , , , , . exception, , ?
, E2E .
E2E API . , backend, E2E , , frontend .
, , E2E , unit-, .
! , E2E ?