No exame AWS DVA-C02, as questoes sobre testes geralmente perguntam: 'Como voce testa seu codigo localmente antes de implanta-lo?' Como usar ambientes reais da AWS toda vez e caro e demorado, os desenvolvedores testam localmente primeiro sempre que possivel. Vamos explorar os principais metodos.
O que e SAM Local Testing?
AWS SAM (Serverless Application Model) e uma ferramenta que facilita a criacao e implantacao de aplicacoes serverless como funcoes Lambda. Ao instalar o SAM CLI, voce pode testar funcoes Lambda no seu proprio computador como se estivessem rodando na AWS real.
Pense nisso como um chef provando a comida na cozinha antes de servir aos clientes — voce verifica que tudo funciona antes de ir ao vivo.
Tres comandos SAM local comumente usados:
sam local invoke
Executa uma funcao Lambda diretamente na sua maquina local. Voce pode passar um arquivo de dados de evento de teste (no formato JSON) junto com ela.
sam local start-api
Inicia um servidor local que simula o API Gateway no seu computador. Voce pode enviar requisicoes para um endereco local (por exemplo, http://localhost:3000) usando um navegador ou Postman para testar suas APIs.
sam local generate-event
Gera automaticamente dados JSON de exemplo que imitam eventos reais como um upload de arquivo para S3, a chegada de uma mensagem SQS ou uma requisicao de API Gateway. Isso economiza o trabalho de escrever cenarios de teste do zero.
O que sao Eventos de Teste?
Uma funcao Lambda nao executa sozinha — ela sempre precisa de algo que a dispare (um evento). Por exemplo, pode executar quando um arquivo e enviado para o S3 ou quando uma mensagem chega a uma fila SQS.
Ao testar, voce precisa criar esses eventos manualmente e passa-los a funcao. Cada fonte de evento (S3, SQS, API Gateway, DynamoDB Streams, etc.) tem sua propria estrutura de dados JSON unica.
Voce pode criar eventos de teste diretamente no console do Lambda, ou usar o comando sam local generate-event descrito acima.
Testes Unitarios vs Testes de Integracao
Testes Unitarios
Voce isola um pequeno trecho de codigo (uma unica funcao ou modulo) e o testa separadamente. Servicos externos como DynamoDB ou S3 sao substituidos por versoes Mock (falsas) em vez de conexoes reais.
E como remover apenas o motor de um carro e testa-lo separadamente. Desenvolvedores Python costumam usar a biblioteca moto, enquanto desenvolvedores Node.js usam aws-sdk-mock.
Testes de Integracao
Voce testa se multiplos servicos realmente funcionam corretamente juntos. Por exemplo, verificar o fluxo completo de Lambda para DynamoDB para S3 em um ambiente real.
Stages do API Gateway
Um Stage e uma forma de gerenciar a mesma API em multiplos ambientes — como desenvolvimento (dev), staging e producao (prod). Pense nisso como executar versoes separadas do mesmo aplicativo: uma para desenvolvedores, uma para testes e outra para usuarios reais.
Variaveis de Stage: Voce pode atribuir diferentes enderecos de funcao Lambda ou endpoints de banco de dados a cada stage. O codigo permanece o mesmo, mas cada ambiente usa sua propria configuracao. Canary Releases: Ao implantar uma nova versao, voce envia apenas uma parcela do trafego (por exemplo, 10%) para a nova versao primeiro. Se nao aparecerem problemas, voce expande gradualmente para todos.
Amazon Q Developer
Amazon Q Developer e uma ferramenta com IA que auxilia na escrita de codigo. Suporta geracao automatica de codigo, deteccao de bugs e criacao automatica de codigo de testes — como ter um colega desenvolvedor experiente sentado ao seu lado.
Pontos-Chave do Exame
"Testar Lambda localmente" -- sam local invoke
"Simular API Gateway localmente" -- sam local start-api
"Gerar JSON de evento de exemplo" -- sam local generate-event
"Substituir servicos externos por simulacoes" -- Mock API (moto, aws-sdk-mock)
"Configuracoes diferentes por stage" -- variaveis de stage do API Gateway
"Enviar apenas trafego parcial para nova versao" -- Canary release
"Geracao de codigo e testes com IA" -- Amazon Q Developer
Teste unitario = isolado, usa Mocks / Teste de integracao = conexoes de servico reais