Você já tem um cenário de teste para o endpoint de checkout: três requisições encadeadas, asserções em cada resposta e execução manual funcionando. O problema aparece quando o pipeline precisa rodar o mesmo cenário com 40 combinações de entrada, dados mantidos pelo QA e ambientes diferentes, como staging e produção. Clonar o cenário 40 vezes não escala; o caminho prático é executar o mesmo cenário via CLI com dados de iteração.
Com o Apidog, você cria o cenário uma vez no construtor visual e executa esse cenário no terminal com o pacote apidog-cli. A flag principal é -d, abreviação de --iteration-data. Ela recebe um arquivo CSV, um arquivo JSON ou um conjunto de dados salvo no projeto Apidog, e executa o cenário uma vez por linha ou objeto.
Como a flag -d funciona
A opção aparece no apidog run --help assim:
-d, --iteration-data <path|testDataId> Define os dados a serem usados para as iterações (JSON ou CSV)
O argumento <path|testDataId> aceita duas formas:
- Caminho para um arquivo local CSV ou JSON.
- ID de um conjunto de dados salvo no projeto Apidog.
Exemplo com CSV local:
apidog run --access-token $APIDOG_ACCESS_TOKEN \
-t 605067 -e 1629989 \
-d ./test-data/checkout-cases.csv \
-r cli
Nesse comando:
-
-t 605067identifica o cenário de teste. -
-e 1629989define o ambiente. -
-d ./test-data/checkout-cases.csvfornece os dados de iteração. -
-r cliimprime o resultado no terminal.
Se o arquivo tiver 40 linhas abaixo do cabeçalho, o cenário será executado 40 vezes. Em cada execução, o CLI injeta os valores da linha nas variáveis usadas nas requisições e asserções.
O mesmo comando funciona com JSON:
apidog run --access-token $APIDOG_ACCESS_TOKEN \
-t 605067 -e 1629989 \
-d ./test-data/checkout-cases.json \
-r cli
Você não precisa informar manualmente se o arquivo é CSV ou JSON. O CLI interpreta o formato a partir do arquivo.
Estrutura esperada para CSV
Use CSV quando os casos forem tabulares e simples.
Exemplo de checkout-cases.csv:
sku,quantity,coupon,expected_status,expected_total
DESK-01,1,SAVE10,200,89.10
DESK-01,0,SAVE10,422,0
CHAIR-09,3,,200,447.00
DESK-01,1,EXPIRED,410,0
GHOST-99,1,SAVE10,404,0
Cada coluna vira uma variável disponível no cenário:
{
"sku": "{{sku}}",
"quantity": "{{quantity}}",
"coupon": "{{coupon}}"
}
Nas asserções, você pode comparar com os valores esperados da mesma linha:
status == {{expected_status}}
total == {{expected_total}}
A linha:
CHAIR-09,3,,200,447.00
faz coupon virar uma string vazia. Isso permite testar o caso “sem cupom” sem criar outro cenário.
Boas práticas para CSV:
- O cabeçalho deve ter exatamente o mesmo nome das variáveis usadas no cenário.
- Se um campo tiver vírgula, coloque o valor entre aspas.
- Coloque o resultado esperado no arquivo de dados, não fixo na asserção.
- Versione o CSV junto com o código ou com a configuração de teste.
Para detalhes sobre asserções com JSONPath, veja definindo asserções e extraindo variáveis de uma resposta JSON.
Estrutura esperada para JSON
Use JSON quando o caso de teste tiver dados aninhados ou estruturas difíceis de representar em colunas.
Exemplo de checkout-cases.json:
[
{
"label": "valid order, two items",
"order": {
"items": [
{ "sku": "DESK-01", "qty": 1 },
{ "sku": "CHAIR-09", "qty": 2 }
],
"shipping": {
"country": "US",
"method": "ground"
}
},
"expected_status": 200
},
{
"label": "unshippable country",
"order": {
"items": [
{ "sku": "DESK-01", "qty": 1 }
],
"shipping": {
"country": "ZZ",
"method": "ground"
}
},
"expected_status": 422
}
]
No cenário, você pode usar:
{
"order": "{{order}}"
}
E nas asserções:
status == {{expected_status}}
O campo label ajuda a identificar a iteração no relatório. Em vez de ver apenas “iteração 2”, você verá algo como unshippable country, o que acelera o diagnóstico.
Executando a partir de um conjunto de dados salvo no Apidog
Além de arquivos locais, -d também aceita um ID de dados de teste:
apidog run --access-token $APIDOG_ACCESS_TOKEN \
-t 605067 -e 1629989 \
-d 38291 \
-r cli
Nesse caso, o CLI busca o conjunto de dados salvo no projeto Apidog.
Use essa opção quando:
- A equipe de QA mantém os dados diretamente no Apidog.
- Os dados não precisam estar versionados no repositório.
- Várias pessoas atualizam a mesma tabela compartilhada.
Use arquivo versionado quando:
- Os dados precisam acompanhar o código.
- Você quer revisar mudanças nos casos de teste via pull request.
- A execução precisa ser reproduzível a partir de um commit específico.
Nenhuma abordagem é “melhor” em todos os casos. A escolha depende de onde deve estar a fonte da verdade dos dados.
Executando offline com um arquivo exportado
Você também pode exportar um caso de teste do Apidog como arquivo e executá-lo diretamente:
apidog run ./checkout.apidog-cli.json -r cli,html
Aqui, o primeiro argumento é o arquivo exportado do cenário. Você não precisa informar -t nem buscar o cenário online.
Também é possível combinar esse arquivo com dados de iteração:
apidog run ./checkout.apidog-cli.json \
-d ./checkout-cases.csv \
-r cli,junit
Esse modo é útil quando:
- O runner de CI não consegue acessar a nuvem do Apidog.
- Você quer executar um snapshot fixo do cenário.
- Você precisa garantir que alterações futuras no cenário dentro do app não afetem a execução atual.
Para instalação e primeiros passos, consulte o guia de instalação do Apidog CLI. Para todas as flags, veja a referência completa do Apidog CLI.
Combinando -d com -n, --env-var e --global-var
Execuções orientadas a dados normalmente precisam de mais flags além de -d.
Repetindo execuções com -n
A flag -n define a quantidade de iterações:
apidog run --access-token $APIDOG_ACCESS_TOKEN \
-t 605067 -e 1629989 \
-n 50 \
-r cli
Quando você usa -d, a quantidade de linhas ou objetos já define o número de iterações. Por isso, -n geralmente é desnecessário com arquivos de dados.
Use -n quando quiser repetir um cenário sem arquivo de dados, por exemplo em um teste de soak.
Injetando variáveis em tempo de execução
Use --env-var e --global-var para passar valores específicos da execução:
apidog run --access-token $APIDOG_ACCESS_TOKEN \
-t 605067 -e 1629989 \
-d ./test-data/checkout-cases.csv \
--env-var "base_url=https://staging.internal" \
--global-var "api_key=$RUNTIME_API_KEY" \
-r cli,junit
A separação recomendada é:
- CSV/JSON: entradas de teste e resultados esperados.
-
--env-var/--global-var: URLs, chaves, tokens e valores por ambiente.
Não coloque credenciais no CSV ou JSON. Passe segredos a partir do secret store da CI.
Gerando relatórios por iteração
Para usar testes orientados a dados na CI, você precisa identificar exatamente qual linha falhou.
Exemplo com saída no terminal e relatório JUnit:
apidog run --access-token $APIDOG_ACCESS_TOKEN \
-t 605067 -e 1629989 \
-d ./test-data/checkout-cases.csv \
-r cli,junit \
--out-dir ./test-reports
Reporters úteis:
-
cli: mostra um resumo legível no terminal. -
junit: gera XML compatível com dashboards de CI. -
html: gera relatório navegável. -
json: gera saída estruturada para pós-processamento.
Use --out-dir para controlar onde os relatórios serão salvos.
Continuando após falhas com --on-error
Por padrão, uma execução pode parar ao encontrar erro. Em uma tabela grande, isso atrapalha, porque você quer saber todas as linhas quebradas de uma vez.
Use:
apidog run --access-token $APIDOG_ACCESS_TOKEN \
-t 605067 -e 1629989 \
-d ./test-data/checkout-cases.csv \
--on-error continue \
-r cli,junit \
--out-dir ./test-reports
Com --on-error continue, o CLI executa todas as iterações, mesmo que algumas falhem.
Opções comuns:
-
continue: executa tudo e reporta todas as falhas. -
end: comportamento de falha rápida. -
ignore: ignora erros, útil apenas em casos específicos e controlados.
Mesmo com continue, a execução ainda pode terminar com código diferente de zero se houver falhas, mantendo o pipeline como gate de qualidade.
Depurando variáveis que não foram vinculadas
Um problema comum em testes orientados a dados é a execução “verde” que não testou o que deveria. Isso acontece quando a variável não é substituída e a requisição vai com valor vazio ou com {{variavel}} literal.
Para depurar, rode com --verbose:
apidog run --access-token $APIDOG_ACCESS_TOKEN \
-t 605067 -e 1629989 \
-d ./test-data/checkout-cases.csv \
--verbose \
-r cli
Verifique o corpo da requisição enviado em cada iteração.
Se aparecer algo como:
{
"sku": "{{sku}}"
}
ou:
{
"sku": ""
}
quando o CSV tinha valor, a vinculação falhou.
Causas comuns:
- Nome da coluna diferente do nome da variável.
Exemplo: o CSV tem product_sku, mas o cenário usa {{sku}}.
- CSV quebrado por vírgula sem aspas.
Exemplo:
sku,description,expected_status
DESK-01,mesa grande, branca,200
Corrija para:
sku,description,expected_status
DESK-01,"mesa grande, branca",200
- Caminho errado na CI.
O arquivo existe localmente, mas não no diretório de trabalho do runner.
Antes de confiar em uma execução verde, valide pelo menos uma execução com --verbose.
Exemplo com GitHub Actions
Abaixo está um workflow que instala o CLI e executa o cenário em cada pull request:
name: Data-driven API tests
on: [pull_request]
jobs:
api-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Apidog CLI
run: npm install -g apidog-cli
- name: Run data-driven scenario
env:
APIDOG_ACCESS_TOKEN: ${{ secrets.APIDOG_ACCESS_TOKEN }}
run: |
apidog run --access-token $APIDOG_ACCESS_TOKEN \
-t 605067 -e 1629989 \
-d ./test-data/checkout-cases.csv \
--on-error continue \
-r cli,junit \
--out-dir ./test-reports
- name: Upload report
if: always()
uses: actions/upload-artifact@v4
with:
name: api-test-report
path: ./test-reports
Pontos importantes:
-
APIDOG_ACCESS_TOKENvem desecrets. -
--on-error continuecoleta todas as falhas. -
if: always()faz upload do relatório mesmo quando os testes falham. - Para trocar CSV por JSON, altere apenas o valor de
-d. - Para usar conjunto de dados salvo, troque o caminho por um ID.
Os mesmos passos funcionam em outros CIs:
- Instale Node.js.
- Instale
apidog-cli. - Exponha o token como variável de ambiente.
- Execute
apidog runcom-d.
Para um guia focado em Actions, veja automação de testes de API no GitHub Actions. Para a lista completa de flags, consulte o guia completo do Apidog CLI.
Fluxo recomendado
Comece pequeno:
- Crie um cenário no Apidog.
- Use variáveis nas requisições, como
{{sku}}e{{quantity}}. - Use variáveis nas asserções, como
{{expected_status}}. - Crie um CSV com três linhas:
- caminho feliz;
- erro conhecido;
- caso de limite.
- Rode localmente com
-d. - Ative
--verbosese algo parecer estranho. - Adicione o comando à CI com
junite--on-error continue.
Depois, cresça apenas os dados. Cada bug corrigido pode virar uma nova linha no CSV ou um novo objeto no JSON. O cenário continua pequeno; a cobertura aumenta com a tabela.
Esse é o principal ganho: você mantém um único cenário e expande a cobertura sem duplicar testes.
Se você ainda está comparando abordagens, veja qual ferramenta escolher para testes de API orientados a dados com CSV ou JSON e Apidog CLI vs Newman.
Perguntas Frequentes
A flag -d aceita arquivo e conjunto de dados salvo?
Sim, mas apenas um por execução. Você passa um caminho CSV/JSON local ou um ID de dados de teste salvo no projeto Apidog.
Use arquivo quando quiser versionar os dados com o repositório. Use ID salvo quando a tabela for mantida dentro do Apidog pela equipe.
Preciso informar se o arquivo é CSV ou JSON?
Não. O CLI interpreta o arquivo. A exigência principal é manter os nomes das colunas CSV ou chaves JSON iguais às variáveis usadas no cenário.
O que acontece se eu usar -d e -n juntos?
Com -d, o arquivo define as iterações. Portanto, -n normalmente não é necessário. Use -n principalmente para repetir cenários sem arquivo de dados ou para casos específicos em que você quer repetir a tabela.
Por que minha execução passou sem testar os dados?
Provavelmente alguma variável não foi vinculada. Verifique:
- nomes das colunas;
- nomes das variáveis;
- caminho do arquivo na CI;
- CSV quebrado por vírgulas sem aspas.
Rode com --verbose e inspecione a requisição enviada.
Como mantenho credenciais fora do arquivo de dados?
Não coloque tokens ou chaves no CSV/JSON. Use:
--global-var "api_key=$RUNTIME_API_KEY"
ou:
--env-var "base_url=https://staging.internal"
Passe esses valores a partir dos secrets da CI.
Posso usar os mesmos dados em staging e produção?
Sim. Mantenha o cenário e o arquivo de dados iguais e altere o ambiente com -e:
apidog run --access-token $APIDOG_ACCESS_TOKEN \
-t 605067 \
-e 1629989 \
-d ./test-data/checkout-cases.csv \
-r cli
Para outro ambiente, troque apenas o valor de -e.
Conclusão
A flag -d é o ponto central para testes de API orientados a dados com Apidog CLI. Ela permite executar o mesmo cenário com CSV, JSON ou um conjunto de dados salvo no projeto. Combinada com --env-var, --global-var, --on-error continue e reporters como cli e junit, ela transforma um cenário manual em uma execução automatizada e adequada para CI.
Crie o cenário uma vez, coloque os casos em uma tabela e deixe o CLI executar cada linha a cada push. Baixe o Apidog, rode apidog run -d com seu primeiro arquivo de dados e transforme um único cenário em uma suíte orientada a dados.
Top comments (0)