A maioria dos testes de API segue uma linha reta: chama o login, chama o checkout, chama o endpoint de recibo e valida cada resposta. Isso deixa de funcionar quando uma falha em um passo invalida os próximos. Se o login retorna 401, executar o checkout é inútil e pode esconder a causa real atrás de erros secundários. A solução é ler a resposta anterior, decidir se o cenário deve continuar e reportar exatamente onde ocorreu a falha.
Essa decisão usa lógica condicional e controle de fluxo. Neste guia, você vai configurar uma ramificação if/else em um cenário de teste de API no Apidog: faça login, valide o status da resposta e só execute o checkout se a autenticação for bem-sucedida. Se você ainda não criou cenários no Apidog, consulte o guia sobre como escrever um cenário de teste com o Apidog. Para revisar o conceito de if/else, veja o guia do MDN sobre declarações condicionais.
O que é controle de fluxo — e o que não é
No Apidog, os testes automatizados ficam no módulo Testes. Você trabalha com um Cenário de Teste, semelhante a uma coleção no Postman, composto por Passos de Teste.
Cada passo pode ser:
- uma requisição HTTP;
- uma estrutura de controle de fluxo;
- uma ramificação condicional;
- um loop;
- uma espera.
Controle de fluxo permite que o cenário faça mais do que executar requisições em sequência. A documentação do Apidog sobre controle de fluxo e ramificação condicional descreve os elementos disponíveis.
Neste artigo, o foco é a Ramificação Condicional, equivalente a if/else:
- ela lê um valor de uma resposta ou variável;
- testa esse valor com uma condição;
- executa um grupo de passos se a condição for verdadeira;
- executa outro grupo se a condição for falsa.
Ramificação não é loop.
Uma ramificação decide uma vez qual caminho executar. Um loop executa o mesmo bloco várias vezes.
Se você precisa percorrer uma lista de IDs de pedidos, use um loop ForEach, não uma ramificação. Consulte o tutorial de loop ForEach para esse caso.
A documentação do Apidog não lista restrições de plano, nem diferenças entre nuvem e auto-hospedado, para controle de fluxo, ramificações, loops ou passagem de dados entre passos.
Construa um cenário que decide com base no login
Objetivo do fluxo:
Login
├─ status 200 → Checkout
└─ qualquer outro status → Reportar falha e encerrar
Assim, um checkout nunca será executado se o login falhar.
Passo 1: crie um cenário de teste
- Abra o Apidog e entre no módulo Testes.
- Clique em
+ao lado da barra de pesquisa. - Crie um novo Cenário de Teste.
- Escolha o diretório e defina a prioridade.
- Finalize a criação.
Agora você tem um cenário vazio para montar o fluxo.
Passo 2: adicione a requisição de login
Adicione o primeiro Passo de Teste como uma requisição personalizada.
Configure uma requisição POST para o endpoint de autenticação:
POST https://api.your-store.com/v1/login
Content-Type: application/json
{
"email": "dana@example.com",
"password": "correct-horse-battery-staple"
}
Antes de criar a ramificação, execute esse passo isoladamente e confirme a resposta esperada. Um login bem-sucedido pode retornar:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"userId": "usr_10482"
}
Valide pelo menos:
- o status HTTP, como
200; - o formato do corpo;
- a presença do token, caso o checkout precise dele.
Passo 3: entre no modo de orquestração
Clique em qualquer passo para abrir o modo de orquestração.
Nessa visualização:
- o painel esquerdo mostra o fluxo do cenário;
- o painel direito exibe os detalhes do passo selecionado;
- o ícone
≡permite reordenar passos por arrastar e soltar.
É nesse modo que você adiciona e organiza ramificações.
Passo 4: adicione uma Ramificação Condicional
- Clique em Adicionar Passo.
- Selecione Ramificação Condicional.
- Configure a condição para avaliar a resposta do login.
O Apidog oferece operadores como:
Igual aDiferente deExisteNão existeMenor queMenor ou igual aMaior queMaior ou igual aCorresponde a RegexContémNão contémEstá vazioNão está vazioNa listaNão na lista
Para este cenário, a regra deve ser:
status da resposta de login Igual a 200
Passo 5: use a resposta do passo anterior
Para alimentar a condição com dados do login, use uma destas abordagens.
Opção A: Recuperar dados do passo anterior
Essa é a forma mais rápida quando o valor será usado apenas no cenário de teste.
- Clique no campo de valor da condição.
- Clique no ícone de varinha mágica.
- Selecione Recuperar dados do passo anterior.
- Escolha o passo de login e o status da resposta.
- Compare o valor com
200.
Por baixo dos panos, o Apidog usa referências de pré-passo com esta estrutura:
{{$.<id do passo>.response.body.<caminho do campo>}}
Por exemplo, para acessar um token retornado pelo passo 1:
{{$.1.response.body.token}}
Observe duas limitações importantes:
- Recuperar dados do passo anterior funciona no módulo Testes, não no módulo APIs.
- A referência é resolvida ao executar o cenário completo. Ao executar apenas um passo isolado, ela pode aparecer vazia.
Opção B: extraia uma variável nomeada
Use essa alternativa quando você precisar reutilizar um valor em vários módulos, passos ou ramificações.
Na requisição de login:
- Abra os pós-processadores.
- Adicione a ação Extrair Variável.
- Use uma expressão JSONPath, por exemplo:
$.token
- Salve o resultado em uma variável como
token.
Depois, use a variável em passos posteriores:
{{token}}
Para aprofundar esse fluxo, consulte o guia sobre como passar dados entre passos de teste.
Para validar somente o status HTTP do login, recuperar o dado do passo anterior é o caminho mais direto.
Passo 6: configure o caminho Else
Passe o mouse sobre o bloco If e clique em + Else.
Agora preencha os dois caminhos.
Caminho If: login bem-sucedido
Dentro do bloco If, adicione a requisição de checkout.
Se o checkout exigir o token retornado pelo login, inclua-o no cabeçalho:
Authorization: Bearer {{token}}
Ou use uma referência de pré-passo para o token:
{{$.1.response.body.token}}
O uso de token de portador no cabeçalho Authorization segue o padrão comum de APIs autenticadas, como mostrado na documentação da API Stripe.
Caminho Else: login falhou
Dentro do bloco Else, adicione um passo que deixe a falha explícita. Você pode:
- chamar um endpoint de log;
- enviar uma notificação;
- adicionar uma requisição personalizada com uma asserção que falhe intencionalmente.
O objetivo é fazer o relatório mostrar claramente que o cenário parou porque o login não retornou 200.
O resultado final é:
Se login.status == 200:
executar checkout
Senão:
reportar falha
Passo 7: salve e execute o cenário
Clique em Salvar Tudo.
Se houver alterações pendentes, o Apidog mostrará um indicador de ponto. Em seguida, execute o cenário inteiro:
- use credenciais válidas para testar o caminho
If; - use credenciais inválidas para testar o caminho
Else.
Variações e controle de fluxo avançado
Depois de configurar a ramificação básica, você pode aplicar a mesma estrutura a outros casos.
Ramifique usando um campo do corpo
Você não precisa limitar a condição ao status HTTP.
Imagine que o endpoint retorne 200 mesmo quando a conta está bloqueada:
{
"status": "blocked"
}
Nesse caso, avalie o campo retornado:
{{$.1.response.body.status}}
E configure uma condição como:
Igual a "active"
Outros exemplos:
-
Contémpara verificar uma mensagem; -
Maior quepara validar saldo ou quantidade; -
Na listapara permitir apenas determinados papéis de usuário.
Combine ramificações com loops
Ramificações e loops resolvem problemas diferentes, mas funcionam bem juntos.
Por exemplo, em um ForEach que percorre IDs de produtos, você pode usar uma Ramificação Condicional para ignorar itens sem estoque e processar apenas os disponíveis.
Referências úteis dentro de um loop:
{{$.<id do passo do loop>.index}}
O índice começa em 0.
Para acessar o elemento atual:
{{$.<id do passo do loop>.element.<caminho do campo>}}
Veja o tutorial de loop ForEach para detalhes.
Encerre loops com Break If
Em fluxos iterativos, use Condição Break If para encerrar o loop assim que uma condição for atendida.
Você pode:
- arrastar o elemento para mudar sua posição;
- adicionar mais de uma condição
Break Ifno mesmo loop.
Trate falhas com On Error
Loops incluem um elemento On Error fixado no início do fluxo. Ele define o que fazer quando uma requisição dentro do loop falha:
-
Ignorar: continua para a próxima requisição; -
Continuar: pula o restante das requisições da iteração atual; -
Interromper execução: encerra o loop e segue para os passos posteriores; -
Finalizar execução: interrompe todo o cenário.
Adicione espera entre passos
Use o elemento Esperar quando um serviço downstream precisa de tempo para refletir uma alteração.
O atraso é definido em milissegundos e é útil, por exemplo, entre:
Criar recurso → Esperar → Consultar recurso
Use valores em scripts
Quando a lógica for mais complexa do que os operadores do construtor de condições permitem, calcule o resultado em um script de pré-processamento ou pós-processamento.
Em scripts, a sintaxe {{variável}} não funciona diretamente. Use:
pm.variables.get("$.2.response.body.token")
A referência combina o ID do passo com o caminho do campo.
Para cenários de encadeamento, consulte:
Um cenário não pode referenciar a si mesmo como cenário de teste original. Essa proteção evita loops infinitos acidentais ao aninhar cenários.
Automatize o cenário com o Apidog CLI
Depois de validar o fluxo na interface, execute o mesmo cenário no CI usando o Apidog CLI.
Instale a CLI e autentique-se:
npm install -g apidog-cli
apidog login --with-token <YOUR_ACCESS_TOKEN>
Em seguida, execute o cenário por ID:
apidog run --access-token $APIDOG_ACCESS_TOKEN -t <scenario_id> -e <env_id> -r cli
Parâmetros:
| Opção | Descrição |
|---|---|
-t |
ID do cenário de teste |
-e |
ID do ambiente |
-r |
Formato do relatório |
Use cli para saída no console. Para gerar artefatos de pipeline, use html ou junit:
apidog run --access-token $APIDOG_ACCESS_TOKEN \
-t <scenario_id> \
-e <env_id> \
-r html,cli
A ramificação é resolvida da mesma forma que na interface:
- a CLI executa o login;
- lê a resposta;
- segue o caminho
IfouElse; - retorna um código de saída compatível com CI.
Consulte:
- guia de instalação do Apidog CLI;
- guia do Apidog CLI com GitHub Actions;
- como agendar testes de API no Apidog.
FAQ
Qual é a diferença entre Ramificação Condicional e loop no Apidog?
A Ramificação Condicional toma uma decisão única: executar ou não um bloco de passos.
Um loop repete um bloco várias vezes.
Use ramificação para decisões como:
Executar checkout apenas se o login funcionar
Use For ou ForEach para repetir requisições por contagem ou para cada item de um array. Veja o tutorial de loop ForEach.
Por que Recuperar dados do passo anterior retorna vazio?
As causas mais comuns são:
- o recurso funciona somente no módulo Testes, não no módulo APIs;
- a referência é resolvida ao executar o cenário completo, não um único passo isolado.
Execute o cenário inteiro para preencher o valor.
Posso ramificar por um campo do corpo da resposta?
Sim.
Use uma referência como:
{{$.1.response.body.status}}
Ou extraia o valor para uma variável nomeada. Depois, aplique operadores como Igual a, Contém ou Na lista.
Veja como passar dados entre passos de teste.
Como uso uma variável dentro de um script?
Scripts não aceitam {{variable}} diretamente.
Use:
pm.variables.get("$.2.response.body.token")
Ajuste o ID do passo e o caminho do campo para o valor que deseja acessar.
A Ramificação Condicional exige plano pago ou versão auto-hospedada?
A documentação do Apidog não lista restrições de plano para controle de fluxo, ramificações condicionais, loops ou passagem de dados. Também não indica distinção entre nuvem e auto-hospedado para esses recursos.
Conclusão
Um teste linear informa que algo falhou. Um teste com ramificação mostra onde falhou e evita executar passos que já não podem ter sucesso.
Para implementar esse padrão:
- adicione uma Ramificação Condicional;
- use a resposta anterior ou uma variável extraída como entrada;
- configure o bloco
Ifpara o caminho de sucesso; - configure
+ Elsepara registrar e encerrar falhas; - execute o mesmo cenário no CI com
apidog run.
Experimente o Apidog gratuitamente, sem necessidade de cartão de crédito, e transforme testes lineares em cenários que tomam decisões.



Top comments (0)