Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Teknik pengujian untuk aplikasi tanpa server
Ada tiga pendekatan utama untuk menjalankan pengujian terhadap kode aplikasi tanpa server: pengujian tiruan, pengujian di cloud, dan pengujian emulasi. Anda biasanya dapat menemukan campuran dari pendekatan ini yang digunakan dalam lingkup proyek tunggal. Misalnya, Anda mungkin menggunakan pengujian tiruan saat mengembangkan kode secara lokal, tetapi kode Anda mungkin diuji di cloud sebagai bagian dari proses integrasi berkelanjutan malam dan pengiriman berkelanjutan (CI/CD).
Pengujian tiruan
Pengujian tiruan adalah strategi di mana Anda membuat objek pengganti dalam kode Anda yang mensimulasikan perilaku layanan cloud. Misalnya, Anda dapat menulis pengujian yang menggunakan tiruan layanan Amazon S3, dan Anda dapat mengonfigurasi tiruan tersebut untuk mengembalikan objek respons tertentu setiap kali metode dipanggil CreateObject. Saat pengujian berjalan, tiruan mengembalikan respons tanpa memanggil Amazon S3 atau titik akhir layanan lainnya.
Objek pengganti ini sering dihasilkan oleh kerangka kerja tiruan untuk mengurangi jumlah implementasi yang diperlukan untuk pengujian yang diberikan. Beberapa kerangka kerja tiruan bersifat generik dan yang lainnya dirancang khusus untuk. AWS SDKs
Mocks, bersama dengan rintisan, termasuk dalam kategori palsu yang lebih luas. Mocks berbeda dari emulator (dibahas nanti di bagian ini) karena tiruan biasanya dibuat atau dikonfigurasi oleh pengembang sebagai bagian dari kode pengujian, sedangkan emulator adalah aplikasi mandiri yang mengekspos APIs (seperti REST APIs) dengan cara yang sama seperti sistem yang mereka tiru.
Keuntungan menggunakan tiruan antara lain sebagai berikut:
-
Mocks dapat mensimulasikan layanan pihak ketiga yang berada di luar kendali aplikasi Anda, seperti APIs dan penyedia perangkat lunak sebagai layanan (SaaS), tanpa memerlukan akses langsung ke layanan tersebut.
-
Mocks juga berguna untuk menguji kondisi kegagalan, terutama ketika kondisi seperti itu (seperti pemadaman layanan) sulit untuk disimulasikan.
-
Seperti emulator, kerangka kerja tiruan dapat menyediakan pengembangan lokal yang cepat setelah dikonfigurasi.
-
Mocks dapat memberikan perilaku pengganti untuk hampir semua jenis objek, sehingga strategi mengejek dapat menciptakan cakupan untuk berbagai layanan yang lebih luas daripada emulator.
-
Ketika fitur atau perilaku baru tersedia, pengujian tiruan dapat bereaksi lebih cepat dengan menggunakan (atau kembali ke) kerangka kerja tiruan generik, yang dapat mensimulasikan fitur baru segera setelah SDK yang diperbarui AWS tersedia.
Pengujian tiruan memiliki kelemahan ini:
-
Mocks umumnya memerlukan upaya pengaturan dan konfigurasi yang tidak sepele, khususnya ketika mencoba menentukan nilai pengembalian dari layanan yang berbeda untuk mengejek respons dengan benar.
-
Karena tiruan ditulis atau dikonfigurasi oleh pengembang yang menulis tes, ini merupakan tanggung jawab tambahan bagi pengembang.
-
Anda mungkin perlu memiliki akses ke cloud untuk memahami APIs dan mengembalikan nilai layanan.
-
Mocks juga bisa sulit dipertahankan, karena memerlukan pembaruan setiap kali tanda tangan API cloud yang diejek berubah, skema nilai pengembalian berkembang, atau logika aplikasi yang diuji diperluas untuk melakukan panggilan ke yang baru. APIs Perubahan ini menciptakan beban kerja pengembangan pengujian tambahan untuk pengembang.
-
Tes tiruan mungkin lolos di lingkungan desktop tetapi gagal di cloud.
-
Kerangka kerja tiruan, seperti emulator, terbatas dalam pengujian atau pendeteksian AWS Identity and Access Management (IAM) kebijakan atau batasan kuota.
-
Meskipun tiruan lebih baik dalam mensimulasikan apa yang akan dilakukan aplikasi ketika otorisasi gagal atau kuota terlampaui, pengujian tiruan tidak dapat menentukan hasil mana yang benar-benar akan terjadi ketika kode diterapkan ke lingkungan produksi.
Pengujian di cloud
Pengujian di cloud adalah proses menjalankan pengujian terhadap kode yang diterapkan ke lingkungan cloud alih-alih lingkungan desktop. Nilai pengujian di cloud meningkat dengan pengembangan aplikasi cloud-native. Sebagai contoh:
-
Anda dapat menjalankan pengujian di cloud terhadap nilai terbaru APIs dan yang dikembalikan.
-
Pengujian Anda dapat mencakup kebijakan IAM, kuota layanan, konfigurasi, dan semua layanan.
-
Lingkungan pengujian cloud Anda paling mirip dengan lingkungan runtime produksi Anda, jadi pengujian yang Anda jalankan di cloud kemungkinan akan mencapai hasil yang paling konsisten saat mereka berkembang melalui lingkungan.
Kelemahan pengujian di cloud meliputi yang berikut:
-
Penerapan ke lingkungan cloud biasanya membutuhkan waktu lebih lama daripada penerapan ke lingkungan desktop. Alat seperti AWS Serverless Application Model (AWS SAM) Accelerate, AWS Cloud Development Kit (AWS CDK) watch mode, dan SST
membantu mengurangi latensi yang terlibat dengan iterasi penerapan cloud. -
Pengujian cloud dapat menimbulkan biaya layanan tambahan, tidak seperti pengujian lokal, yang menggunakan lingkungan pengembangan lokal Anda.
-
Pengujian di cloud mungkin kurang layak jika Anda tidak memiliki akses internet berkecepatan tinggi.
-
Pengujian di cloud biasanya membutuhkan lingkungan cloud yang terisolasi satu sama lain. Batas lingkungan sering ditarik pada tingkat tumpukan di akun bersama untuk lingkungan pengembang, terkadang dengan menggunakan strategi tipe namespace seperti menggunakan awalan untuk mengidentifikasi kepemilikan. Untuk lingkungan pra-produksi dan produksi, batasan biasanya ditarik pada tingkat akun untuk melindungi beban kerja dari masalah tetangga yang bising, untuk mendukung kontrol keamanan yang paling tidak istimewa, dan untuk melindungi data sensitif. Persyaratan untuk menciptakan lingkungan yang terisolasi dapat menempatkan beban tambahan pada DevOps tim, terutama jika mereka berada di perusahaan yang memiliki kontrol ketat seputar akun dan infrastruktur.
Pengujian emulasi
Pengujian emulasi diaktifkan oleh aplikasi yang berjalan secara lokal yang dikenal sebagai emulator yang menyerupai layanan. AWS Emulator memiliki APIs yang mirip dengan rekan cloud mereka dan memberikan nilai pengembalian yang serupa. Mereka juga dapat mensimulasikan perubahan status yang diprakarsai oleh panggilan API. Misalnya, emulator Amazon S3 mungkin menyimpan objek pada disk lokal saat PutObjectmetode dipanggil. Ketika GetObjectdipanggil dengan kunci yang sama, emulator membaca objek yang sama dari disk dan mengembalikannya.
Keuntungan dari pengujian emulasi meliputi:
-
Ini menyediakan lingkungan yang paling akrab bagi pengembang yang terbiasa mengembangkan kode secara eksklusif di lingkungan lokal. Misalnya, jika Anda terbiasa dengan pengembangan aplikasi n-tier, Anda mungkin memiliki mesin database dan server web, mirip dengan yang berjalan dalam produksi, berjalan di mesin lokal Anda untuk menyediakan kemampuan pengujian cepat, lokal, dan terisolasi.
-
Ini tidak memerlukan perubahan apa pun pada infrastruktur cloud (seperti akun cloud pengembang), sehingga mudah diterapkan dengan pola pengujian yang ada. Pengujian emulasi memberikan manfaat dari iterasi pengembangan lokal yang cepat.
Namun, emulator memiliki beberapa kelemahan:
-
Mereka sering sulit untuk mengatur dan mereplikasi, terutama ketika mereka digunakan sebagai bagian dari pipa CI/CD. Ini dapat meningkatkan beban kerja dan pemeliharaan untuk staf TI atau untuk pengembang yang mengelola instalasi perangkat lunak mereka sendiri.
-
Fitur yang ditiru dan APIs biasanya tertinggal dari perubahan layanan dan mungkin menghambat adopsi fitur baru sampai dukungan ditambahkan.
-
Emulator mungkin memerlukan dukungan, pembaruan, perbaikan bug, atau peningkatan paritas fitur, yang merupakan tanggung jawab pembuat emulator (yang seringkali merupakan perusahaan pihak ketiga).
-
Pengujian yang mengandalkan emulator dapat memberikan hasil yang sukses secara lokal, tetapi mungkin gagal di cloud karena interaksi dengan aspek lain AWS seperti kebijakan dan kuota IAM, yang umumnya tidak ditiru.
-
Beberapa AWS layanan tidak memiliki emulator yang tersedia, jadi jika Anda hanya mengandalkan emulasi, Anda mungkin tidak memiliki opsi pengujian yang memuaskan untuk sebagian aplikasi Anda.