Menu

Menangkap email pengujian di CI tanpa layanan luar

Menangkap email pengujian di dalam rantai integrasi membuat pengujian cepat, stabil, dan tidak membocorkan isi surat ke pihak ketiga.

Diterbitkan

  • integrasi berkelanjutan
  • pengujian
  • surat

Menangkap email pengujian secara lokal berarti mengarahkan surat yang dikirim aplikasi Anda ke sebuah penerima kecil di mesin pengujian, bukan ke layanan surat sungguhan di internet. Suratnya berhenti di situ, bisa dibaca langsung oleh pengujian, dan hilang bersama lingkungan yang menjalankannya. Perubahan kecil ini menghilangkan sebagian besar kerapuhan yang biasanya menyertai pengujian berbasis surat.

Mengapa layanan surat luar merepotkan di CI

Rantai integrasi berjalan puluhan kali sehari, di mesin yang mungkin baru dibuat beberapa detik sebelumnya. Bila setiap jalannya harus menghubungi layanan surat di internet, muncul beberapa masalah sekaligus.

  • Pengujian menjadi lambat, karena setiap pemeriksaan menunggu perjalanan surat melintasi jaringan.
  • Pengujian menjadi tidak dapat diandalkan, karena gangguan di pihak lain membuat pengujian Anda gagal tanpa ada yang salah pada kode Anda.
  • Pengujian menjadi tidak dapat dijalankan tanpa internet, sehingga membangun di mesin terbatas atau di jaringan tertutup menjadi sulit.
  • Kredensial layanan surat harus tersedia di lingkungan pengujian, dan itu menambah satu rahasia lagi yang harus dijaga.
  • Isi surat, yang memuat kode dan tautan masuk, meninggalkan sistem Anda dan tersimpan di pihak lain.

Semua masalah itu hilang bila suratnya tidak pernah keluar dari mesin pengujian.

Bentuk penangkapan lokal

Gagasannya sederhana. Aplikasi Anda sudah punya satu titik pengaturan yang menentukan bagaimana surat dikirim keluar. Di lingkungan pengujian, titik itu diarahkan ke sebuah penerima sederhana yang berjalan di mesin yang sama. Penerima itu menerima suratnya, menyimpannya, dan menyediakan cara membacanya kembali.

Penerima tersebut bisa menyimpan hasilnya di dalam memori selama proses berjalan, atau menuliskan setiap surat sebagai berkas di sebuah direktori sementara. Dua pilihan itu punya sifat yang berbeda. Penyimpanan di memori cepat tetapi hilang seluruhnya ketika prosesnya berhenti. Penyimpanan sebagai berkas bertahan lebih lama dan berguna ketika Anda perlu memeriksa surat setelah pengujian berakhir, misalnya untuk menelusuri kegagalan di malam hari.

Yang penting, pengujian Anda berkomunikasi dengan penerima itu melalui perantara yang sama seperti biasa. Tidak ada bagian kode yang perlu diubah hanya karena lingkungannya berbeda, sehingga jalur yang diuji tetap jalur yang sama dengan yang dipakai di produksi.

Apa yang menjadi lebih baik, apa yang hilang

Yang menjadi lebih baik: pengujian berjalan dalam hitungan detik, hasilnya sama setiap kali, dan tidak memerlukan internet. Anda juga bisa mengirim seratus surat dalam satu rangkaian pengujian tanpa khawatir dianggap sebagai pengirim yang mencurigakan oleh pihak lain.

Yang hilang: pengujian tidak lagi membuktikan bahwa surat benar-benar bisa dikirim ke dunia luar. Penerima lokal tidak memeriksa pengaturan keaslian pengirim, tidak menilai reputasi domain Anda, dan tidak pernah menolak surat karena isinya dianggap mencurigakan. Jadi penangkapan lokal membuktikan bahwa aplikasi Anda membentuk dan mengirim surat dengan benar, bukan bahwa suratnya akan sampai ke kotak surat sungguhan.

Karena itu, banyak tim memakai keduanya. Penangkapan lokal untuk setiap perubahan kode, dan pemeriksaan ke jalur sungguhan untuk perubahan yang menyentuh konfigurasi pengiriman atau templat surat.

Apakah pengujian jadi tidak realistis?

Tidak, selama Anda sadar apa yang diuji. Sebagian besar cacat pada surat bukan berasal dari jaringan, melainkan dari isi dan alurnya: variabel yang tidak terisi, tautan yang salah, penerima yang keliru, dan pemicu yang terlewat. Semua itu tetap bisa ditemukan oleh penerima lokal.

