

# Testar funções
<a name="test-function"></a>

Antes de implantar a função no estágio ativo (produção), é possível testar a função para verificar se ela funciona conforme o esperado. Para testar uma função, especifique um *objeto de evento* que represente uma solicitação ou uma resposta HTTP que a distribuição do CloudFront pode receber em produção. 

O CloudFront Functions faz o seguinte:

1. Executa a função usando o objeto de evento fornecido como entrada.

1. Retorna o resultado da função (o objeto de evento modificado), bem como os logs de função ou as mensagens de erro e a *utilização de computação* da função. Para obter mais informações sobre as métricas de utilização de computação, consulte [Noções básicas de utilização de computação](#compute-utilization).

**nota**  
Quando você testa uma função, o CloudFront valida apenas os erros de execução da função. O CloudFront não valida se a solicitação fluirá com sucesso depois de publicada. Por exemplo, se sua função excluir um cabeçalho obrigatório, o teste será bem-sucedido porque não há um problema com o código. Entretanto, se você publicar a função e associá-la a uma distribuição, a função falhará quando uma solicitação for feita por meio do CloudFront.

**Contents**
+ [Configurar o objeto de evento](#test-function-create-event)
+ [Testar a função](#test-function-step-test)
+ [Noções básicas de utilização de computação](#compute-utilization)

## Configurar o objeto de evento
<a name="test-function-create-event"></a>

Antes de testar uma função, é necessário configurar o objeto de evento com o qual testá-la. Há várias opções.

**Opção 1: configurar um objeto de evento sem salvá-lo**  
É possível configurar um objeto de evento no editor visual no console do CloudFront e não salvá-lo.   
É possível usar esse objeto de evento para testar a função no console do CloudFront, mesmo que ele não esteja salvo.

**Opção 2: criar um objeto de evento no editor visual**  
É possível configurar um objeto de evento no editor visual no console do CloudFront e não salvá-lo. É possível criar dez objetos de evento para cada função para poder, por exemplo, testar diferentes entradas possíveis.  
Ao criar o objeto de evento dessa forma, é possível usar o objeto de evento para testar a função no console do CloudFront. Não é possível usá-lo para testar a função usando uma API ou um SDK da AWS. 

**Opção 3: criar um objeto de evento usando um editor de texto**  
É possível usar um editor de texto para criar um objeto de evento no formato JSON. Para obter informações sobre a estrutura de um objeto de evento, consulte [Estrutura de eventos](functions-event-structure.md).   
É possível usar esse objeto de evento para testar a função usando a CLI. Mas não é possível usá-lo para testar a função no console do CloudFront.

**Como criar um objeto de evento (opção 1 ou 2)**

1. Faça login no console do CloudFront em [https://console.aws.amazon.com/cloudfront/v4/home#/functions](https://console.aws.amazon.com/cloudfront/v4/home#/functions) e selecione a página **Funções**.

   Escolha a função que você deseja testar.

1. Na página de detalhes da função, selecione a guia **Testar**. 

1. Em **Tipo de evento**, selecione uma das seguintes opções:
   + Selecione **Solicitação do visualizador** se a função modificar uma solicitação HTTP ou gerar uma resposta com base na solicitação. A seção **Solicitação** é exibida.
   + Selecione **Resposta do visualizador**. As seções **Solicitação** e **Resposta** são exibidas. 

1. Preencha todos os campos a serem incluídos no evento. É possível selecionar **Editar JSON** para visualizar o JSON bruto.

1. (Opcional) Para salvar o evento, escolha **Salvar** e, em **Salvar evento de teste**, insira um nome e escolha **Salvar**.

   Também é possível selecionar **Editar JSON**, copiar o JSON bruto e salvá-lo no próprio arquivo, fora do CloudFront. 

**Como criar um objeto de evento (opção 3)**

Crie o objeto de evento usando um editor de texto. Armazene o arquivo em um diretório ao qual o computador possa se conectar. 

Siga estas diretrizes:
+ Omita os campos `distributionDomainName`, `distributionId` e `requestId`. 
+ Os nomes de cabeçalhos, os cookies e as strings de consulta devem estar em letras minúsculas.

Uma opção para criar um objeto de evento dessa forma é criar um exemplo usando o editor visual. O exemplo deve estar formatado corretamente. Depois, copie o JSON bruto, cole-o em um editor de texto e salve o arquivo.

Para ter mais informações sobre a estrutura de um evento, consulte [Estrutura de eventos](functions-event-structure.md). 

## Testar a função
<a name="test-function-step-test"></a>

Você pode testar uma função no console do CloudFront ou com a AWS Command Line Interface (AWS CLI).

------
#### [ Console ]

**Para testar a função**

1. Faça login no console do CloudFront em [https://console.aws.amazon.com/cloudfront/v4/home#/functions](https://console.aws.amazon.com/cloudfront/v4/home#/functions) e selecione a página **Funções**.

1. Escolha a função que você deseja testar.

1. Selecione a guia **Testar**. 

1. Verifique se o evento correto é exibido. Para sair do evento exibido no momento, selecione outro evento no campo **Selecionar evento de teste**.

1. Escolha **Testar função**. O console mostra a saída da função, incluindo os logs da função e a utilização de computação. 

------
#### [ CLI ]

É possível testar uma função usando o comando **aws cloudfront test-function**. 

**Para testar a função**

1. Abra a janela de linha de comando.

1. Execute o comando a seguir no diretório que contém o arquivo especificado.

   Este exemplo usa a notação `fileb://` para transmitir o arquivo de objeto de evento. Ele também inclui quebras de linha para tornar o comando mais legível. 

   ```
   aws cloudfront test-function \
       --name MaxAge \
       --if-match ETVABCEXAMPLE \
       --event-object fileb://event-maxage-test01.json \
       --stage DEVELOPMENT
   ```
**Observações**  
Você faz referência à função pelo nome e pela ETag (no parâmetro `if-match`). Você faz referência ao objeto de evento pela localização no sistema de arquivos.
O estágio pode ser `DEVELOPMENT` ou `LIVE`.

   Quando o comando é bem-sucedido, a saída é semelhante à seguinte:

   ```
   TestResult:
     ComputeUtilization: '21'
     FunctionErrorMessage: ''
     FunctionExecutionLogs: []
     FunctionOutput: '{"response":{"headers":{"cloudfront-functions":{"value":"generated-by-CloudFront-Functions"},"location":{"value":"https://aws.amazon.com/cloudfront/"}},"statusDescription":"Found","cookies":{},"statusCode":302}}'
     FunctionSummary:
       FunctionConfig:
         Comment: MaxAge function
         Runtime: cloudfront-js-2.0
         KeyValueStoreAssociations= \
         {Quantity=1, \
         Items=[{KeyValueStoreARN='arn:aws:cloudfront::111122223333:key-value-store/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111'}]} \
       FunctionMetadata:
         CreatedTime: '2021-04-18T20:38:56.915000+00:00'
         FunctionARN: arn:aws:cloudfront::111122223333:function/MaxAge
         LastModifiedTime: '2023-17-20T10:38:57.057000+00:00'
         Stage: DEVELOPMENT
       Name: MaxAge
       Status: UNPUBLISHED
   ```

------

**Observações**  
`FunctionExecutionLogs` contém uma lista de linhas de log que a função escreveu em instruções `console.log()` (se houver).
`ComputeUtilization` contém informações sobre como executar a função. Consulte [Noções básicas de utilização de computação](#compute-utilization).
`FunctionOutput`O contém o objeto de evento que a função retornou. 

## Noções básicas de utilização de computação
<a name="compute-utilization"></a>

**Compute utilization** (Utilização de computação) é a quantidade de tempo que a função levou para ser executada como uma porcentagem do tempo máximo permitido. Por exemplo, um valor de 35 significa que a função foi concluída em 35% do tempo máximo permitido.

Se uma função exceder continuamente o tempo máximo permitido, o CloudFront limitará a função. A lista a seguir explica a probabilidade de uma função ser limitada com base no valor de utilização da computação.

**Valor de utilização de computação:**
+ **1 – 50** – De 1 a 50: a função está confortavelmente abaixo do tempo máximo permitido e deve funcionar sem controle de utilização.
+ **51 – 70** – De 51 a 70: a função está próxima do tempo máximo permitido. É aconselhável otimizar o código da função.
+ **71 – 100** – De 71 a 100: a função está muito próxima ou excede o tempo máximo permitido. É provável que o CloudFront restrinja essa função se você a associar a uma distribuição.