AWS Lambda pengujian fungsi di C # - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

AWS Lambda pengujian fungsi di C #

catatan

Lihat bagian Fungsi pengujian untuk pengenalan lengkap tentang teknik dan praktik terbaik untuk menguji solusi tanpa server.

Menguji fungsi tanpa server menggunakan jenis dan teknik pengujian tradisional, tetapi Anda juga harus mempertimbangkan pengujian aplikasi tanpa server secara keseluruhan. Pengujian berbasis cloud akan memberikan ukuran kualitas yang paling akurat dari fungsi dan aplikasi tanpa server Anda.

Arsitektur aplikasi tanpa server mencakup layanan terkelola yang menyediakan fungsionalitas aplikasi penting melalui panggilan API. Untuk alasan ini, siklus pengembangan Anda harus menyertakan pengujian otomatis yang memverifikasi fungsionalitas saat fungsi dan layanan Anda berinteraksi.

Jika Anda tidak membuat pengujian berbasis cloud, Anda dapat mengalami masalah karena perbedaan antara lingkungan lokal dan lingkungan yang diterapkan. Proses integrasi berkelanjutan Anda harus menjalankan pengujian terhadap serangkaian sumber daya yang disediakan di cloud sebelum mempromosikan kode Anda ke lingkungan penerapan berikutnya, seperti QA, Staging, atau Production.

Lanjutkan membaca panduan singkat ini untuk mempelajari strategi pengujian untuk aplikasi tanpa server, atau kunjungi repositori Sampel Uji Tanpa Server untuk menyelami contoh-contoh praktis, khusus untuk bahasa dan runtime pilihan Anda.

illustration showing the relationship between types of tests

Untuk pengujian tanpa server, Anda masih akan menulis unit, integrasi, dan end-to-endpengujian.

  • Tes unit - Tes yang dijalankan terhadap blok kode yang terisolasi. Misalnya, memverifikasi logika bisnis untuk menghitung biaya pengiriman yang diberikan item dan tujuan tertentu.

  • Tes integrasi - Tes yang melibatkan dua atau lebih komponen atau layanan yang berinteraksi, biasanya di lingkungan cloud. Misalnya, memverifikasi fungsi memproses peristiwa dari antrian.

  • End-to-end tes - Tes yang memverifikasi perilaku di seluruh aplikasi. Misalnya, memastikan infrastruktur diatur dengan benar dan bahwa peristiwa mengalir antar layanan seperti yang diharapkan untuk merekam pesanan pelanggan.

Menguji aplikasi tanpa server Anda

Anda biasanya akan menggunakan campuran pendekatan untuk menguji kode aplikasi tanpa server Anda, termasuk pengujian di cloud, pengujian dengan tiruan, dan kadang-kadang menguji dengan emulator.

Pengujian di cloud

Pengujian di cloud sangat berharga untuk semua fase pengujian, termasuk pengujian unit, pengujian integrasi, dan end-to-end pengujian. Anda menjalankan pengujian terhadap kode yang diterapkan di cloud dan berinteraksi dengan layanan berbasis cloud. Pendekatan ini memberikan ukuran kualitas kode Anda yang paling akurat.

Cara mudah untuk men-debug fungsi Lambda Anda di cloud adalah melalui konsol dengan acara pengujian. Peristiwa pengujian adalah input JSON ke fungsi Anda. Jika fungsi Anda tidak memerlukan input, acara dapat berupa dokumen ({}) JSON kosong. Konsol menyediakan contoh peristiwa untuk berbagai integrasi layanan. Setelah membuat acara di konsol, Anda dapat membagikannya dengan tim Anda untuk membuat pengujian lebih mudah dan konsisten.

catatan

Menguji fungsi di konsol adalah cara cepat untuk memulai, tetapi mengotomatiskan siklus pengujian Anda memastikan kualitas aplikasi dan kecepatan pengembangan.

Alat pengujian

Untuk mempercepat siklus pengembangan Anda, ada sejumlah alat dan teknik yang dapat Anda gunakan saat menguji fungsi Anda. Misalnya, AWS SAM Accelerate dan AWS CDK watch mode mengurangi waktu yang diperlukan untuk memperbarui lingkungan cloud.

Cara Anda mendefinisikan kode fungsi Lambda Anda membuatnya mudah untuk menambahkan pengujian unit. Lambda membutuhkan konstruktor publik tanpa parameter untuk menginisialisasi kelas Anda. Memperkenalkan konstruktor internal kedua memberi Anda kendali atas dependensi yang digunakan aplikasi Anda.

[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace GetProductHandler; public class Function { private readonly IDatabaseRepository _repo; public Function(): this(null) { } internal Function(IDatabaseRepository repo) { this._repo = repo ?? new DatabaseRepository(); } public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request) { var id = request.PathParameters["id"]; var databaseRecord = await this._repo.GetById(id); return new APIGatewayProxyResponse { StatusCode = (int)HttpStatusCode.OK, Body = JsonSerializer.Serialize(databaseRecord) }; } }

Untuk menulis tes untuk fungsi ini, Anda dapat menginisialisasi instance baru Function kelas Anda dan meneruskan implementasi tiruan dari. IDatabaseRepository Contoh di bawah ini menggunakan XUnitMoq,, dan FluentAssertions untuk menulis tes sederhana memastikan FunctionHandler pengembalian kode status 200.

using Xunit; using Moq; using FluentAssertions; public class FunctionTests { [Fact] public async Task TestLambdaHandler_WhenInputIsValid_ShouldReturn200StatusCode() { // Arrange var mockDatabaseRepository = new Mock<IDatabaseRepository>(); var functionUnderTest = new Function(mockDatabaseRepository.Object); // Act var response = await functionUnderTest.FunctionHandler(new APIGatewayProxyRequest()); // Assert response.StatusCode.Should().Be(200); } }

Untuk contoh yang lebih rinci, termasuk contoh pengujian asinkron, lihat repositori sampel pengujian .NET pada. GitHub