Yang perlu ditambahkan agar pengujian tetap dekat dengan kenyataan adalah pemeriksaan isi yang rinci. Jangan hanya memastikan sebuah surat terkirim; periksa penerimanya, subjeknya, keberadaan tautan yang diharapkan, dan tidak adanya penanda pengganti yang tertinggal di dalam teks.

Bagaimana menangani banyak pengujian sekaligus?

Bila beberapa pengujian berjalan bersamaan pada mesin yang sama, dua hal bisa saling mengganggu. Pertama, perebutan port penerima: dua proses tidak bisa memakai port yang sama. Kedua, perebutan isi kotak: pengujian yang membaca surat pertama bisa mengambil surat milik pengujian lain.

Solusi yang paling sederhana adalah memberi setiap pengujian alamatnya sendiri, lalu menyaring berdasarkan alamat itu. Dengan begitu, meskipun semuanya berbagi satu penerima, setiap pengujian hanya melihat suratnya sendiri. Solusi lain adalah menjalankan penerima yang berbeda untuk setiap rangkaian pengujian, meski cara ini lebih berat untuk dijalankan.

Yang sebaiknya dihindari adalah menunggu jumlah detik tertentu lalu membaca surat apa saja yang ada di kotak. Cara itu gagal di mesin yang sibuk dan membuang waktu di mesin yang cepat. Gantilah dengan pemeriksaan berulang sampai surat yang diharapkan muncul, disertai batas waktu keseluruhan.

Kotak sementara untuk kasus yang butuh jaringan sungguhan

Penangkapan lokal tidak menjawab pertanyaan apakah surat Anda bisa melewati jaringan sungguhan. Untuk pertanyaan itu, email sementara di situs ini bisa dipakai sebagai tujuan sementara: buat alamat, picu pengiriman dari sistem Anda, lalu periksa apakah suratnya benar-benar muncul.

Batasan yang perlu dipegang: kotak ini disediakan untuk pengujian dan penerimaan pesan sementara, jadi jangan memakainya untuk korespondensi nyata, jangan mengirimkan data pribadi orang lain ke sana, dan jangan menganggapnya sebagai alamat resmi.

Untuk pengembang: port, isolasi, dan asersi

Beberapa kebiasaan membuat penangkapan surat bertahan lama di dalam rantai integrasi.

Tentukan port penerima lewat konfigurasi, bukan tertanam di dalam kode. Mesin pengujian sering menjalankan beberapa pekerjaan sekaligus, dan konfigurasi membuat bentrokan mudah dihindari. Bila port yang dipilih sedang dipakai, tampilkan kegagalan yang jelas di awal, bukan galat yang membingungkan di tengah pengujian.

Berikan setiap kasus uji alamatnya sendiri, lalu saring berdasarkan alamat itu. Pola ini menyelesaikan dua masalah sekaligus: surat dari kasus lain tidak mengganggu, dan Anda bisa melacak kembali kasus mana yang menghasilkan pesan tertentu.

Asersikan isi, bukan hanya keberadaan. Periksa penerima, subjek, dan tautan yang diharapkan. Untuk kode, pastikan kode yang diambil memang berasal dari surat terbaru untuk alamat itu, seperti diuraikan pada tulisan tentang kode OTP di pengujian otomatis.

Jangan pernah melemahkan pengamanan hanya demi pengujian. Membebaskan pembatasan pengiriman agar pengujian lebih mudah adalah cara tercepat membuat cacat yang sama lolos ke produksi. Bila pembatasan itu mengganggu pengujian, ujilah pembatasannya secara terpisah dan pastikan perilakunya benar, seperti pada pengujian verifikasi email.

Terakhir, simpan surat mentahnya ketika pengujian gagal. Isi surat yang utuh sering menjadi satu-satunya petunjuk yang menjelaskan mengapa sebuah tautan tidak berfungsi. Namun berhati-hatilah: surat yang utuh bisa memuat kode yang masih berlaku, jadi jangan biarkan berkas itu tersimpan lama atau terbuka bagi siapa saja. Sebaiknya tempatkan berkas itu di direktori sementara yang ikut terhapus bersama lingkungan pengujian, bukan di tempat yang dipakai bersama antar pekerjaan.

Langkah berikutnya

Ubah satu rangkaian pengujian terlebih dahulu agar suratnya berhenti di mesin lokal, lalu hitung selisih waktu jalannya. Setelah itu, tambahkan satu pemeriksaan berkala ke jalur jaringan sungguhan memakai kotak sementara untuk memastikan konfigurasi pengiriman Anda tetap sehat.

Lanjut membaca

Artikel tentang Email sementara (sekali pakai / 10 menit)