Domande frequenti - 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à.

Domande frequenti

Ho una funzione Lambda che esegue calcoli e restituisce un risultato senza chiamare altri servizi. Devo davvero testarla nel cloud?

Sì. Le funzioni Lambda hanno parametri di configurazione che possono modificare l'esito del test. Tutto il codice della funzione Lambda dipende dalle impostazioni di timeout e memoria, e se tali aspetti non sono impostati correttamente potrebbero causare errori della funzione. Le policy Lambda consentono anche la registrazione standard dell'output su Amazon. CloudWatch Anche se il codice non chiama CloudWatch direttamente, è necessaria un'autorizzazione per abilitare la registrazione e tale autorizzazione non può essere simulata o emulata con precisione.

In che modo i test nel cloud possono contribuire ai test unitari? Se sono nel cloud e si connettono ad altre risorse, non si tratta di test di integrazione?

Definiamo test unitari come test che operano isolatamente su componenti dell'architettura. Questa definizione non preclude necessariamente l'uso di chiamate ai servizi o altre comunicazioni di rete.

Molte applicazioni serverless dispongono di componenti dell'architettura che possono essere testati in modo isolato, anche nel cloud. Un esempio può essere quello di una funzione Lambda che accetta l'input, lo interpreta e invia un messaggio a una coda SQS. Un test unitario di questa funzione verificherebbe probabilmente se i valori di input determinano la presenza di determinati valori nel messaggio in coda. Prendi in considerazione un test scritto utilizzando lo schema Arrange, Act, Assert (organizzazione, azione, affermazione):

  • Arrange: alloca le risorse (una coda per ricevere messaggi e la funzione sottoposta a test).

  • Act: chiama la funzione sottoposta a test.

  • Assert: recupera il messaggio inviato dalla funzione e convalida l'output.

Un approccio di test con mock implicherebbe la simulazione della coda con un oggetto fittizio in corso di elaborazione e la creazione di un'istanza durante il processo della classe o del modulo che contiene il codice della funzione Lambda. Durante la fase Assert, il messaggio in coda verrebbe recuperato dall'oggetto fittizio.

In un approccio basato sul cloud, il test creerebbe una coda SQS ai fini del test e implementerebbe la funzione Lambda con variabili di ambiente configurate per utilizzare la coda SQS isolata come destinazione di output. Dopo aver eseguito la funzione Lambda, il test recupererebbe il messaggio dalla coda di SQS.

Il test basato sul cloud eseguirebbe lo stesso codice, affermerebbe lo stesso comportamento e convaliderebbe la correttezza funzionale dell'applicazione. Tuttavia, avrebbe l'ulteriore vantaggio di poter convalidare le impostazioni della funzione Lambda: il ruolo IAM, le policy IAM e le impostazioni di timeout e di memoria della funzione.