How Guru’s Engineers Use Cypress for Better Burn Testing
Butuh cara yang lebih baik untuk menangani pengujian pembakaran? Dua dari insinyur front end kami telah menemukan cara untuk menggunakan Cypress untuk meningkatkan cara mereka menangani QA.
Kami semua tentang berbagi pengetahuan di Guru, dan ketika kami menemukan sesuatu yang baru dan membantu, kami ingin dunia tahu! Tim teknik kami menggunakan Cypress dalam pengujian dan proses QA mereka. Mereka telah menemukan cara baru untuk membantu menjalankan pengujian pembakaran yang lebih baik, dan mereka ingin berbagi proses baru dan ditingkatkan ini dengan insinyur dan penguji lain.
Selama setahun terakhir, kami fokus untuk meningkatkan cakupan pengujian kami — khususnya, pengujian end-to-end yang memastikan berbagai bagian alur produk kami berfungsi dengan benar saat kami melakukan pembaruan kode. Untuk jenis pengujian ini, kami memanfaatkan alat yang disebut Cypress yang menyimulasikan perilaku pengguna dengan aplikasi web kami dan ekstensi Google Chrome. Rangkaian pengujian ini berjalan pada setiap permintaan menarik untuk memastikan kode baru tidak merusak hal-hal di UI kami. Kami juga ingin memblokir rilis yang keluar jika rangkaian Cypress kami gagal di cabang produksi kami.
Apa yang kami cari dalam pengujian tradisional
Salah satu masalah yang kami hadapi adalah melihat beberapa pengujian kami gagal, tetapi bukan karena alasan yang terkait dengan UI atau kode. Jadi, bagaimana Cypress membantu kami dalam kasus-kasus ini? Kami memiliki Cypress bertindak sebagai pengguna yang perilakunya dapat kami definisikan. Ada beberapa variabel yang bisa menyebabkan Cypress memberi tahu kami bahwa ada kegagalan, tetapi dari perspektif pengguna, tidak ada yang tampak salah.
Misalnya, mungkin ada pengujian yang mengatakan, “Pergi ke bagian ini dari aplikasi web > Tambahkan kartu Guru baru > Harapkan untuk melihat status setelah pembuatan”. Jika status pemuatan pembuatan kartu menunggu terlalu lama selama seratus milidetik dan Cypress mulai mencari status setelah pembuatan sebelum status tersebut ada, pengujian ini bisa gagal (kebanyakan dari waktu tersebut, pengujian ini akan berhasil). Jika pengujian ini berhasil sekali pada permintaan tarik, kami bisa menggabungkan kode yang terkadang bisa tidak stabil. Namun kami tidak akan tahu apakah ada masalah; pengujian yang berhasil tidak menjamin bahwa kode tersebut benar.
Jenis situasi ini menurunkan keandalan cakupan pengujian kami. Akibatnya, ketika kegagalan pengujian muncul dalam jalur penyebaran kami, kami perlu memverifikasi apakah ini adalah masalah dengan UI — atau dengan pengujian. Untuk memperbaiki ini, kami mulai memikirkan cara-cara untuk mendeteksi jika sebuah pengujian mungkin gagal sebelum diterapkan ke cabang kode produksi kami.
Bagaimana pengujian pembakaran membantu
Masuki pengujian pembakaran. Pengujian pembakaran adalah proses yang digunakan untuk menguji sesuatu di bawah kondisi yang lebih ketat atau ekstrem. Ini juga kadang-kadang disebut pengujian stres atau pengujian beban, tergantung pada metode atau area spesifik yang diuji.
Di Guru, kami menggunakan pengujian pembakaran sebagai bagian dari rangkaian Cypress kami untuk setiap pengujian baru atau yang dimodifikasi yang ditambahkan ke basis kode kami. Sebelum pengujian ini dapat digabungkan, kami menjalankannya beberapa kali berturut-turut dan semuanya harus berhasil agar dapat melanjutkan ke langkah berikutnya dalam jalur build CircleCI kami.
Langkah ini dilakukan segera sebelum kami menjalankan seluruh rangkaian pengujian Cypress. Keuntungan dari urutan ini adalah jika langkah pengujian pembakaran kami menghasilkan kegagalan, kami dapat menandai seluruh pemeriksaan sebagai kegagalan lebih awal. Melewatkan sisa rangkaian memungkinkan kami menghemat waktu dan mengurangi jumlah siklus yang diperlukan untuk memastikan bahwa pengujian yang baru diperkenalkan adalah seandal dan tahan kesalahan seperti yang kami butuhkan.
Untuk menemukan file yang kami cari, kami menggunakan git diff di cabang saat ini dan menyuplai outputnya sebagai parameter ke alat yang disebut cypress-repeat yang memungkinkan kami menjalankan pengujian tersebut sebanyak yang ditentukan, secara efektif menambahkan pengujian pembakaran sebagai langkah dalam rangkaian pengujian end-to-end kami.
Hasil
Membuat perubahan ini pada rencana pengujian kami telah menghasilkan hasil yang cukup positif. Bagi kami, menambahkan pengujian pembakaran dapat mengurangi waktu yang diperlukan untuk menemukan pengujian yang tidak andal hingga 30 menit. Ini juga meningkatkan waktu penyelesaian untuk menambahkan fungsionalitas baru. Karena pengujian yang baru ditambahkan sekarang dijalankan lebih dulu, mereka memungkinkan kami untuk memverifikasi stabilitas sebelum melanjutkan ke proses pembangunan lainnya.
Secara keseluruhan, fokus kami yang terus-menerus pada pembuatan proses pengujian kami lebih efisien dan kuat meningkatkan kepercayaan seluruh tim teknik dalam mengirimkan fitur baru dengan cepat. Kami memperbaiki bug lebih cepat dan mempermudah kerja di seluruh basis kode kami. Kami berharap bahwa posting ini membantu pengguna Cypress lainnya membuat pengujian yang lebih baik dan seluruh tim membangun dengan lebih efisien.
Kami semua tentang berbagi pengetahuan di Guru, dan ketika kami menemukan sesuatu yang baru dan membantu, kami ingin dunia tahu! Tim teknik kami menggunakan Cypress dalam pengujian dan proses QA mereka. Mereka telah menemukan cara baru untuk membantu menjalankan pengujian pembakaran yang lebih baik, dan mereka ingin berbagi proses baru dan ditingkatkan ini dengan insinyur dan penguji lain.
Selama setahun terakhir, kami fokus untuk meningkatkan cakupan pengujian kami — khususnya, pengujian end-to-end yang memastikan berbagai bagian alur produk kami berfungsi dengan benar saat kami melakukan pembaruan kode. Untuk jenis pengujian ini, kami memanfaatkan alat yang disebut Cypress yang menyimulasikan perilaku pengguna dengan aplikasi web kami dan ekstensi Google Chrome. Rangkaian pengujian ini berjalan pada setiap permintaan menarik untuk memastikan kode baru tidak merusak hal-hal di UI kami. Kami juga ingin memblokir rilis yang keluar jika rangkaian Cypress kami gagal di cabang produksi kami.
Apa yang kami cari dalam pengujian tradisional
Salah satu masalah yang kami hadapi adalah melihat beberapa pengujian kami gagal, tetapi bukan karena alasan yang terkait dengan UI atau kode. Jadi, bagaimana Cypress membantu kami dalam kasus-kasus ini? Kami memiliki Cypress bertindak sebagai pengguna yang perilakunya dapat kami definisikan. Ada beberapa variabel yang bisa menyebabkan Cypress memberi tahu kami bahwa ada kegagalan, tetapi dari perspektif pengguna, tidak ada yang tampak salah.
Misalnya, mungkin ada pengujian yang mengatakan, “Pergi ke bagian ini dari aplikasi web > Tambahkan kartu Guru baru > Harapkan untuk melihat status setelah pembuatan”. Jika status pemuatan pembuatan kartu menunggu terlalu lama selama seratus milidetik dan Cypress mulai mencari status setelah pembuatan sebelum status tersebut ada, pengujian ini bisa gagal (kebanyakan dari waktu tersebut, pengujian ini akan berhasil). Jika pengujian ini berhasil sekali pada permintaan tarik, kami bisa menggabungkan kode yang terkadang bisa tidak stabil. Namun kami tidak akan tahu apakah ada masalah; pengujian yang berhasil tidak menjamin bahwa kode tersebut benar.
Jenis situasi ini menurunkan keandalan cakupan pengujian kami. Akibatnya, ketika kegagalan pengujian muncul dalam jalur penyebaran kami, kami perlu memverifikasi apakah ini adalah masalah dengan UI — atau dengan pengujian. Untuk memperbaiki ini, kami mulai memikirkan cara-cara untuk mendeteksi jika sebuah pengujian mungkin gagal sebelum diterapkan ke cabang kode produksi kami.
Bagaimana pengujian pembakaran membantu
Masuki pengujian pembakaran. Pengujian pembakaran adalah proses yang digunakan untuk menguji sesuatu di bawah kondisi yang lebih ketat atau ekstrem. Ini juga kadang-kadang disebut pengujian stres atau pengujian beban, tergantung pada metode atau area spesifik yang diuji.
Di Guru, kami menggunakan pengujian pembakaran sebagai bagian dari rangkaian Cypress kami untuk setiap pengujian baru atau yang dimodifikasi yang ditambahkan ke basis kode kami. Sebelum pengujian ini dapat digabungkan, kami menjalankannya beberapa kali berturut-turut dan semuanya harus berhasil agar dapat melanjutkan ke langkah berikutnya dalam jalur build CircleCI kami.
Langkah ini dilakukan segera sebelum kami menjalankan seluruh rangkaian pengujian Cypress. Keuntungan dari urutan ini adalah jika langkah pengujian pembakaran kami menghasilkan kegagalan, kami dapat menandai seluruh pemeriksaan sebagai kegagalan lebih awal. Melewatkan sisa rangkaian memungkinkan kami menghemat waktu dan mengurangi jumlah siklus yang diperlukan untuk memastikan bahwa pengujian yang baru diperkenalkan adalah seandal dan tahan kesalahan seperti yang kami butuhkan.
Untuk menemukan file yang kami cari, kami menggunakan git diff di cabang saat ini dan menyuplai outputnya sebagai parameter ke alat yang disebut cypress-repeat yang memungkinkan kami menjalankan pengujian tersebut sebanyak yang ditentukan, secara efektif menambahkan pengujian pembakaran sebagai langkah dalam rangkaian pengujian end-to-end kami.
Hasil
Membuat perubahan ini pada rencana pengujian kami telah menghasilkan hasil yang cukup positif. Bagi kami, menambahkan pengujian pembakaran dapat mengurangi waktu yang diperlukan untuk menemukan pengujian yang tidak andal hingga 30 menit. Ini juga meningkatkan waktu penyelesaian untuk menambahkan fungsionalitas baru. Karena pengujian yang baru ditambahkan sekarang dijalankan lebih dulu, mereka memungkinkan kami untuk memverifikasi stabilitas sebelum melanjutkan ke proses pembangunan lainnya.
Secara keseluruhan, fokus kami yang terus-menerus pada pembuatan proses pengujian kami lebih efisien dan kuat meningkatkan kepercayaan seluruh tim teknik dalam mengirimkan fitur baru dengan cepat. Kami memperbaiki bug lebih cepat dan mempermudah kerja di seluruh basis kode kami. Kami berharap bahwa posting ini membantu pengguna Cypress lainnya membuat pengujian yang lebih baik dan seluruh tim membangun dengan lebih efisien.
Alami kekuatan platform Guru secara langsung - ikuti tur produk interaktif kami