Você pode adicionar condições de controle de fluxo (loops, condições, esperas, agrupamento etc.) aos seus cenários de teste. Isso aprimora a utilização de configurações de cenários/processos de teste mais complexos, resolvendo, por fim, os desafios de teste de cenários intrincados por meio de recursos de teste automatizado.Loops For#
Quando você precisa enviar uma única requisição várias vezes consecutivamente, usar um loop for é uma abordagem eficiente. Veja como usar loops for de forma eficaz nos seus cenários de teste do Apidog:Definir a contagem de iterações: Decida quantas vezes o loop deve ser executado. Isso pode ser um número fixo ou uma {{variable}}.
Adicionar requisições: Dentro de um loop for, você pode incluir uma ou mais requisições, bem como outros loops ou ramificações condicionais. Essa flexibilidade permite cenários de teste complexos em que várias ações precisam ser testadas em sequência.
Condição Break If: Você pode adicionar uma condição Break if a um loop for. Isso encerrará imediatamente o loop se a condição for satisfeita. Você pode arrastar e ajustar a posição de Break if ou até mesmo adicionar várias condições Break if para lidar com diferentes cenários.
Tratamento On Error: Gerencie erros adicionando condições On Error ao loop. Se ocorrer um erro, as ações especificadas serão acionadas:Ignore: O loop continua com a próxima requisição.
Continue: Ignora as requisições restantes no ciclo atual e avança para a próxima iteração.
Break execution: Interrompe o loop e prossegue com as requisições subsequentes fora do loop.
End execution: Interrompe completamente todo o cenário de teste.
A condição On Error é fixa no início do loop e não pode ser movida.
Usar o Índice do Loop em Requisições#
O índice atual do loop pode ser usado como uma variável local dentro das requisições para ajustar dinamicamente parâmetros ou corpos de requisição. Para utilizá-lo:1
Adicione um loop for e inclua uma requisição dentro do loop.
2
Clique no ícone de varinha mágica
🪄 no parâmetro da requisição e selecione "Retrieve pre-step data."
O recurso "Retrieve pre-step data" está disponível apenas no módulo "Tests" e não no módulo "APIs".
Ao usar "Retrieve pre-step data", o valor só pode ser obtido quando todo o cenário de teste é executado em conjunto; ele não pode ser acessado ao executar etapas individuais.
3
Escolha a opção de loop, geralmente rotulada como "Loop n times."
4
Selecione "Current loop index."
5
Você obterá uma variável dinâmica como
{{$.5.index}}. Clique em "Insert", e ela será substituída em tempo de execução pelo índice do loop atual, como
0 ou
5.
O índice do loop sempre começa em 0.
Loops ForEach#
Quando você tem um array contendo vários elementos (uma lista de conteúdo específico ou uma lista obtida de etapas anteriores) e precisa executar a mesma operação em cada item da lista (por exemplo, primeiro obter uma lista de produtos e, em seguida, adicionar cada produto da lista ao carrinho de compras), você precisa usar um loop ForEach.Em um loop ForEach, as operações dentro do loop serão executadas para cada elemento no array.A diferença em relação a um loop For é que você não precisa se preocupar com o número de iterações; você só precisa se concentrar no conteúdo do array do loop.Definir o array do loop: Em um loop ForEach, você precisa definir um array como o objeto do loop. Você pode usar uma variável ou inserir manualmente um array, como ["a","b","c"].
Adicionar requisições: Dentro de um loop ForEach, você pode adicionar uma ou mais requisições, ou adicionar outros loops ou ramificações condicionais etc.
Condição Break If e tratamento On Error: Você pode adicionar Break if e On error ao loop ForEach, de forma consistente com o loop for mencionado acima.
Na configuração avançada do Loop ForEach, você também pode personalizar opções de tratamento de exceções para Break If e On Error. Para obter mais informações, consulte Regras de Julgamento.
Exemplo de Uso do ForEach#
Considere dois endpoints: um para recuperar uma lista de informações de pets e outro para buscar os detalhes de um único pet. Se você precisa buscar os detalhes de um pet adicionado recentemente à lista, pode configurar esse cenário usando um loop ForEach no seu teste automatizado.1.
A primeira etapa fora do loop ForEach seria solicitar o endpoint de lista de informações de pets para recuperar os dados reais da lista. Normalmente, a resposta dessa interface contém um array com informações básicas sobre vários pets, como ID e nome do pet.
2.
Configure um loop ForEach com o array de origem sendo um subconjunto do array de pets da resposta da etapa anterior.
3.
Dentro do loop, configure uma requisição para o endpoint "Get Pet Information" e use o valor do elemento do loop ForEach para preencher o parâmetro de ID nessa requisição.
Usar o Elemento do Loop em Requisições#
O elemento/índice atual do loop pode ser usado como uma variável local dentro das requisições para ajustar dinamicamente parâmetros ou corpos de requisição. Para utilizá-lo:1
Adicione um loop ForEach e inclua uma requisição dentro do loop.
2
Clique no ícone
varinha mágica no parâmetro da requisição e selecione "Retrieve pre-step data."
3
Escolha a opção de loop, geralmente rotulada como "Loop each element in
{{array}}."
4
Selecione "Current loop element." Você pode utilizar JSONPath para extrair propriedades do elemento.
5
Você obterá uma variável dinâmica como
{{$.17.element}}. Clique em "Insert", e ela será substituída em tempo de execução pelo elemento do loop atual, que é um elemento do array do loop.
Elemento do Loop Atual: O sistema extrai automaticamente elementos do array especificado no loop ForEach e os armazena na variável designada. No início de cada iteração, essa variável é atualizada com o valor do elemento atual do array. Se o elemento for um objeto, você pode usar JSONPath para extrair um subcampo específico, como {{$.1.element.data.name}}.Índice do Loop Atual: O índice do loop atual é armazenado nessa variável. Ele começa em 0 e aumenta em 1 no início de cada iteração subsequente, refletindo o índice atual.
Quando você precisa enviar diferentes requisições com base em diferentes cenários, pode usar uma instrução If para adicionar ramificações condicionais. Quando as condições especificadas são atendidas, a etapa correspondente será executada; caso contrário, ela será ignorada. Para obter detalhes mais específicos, consulte Regras de Julgamento.Definir instrução If: A instrução If oferece suporte a várias condições, como igual a, diferente de, contém, não contém etc. Constantes e variáveis podem ser usadas em qualquer lado da condição.
Adicionar requisições: Várias requisições podem ser adicionadas dentro de uma ramificação condicional, bem como outros loops ou ramificações condicionais.
Executar ramificações condicionais: Se as condições definidas na configuração forem atendidas, a etapa de teste será executada; caso contrário, ela será ignorada.
Instrução Else: Uma instrução Else pode ser adicionada dentro de uma ramificação condicional para lidar com cenários em que a condição If não é atendida.
Exemplo de Uso do If#
Um proprietário de pet shop, com base no status de vendas de pets do dia anterior, precisa alterar o status de venda de um pet para "Sold" se ele tiver sido vendido. Caso contrário (else), ele precisa verificar a lista de pets ainda à venda.1.
Clique no botão "Add Step" na parte inferior e selecione "Conditional Branching."
2.
Insira a variável saleStatus obtida da resposta da requisição da API na caixa de entrada após "If" e selecione a condição "equals." Por fim, insira true como o valor de comparação.
3.
Passe o cursor sobre a operação de ramificação condicional para ver a opção " + Else". Clique nela para adicionar a etapa "List of Pets for Sale" (caso a condição não seja atendida, ou seja, para consultar a lista de pets ainda à venda).
Regras de Julgamento#
Ao usar a instrução If em um cenário de teste, você pode definir regras condicionais para controlar a execução do teste. Se as condições forem atendidas, a etapa correspondente será executada; caso contrário, ela será ignorada. Da mesma forma, nas configurações Break If para loops ForEach e For, você pode definir regras de julgamento para controlar o fluxo de execução de forma mais flexível.| Regra | Descrição |
|---|
| Equals | Verifica se dois valores são iguais. |
| Does not equal | Verifica se dois valores não são iguais. |
| Exists | Verifica se um campo ou variável existe. |
| Does not exist | Verifica se um campo ou variável não existe. |
| Less than | Verifica se um valor é menor que outro. |
| Less than or equal | Verifica se um valor é menor ou igual a outro. |
| Greater than | Verifica se um valor é maior que outro. |
| Greater than or equal | Verifica se um valor é maior ou igual a outro. |
| Matches with Regex | Verifica se uma string corresponde à expressão regular especificada. |
| Contains | Verifica se uma string ou array contém o valor especificado. |
| Does not contain | Verifica se uma string ou array não contém o valor especificado. |
| Is empty | Verifica se um campo, array ou variável está vazio. |
| Is not Empty | Verifica se um campo, array ou variável não está vazio. |
| In List | Verifica se um valor pertence a uma Lista especificada. |
| Not in List | Verifica se um valor não pertence a uma Lista especificada. |
Ao realizar verificações condicionais (como maior que, maior ou igual a, igual a ou diferente de), se os valores sendo comparados forem inteiros ou strings, o sistema converterá automaticamente strings em números para uma comparação precisa. Por exemplo, se você comparar uma string "18" com o número 18, o sistema converterá a string "18" para o número 18 antes de comparar.Equals#
Verifica se dois valores são iguais. Se forem iguais, a condição será atendida e a etapa de teste será executada; caso contrário, ela será ignorada.Cenário: Verifique se a idade do usuário extraída da etapa anterior é igual a 18.
Exemplo de Condição: {{$.5.response.body.data.age}} Equals 18
Efeito Real da Execução: Se o valor de idade extraído da etapa anterior for 18 (a string será convertida automaticamente em um número), a etapa será executada, como exibir informações específicas ou executar determinadas ações.
Does not equal#
Verifica se dois valores não são iguais. Se não forem iguais, a condição será atendida e a etapa de teste será executada; caso contrário, ela será ignorada.Cenário: Verifique se o status do pedido extraído da etapa anterior não é igual a "Paid".
Exemplo de Condição: {{$.4.response.body.data.status}} Does not equal Paid
Efeito Real da Execução: Se o status do pedido extraído da etapa anterior for outro valor (como "Pending" ou "Shipped"), a etapa será executada.
Exists#
Verifica se determinado campo ou variável existe. Se existir, a condição será atendida e a etapa será executada; caso contrário, ela será ignorada.Cenário: Verifique se o campo email existe nos dados do usuário extraídos da etapa anterior.
Exemplo de Condição: {{$.3.response.body.data.email}} Exists
Efeito Real da Execução: Se o campo email estiver presente nos dados do usuário extraídos da etapa anterior, a etapa será executada.
Does not exist#
Verifica se determinado campo ou variável não existe. Se não existir, a condição será atendida e a etapa será executada; caso contrário, ela será ignorada.Cenário: Verifique se o campo phone não existe nos dados do usuário extraídos da etapa anterior.
Exemplo de Condição: {{$.2.response.body.data.phone}} Does not exist
Efeito Real da Execução: Se o campo phone estiver ausente nos dados do usuário extraídos da etapa anterior, a etapa será executada.
Less Than#
Verifica se um valor é menor que outro. Se for, a condição será atendida e a etapa será executada; caso contrário, ela será ignorada.Cenário: Verifique se o estoque do produto extraído da etapa anterior é menor que 10.
Exemplo de Condição: {{$.1.response.body.data.stock}} Less Than 10
Efeito Real da Execução: Se o valor de estoque extraído da etapa anterior for 8, a condição será atendida e a etapa será executada.
Less than or equal#
Verifica se um valor é menor ou igual a outro. Se for, a condição será atendida e a etapa será executada; caso contrário, ela será ignorada.Cenário: Verifique se a idade extraída da etapa anterior é menor ou igual a 12.
Exemplo de Condição: {{$.2.response.body.data.age}} Less than or equal 12
Efeito Real da Execução: Se o valor de idade extraído da etapa anterior for 10, a condição será atendida e a etapa será executada.
Greater than#
Verifica se um valor é maior que outro. Se for, a condição será atendida e a etapa será executada; caso contrário, ela será ignorada.Cenário: Verifique se o valor do pedido extraído da etapa anterior é maior que 1000.
Exemplo de Condição: {{$.1.response.body.data.amount}} Greater than 1000
Efeito Real da Execução: Se o valor do pedido extraído da etapa anterior for 1105, a condição será atendida e a etapa será executada.
Greater than or equal#
Verifica se um valor é maior ou igual a outro. Se for, a condição será atendida e a etapa será executada; caso contrário, ela será ignorada.Cenário: Verifique se os pontos do usuário extraídos da etapa anterior são maiores ou iguais a 500.
Exemplo de Condição: {{$.3.response.body.data.points}} Greater than or equal 500
Efeito Real da Execução: Se o valor dos pontos extraído da etapa anterior for 600, a condição será atendida e a etapa será executada.
Matches with Regex#
Verifica se uma string corresponde a uma expressão regular especificada. Se corresponder, a condição será atendida e a etapa será executada; caso contrário, ela será ignorada.Cenário: Verifique se o formato de e-mail extraído da etapa anterior está correto.
Exemplo de Condição: {{$.2.response.body.data.email}} Matches with Regex /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i
Efeito Real da Execução: Se o formato de e-mail extraído da etapa anterior corresponder à expressão regular (por exemplo, test@gmail.com), a etapa será executada.
Expressões regulares devem ser escritas usando a sintaxe "literal", em que o padrão é delimitado por /, com modificadores opcionais (por exemplo, g para correspondência global, i para não diferenciar maiúsculas de minúsculas) anexados ao final. Para obter mais informações sobre como escrever expressões regulares, você pode consultar a documentação da MDN. Contains#
Verifica se uma string ou array contém um valor especificado. Se contiver, a condição será atendida e a etapa será executada; caso contrário, ela será ignorada.Cenário: Verifique se a lista de funções do usuário extraída da etapa anterior contém a função "admin".
Exemplo de Condição: {{$.3.response.body.data.roles}} Contains admin
Efeito Real da Execução: Se a lista de funções extraída da etapa anterior contiver "admin", a etapa será executada.
Does not contain#
Verifica se uma string ou array não contém um valor especificado. Se não contiver, a condição será atendida e a etapa será executada; caso contrário, ela será ignorada.Cenário: Verifique se o carrinho de compras do usuário extraído da etapa anterior não contém determinado produto.
Exemplo de Condição: {{$.4.response.body.data.cartItems}} Does not contain productId123
Efeito Real da Execução: Se o array do carrinho extraído da etapa anterior não contiver o produto productId123, a etapa será executada.
Is empty#
Verifica se um campo, array ou variável está vazio. Se estiver, a condição será atendida e a etapa será executada; caso contrário, ela será ignorada.Cenário: Verifique se o campo de observações extraído da etapa anterior está vazio.
Exemplo de Condição: {{$.2.response.body.data.remarks}} Is empty
Efeito Real da Execução: Se o campo de observações extraído da etapa anterior estiver vazio, a etapa será executada.
Is not Empty#
Verifica se um campo, array ou variável não está vazio. Se não estiver vazio, a condição será atendida e a etapa será executada; caso contrário, ela será ignorada.Cenário: Verifique se as observações do pedido extraídas da etapa anterior estão preenchidas.
Exemplo de Condição: {{$.1.response.body.data.orderRemarks}} Is not Empty
Efeito Real da Execução: Se as observações do pedido extraídas da etapa anterior não estiverem vazias, a etapa será executada.
In List#
Verifica se um valor pertence a uma lista especificada. Se pertencer, a condição será atendida e a etapa será executada; caso contrário, ela será ignorada.Cenário: Verifique se o produto selecionado pelo usuário extraído da etapa anterior está na lista de produtos recomendados.
Exemplo de Condição: {{$.3.response.body.data.productId}} In List ["prod123", "prod456", "prod789"]
Efeito Real da Execução: Se o ID do produto extraído da etapa anterior for "prod456", a etapa será executada.
No Apidog, ao inserir uma lista, cada elemento deve ser inserido separadamente e separado pressionando a tecla Enter.
Not in List#
Verifica se um valor não pertence a uma lista especificada. Se não pertencer, a condição será atendida e a etapa será executada; caso contrário, ela será ignorada.Cenário: Verifique se o código promocional inserido pelo usuário extraído da etapa anterior não está na lista de códigos promocionais usados.
Exemplo de Condição: {{$.4.response.body.data.promoCode}} Not in List ["usedCode1", "usedCode2"]
Efeito Real da Execução: Se o código promocional extraído da etapa anterior for "newPromo", a condição será atendida e a etapa será executada; caso contrário, ela será ignorada.
Agrupamento#
Quando várias etapas no processo de teste estão inter-relacionadas, elas podem ser agrupadas para classificação. Ao agrupar etapas de teste, você melhora a legibilidade e a operacionalidade do cenário de teste.Espera#
Quando uma determinada etapa no processo de teste exige aguardar por um período antes da execução, você pode adicionar uma condição de espera para resolver isso.Exemplo de Uso de Espera#
Simule um usuário visualizando detalhes de um pet e atualizando o status de navegação das informações do pet após navegar por 1000ms.1.
Clique no botão "Add Step" na parte inferior e selecione "Wait."
2.
Insira o tempo de espera, 1000 (em milissegundos).
Quando você usa controle de fluxo de teste, o relatório de teste não exibirá etapas como If, for etc.; ele mostrará apenas as requisições reais executadas, listadas linearmente na ordem de execução.