Test di applicazioni serverless su AWS - AWS Guida prescrittiva

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Test di applicazioni serverless su AWS

Dan Fox, Rohan Mehta e Rob Hill, Amazon Web Services (AWS)

Dicembre 2022 (cronologia dei documenti)

Questa guida illustra le metodologie per testare applicazioni serverless, descrive le sfide che potresti incontrare durante i test e introduce le best practice. Queste tecniche di test hanno lo scopo di aiutarti a iterare più rapidamente e a rilasciare il codice con maggiore sicurezza.

Questa guida è destinata agli sviluppatori che desiderano stabilire strategie di test per le proprie applicazioni serverless. Puoi utilizzare la guida come punto di partenza per conoscere le strategie di test e poi visitare il repository Serverless Test Samples per vedere esempi di test che seguono i modelli e le procedure consigliate descritti in questa guida.

Panoramica

I test automatizzati sono investimenti fondamentali che aiutano a garantire la qualità delle applicazioni e la velocità di sviluppo. I test accelerano anche il feedback degli sviluppatori. In qualità di sviluppatore, vuoi essere in grado di iterare rapidamente sulla tua applicazione e ottenere feedback sulla qualità del codice. Molti sviluppatori sono abituati a scrivere applicazioni da implementare in un ambiente desktop, direttamente nel sistema operativo o all'interno di un ambiente basato su container. Quando si lavora in ambienti desktop o basati su container, in genere si scrivono test su un codice ospitato interamente sul desktop. Tuttavia, nelle applicazioni serverless, i componenti dell'architettura potrebbero non essere implementabili in un ambiente desktop, ma potrebbero invece esistere solo nel cloud. Un'architettura basata sul cloud potrebbe includere livelli di persistenza, sistemi di messaggistica, API e altri componenti. Quando si scrive un codice applicativo basato su questi componenti, potrebbe essere difficile determinare il modo migliore per progettare ed eseguire i test.

Questa guida ti aiuta ad allinearti a una strategia di test che riduce l'attrito e la confusione e aumenta la qualità del codice.

Prerequisiti

Questa guida presuppone che tu abbia familiarità con le nozioni di base dei test automatizzati, incluso il modo in cui vengono utilizzati i test automatizzati del software per garantire la qualità del software. La guida contiene un'introduzione di alto livello a una strategia di test delle applicazioni serverless e non richiede alcuna esperienza pratica nella scrittura di test.

Definizioni

Questa guida usa i termini seguenti:

  • Test unitari, sono test eseguiti isolatamente sul codice per un singolo componente dell'architettura.

  • Test di integrazione, vengono eseguiti su due o più componenti dell'architettura, in genere in un ambiente cloud.

  • Test end-to-end, verificano il comportamento di un'intera applicazione.

  • Emulatori, sono applicazioni (spesso fornite da terze parti) progettate per simulare un servizio cloud senza eseguire il provisioning o richiamare alcuna risorsa.

  • Mock (chiamati anchefalsi), sono implementazioni in un'applicazione di test che sostituiscono una dipendenza con una simulazione di tale dipendenza.

Obiettivi aziendali specifici

Le best practice riportate in questa guida hanno lo scopo di aiutarti a raggiungere due obiettivi principali:

  • Aumentare la qualità delle applicazioni serverless

  • Ridurre il tempo necessario per implementare o modificare le funzionalità

Aumentare la qualità del software

La qualità di un'applicazione dipende in larga misura dalla capacità degli sviluppatori di testare una varietà di scenari per verificarne la funzionalità. Quando non si implementano test automatizzati o, più in genere, se i test non coprono adeguatamente gli scenari richiesti, la qualità dell'applicazione non può essere determinata o garantita.

In un'architettura basata su server, i team possono definire facilmente l'ambito di test: qualsiasi codice che viene eseguito sul server applicativo deve essere testato. Gli altri componenti che richiamano il server, o le dipendenze richiamate dal server, sono spesso considerati esterni e non possono essere testati dal team responsabile dell'applicazione sul server.

Le applicazioni serverless sono spesso costituite da unità di lavoro più piccole, ad esempio funzioni AWS Lambda, eseguite nel proprio ambiente. Probabilmente, i team saranno responsabili di molte di queste unità più piccole all'interno di una singola applicazione. Alcune funzionalità delle applicazioni possono essere delegate interamente a servizi gestiti come Amazon Simple Storage Service (Amazon S3) o Amazon Simple Queue Service (Amazon SQS) senza utilizzare alcun codice sviluppato internamente. I modelli tradizionali basati su server per il test del software possono escludere i servizi gestiti considerandoli esterni all'applicazione. Ciò può portare a una copertura inadeguata, in cui gli scenari critici potrebbero essere limitati a test esplorativi manuali o a pochi casi di test di integrazione in cui il risultato varia a seconda dell'ambiente. Pertanto, l'adozione di strategie di test che comprendano comportamenti dei servizi gestiti e configurazioni cloud può migliorare la qualità del software.

Ridurre il tempo necessario per implementare o modificare le funzionalità

Rilevare i bug del software e i problemi di configurazione durante un ciclo di sviluppo iterativo può avere un impatto minimo sui costi e sulla pianificazione. Quando questi problemi non vengono rilevati da uno sviluppatore, l'identificazione dei problemi richiede uno sforzo aggiuntivo da parte di più persone.

Un'architettura serverless può includere servizi gestiti che forniscono funzionalità applicative critiche tramite chiamate API. Per questo motivo, il ciclo di sviluppo deve includere test che dimostrino con precisione la funzionalità corretta durante l'interazione con questi servizi. Se questi test non vengono eseguiti, è possibile che si verifichino problemi derivanti dalle differenze tra l'ambiente in uso e l'ambiente implementato. Di conseguenza, potresti dedicare ancora più tempo a cercare di riprodurre e verificare una correzione, perché l'iterazione ora richiede la verifica delle modifiche rispetto a un ambiente diverso dalla configurazione preferita.

Un'adeguata strategia di test serverless migliora i tempi di iterazione fornendo risultati accurati per i test che includono chiamate ad altri servizi.