Sua API passa em todos os testes no seu laptop. Então, um colega de equipe mescla uma branch que renomeia um campo, e ninguém percebe até que um cliente mobile comece a falhar em produção. O teste manual não detectou isso porque ninguém reexecutou a suíte. Essa é a lacuna exata que a integração contínua foi construída para fechar, e o TeamCity é uma das ferramentas mais fortes para isso.
O TeamCity, servidor de CI/CD da JetBrains, executa seu pipeline de build toda vez que o código é integrado. Ele pode compilar, testar, empacotar e implantar sem que ninguém precise clicar em um botão. A parte que as equipes frequentemente pulam é a integração de testes de API reais nesse pipeline. Eles testam unidades, verificam se o build compila e entregam a API na base da fé. Um campo renomeado, um erro 500 em um caso de borda, um fluxo de autenticação quebrado; nada disso aparece até que um humano acesse o endpoint.
Este guia mostra como executar testes de API automatizados no TeamCity, do início ao fim. Você projetará e validará seus testes no Apidog, e então os executará sem interface gráfica através do Apidog CLI como uma etapa de build do TeamCity. O resultado é um pipeline que falha o build no momento em que sua API para de se comportar, antes que uma resposta ruim chegue a um usuário.
O que você vai construir
Ao final, você terá:
- Um projeto TeamCity conectado ao seu repositório Git
- Uma configuração de build com um gatilho VCS que é acionado a cada push
- Uma etapa de build que executa sua suíte de testes de API através do Apidog CLI
- Resultados de teste analisados visíveis na aba Testes do TeamCity
- Um build que fica vermelho e bloqueia a mesclagem quando um endpoint quebra
O mesmo padrão funciona para um pequeno serviço interno ou uma API pública com centenas de endpoints. Você o escala adicionando cenários de teste no Apidog, e não editando o código do pipeline.

Por que os testes de API devem estar no TeamCity, e não apenas na sua máquina
O teste local tem uma falha fatal: ele depende de alguém se lembrar de executá-lo. A CI remove o humano do processo. Cada commit aciona a mesma suíte, no mesmo ambiente, com as mesmas asserções. Não existe "funciona na minha máquina" porque não há máquina; há um agente de build que executa os passos exatos que você definiu.

O TeamCity é uma boa opção para isso por algumas razões concretas:
- Cadeias de build. Você pode fazer com que a etapa de teste de API dependa de uma etapa de implantação em staging, para que os testes sempre sejam executados contra um build recém-implantado, nunca um obsoleto.
- Histórico de testes. O TeamCity rastreia quais testes passaram e falharam em centenas de builds. Quando um teste começa a apresentar falhas intermitentes, você vê exatamente qual commit o introduziu.
- Investigação e silenciamento. Um endpoint instável pode ser silenciado e atribuído a um proprietário em vez de bloquear as mesclagens de todos.
- Pools de agentes. Suítes pesadas são executadas em agentes dedicados para não atrasar seus builds de compilação.
O problema é que o TeamCity não sabe como chamar sua API ou verificar a resposta. Ele executa qualquer comando que você lhe dê. Portanto, o verdadeiro trabalho é produzir um único comando que execute toda a sua suíte de API e saia com um código diferente de zero quando algo falhar. É aí que o design do teste importa.
Passo 1: Projete e valide seus testes de API no Apidog
Antes que qualquer coisa toque o TeamCity, você precisa de testes que realmente funcionem sem supervisão. Um teste que exige que você inspecione visualmente uma resposta JSON é inútil na CI. Cada verificação precisa ser uma asserção que a máquina possa avaliar: o código de status é 200, o campo id é um número, a resposta veio em menos de 800 ms.
O Apidog foi construído exatamente para isso. Você projeta a requisição e, em seguida, anexa asserções de API que validam a resposta automaticamente; códigos de status, conformidade com JSON Schema, valores de campo específicos, tempo de resposta. Você pode encadear requisições em um cenário para que a saída de uma chamada de login alimente o token na próxima requisição. Nenhum script é necessário para os casos comuns, e scripting completo está disponível quando você precisar.
Um cenário realista para uma API de e-commerce pode parecer com isto:
- POST
/auth/logincom credenciais de teste, asserir200, extrair o token bearer para uma variável. - GET
/products?category=bookscom esse token, asserir200, asserir que a resposta é um array, asserir que cada item tem umpricemaior que 0. - POST
/cart/itemscom um ID de produto, asserir201, asserir que o total do carrinho retornado corresponde ao preço do item. - GET
/cart, asserir que a contagem de itens é 1.
Cada etapa possui asserções que passam ou falham por si só. Execute o cenário dentro do Apidog primeiro e confirme que ele está verde contra seu ambiente de staging. Se não conseguir passar quando você o executa manualmente, nunca passará na CI. Agrupe cenários relacionados em uma suíte de testes para que você possa executar tudo com um único comando, em vez de cenário por cenário.
A vantagem de construir testes dessa forma é que os mesmos cenários que você usa para depuração manual se tornam sua suíte de CI. Você não mantém dois conjuntos paralelos de testes; um em uma GUI para exploração, outro em código para automação. É uma única fonte de verdade. Se você vem de um framework code-first como o REST Assured, esta é a parte que economiza mais tempo: você para de escrever e reescrever código boilerplate de requisição/asserção para cada endpoint.
Baixe o Apidog se quiser acompanhar. É gratuito para começar, e o CLI faz parte da mesma ferramenta.
Passo 2: Faça o Apidog CLI funcionar localmente primeiro
Nunca depure um novo comando pela primeira vez dentro da CI. O ciclo de feedback em um servidor de CI é brutal; você faz um push, espera por um agente, lê um log, corrige um caractere, faz push novamente. Prove que o comando funciona na sua máquina, e então copie a versão funcional para o TeamCity.
O Apidog CLI roda em Node.js, então instale-o globalmente com npm:
npm install -g apidog-cli
Confirme se está lá:
apidog --version
Agora, execute seu cenário de teste. O CLI pode executar um cenário ou suíte diretamente do seu projeto Apidog, referenciando seu ID, autenticado com um token de acesso, ou de um arquivo local exportado. A abordagem online mantém seus testes como a única fonte de verdade; o que sua equipe edita no Apidog é o que roda na CI, sem nenhuma etapa de exportação para esquecer.
Gere um token de acesso nas configurações da sua conta Apidog e execute:
apidog run \
--access-token "$APIDOG_ACCESS_TOKEN" \
-e "$APIDOG_ENV_ID" \
-r cli,html,junit
Algumas coisas a serem observadas aqui:
--access-tokenautentica a execução. Passe-o diretamente assim, ou faça login uma vez comapidog login --with-token.-eseleciona o ambiente a ser executado; staging, produção-somente-leitura, o que você definiu no Apidog. Você aponta os mesmos testes para diferentes URLs base, alternando este ID.-rescolhe os relatores.cliimprime a saída legível por humanos no console,htmlproduz um relatório que você pode navegar, e um relatório no formato JUnit é o que permite ao TeamCity analisar e exibir resultados de testes individuais.
Quando a execução termina, o CLI sai com 0 se tudo passou e diferente de zero se alguma asserção falhou. Esse código de saída é tudo na CI: uma saída diferente de zero é o que diz ao TeamCity para marcar o build como falho.
Para testes que precisam ser executados com muitas entradas, o CLI suporta execuções baseadas em dados. Aponte-o para um arquivo CSV ou JSON e ele iterará o cenário uma vez por linha:
apidog run \
--access-token "$APIDOG_ACCESS_TOKEN" \
-d test-data/checkout-cases.csv \
-r cli,junit
É assim que você testa cem IDs de produto ou uma tabela de payloads inválidos sem escrever cem cenários. Cada linha se torna sua própria iteração com seu próprio resultado de sucesso/falha.
Assim que você vir a saída verde localmente, você terá um comando em que confia. Copie-o. Esse comando exato é o que vai para o TeamCity.
Passo 3: Conecte o TeamCity ao seu repositório
Agora, mude para o TeamCity. O objetivo desta etapa é dar ao TeamCity um projeto, apontá-lo para o seu código e permitir que ele acione builds a cada push.
Se você está executando o TeamCity pela primeira vez, o caminho mais simples é a imagem oficial do Docker. Ela te dá um servidor funcional em alguns minutos:
docker run -d --name teamcity-server \
-v ~/teamcity/datadir:/data/teamcity_server/datadir \
-v ~/teamcity/logs:/opt/teamcity/logs \
-p 8111:8111 \
jetbrains/teamcity-server
Abra http://localhost:8111, complete a configuração inicial (escolha do banco de dados, conta de administrador), e você chegará ao painel. Configurações de produção usam um banco de dados externo adequado e agentes de build dedicados, mas para seguir este guia o agente embutido é suficiente.
Crie o projeto:
- Vá para Administração e escolha Criar projeto.
- Selecione De um URL de repositório e cole seu repositório Git remoto (HTTPS ou SSH).
- Adicione credenciais se o repositório for privado; uma chave de implantação ou um token de acesso pessoal.
- O TeamCity escaneia o repositório e deve detectar automaticamente as etapas de build. Você pode deixar que ele faça isso, mas para testes de API é mais limpo configurar a etapa você mesmo na próxima seção.
O TeamCity cria um VCS root (sua conexão com o seu repositório) e uma configuração de build (o conjunto de etapas que são executadas). Com o VCS root configurado, configure o gatilho para que os builds sejam acionados automaticamente:
- Abra sua configuração de build e vá para Gatilhos (Triggers).
- Adicione um Gatilho VCS (VCS Trigger).
- Deixe a regra padrão para que cada alteração na branch observada enfileire um build.
A partir daqui, cada push para o seu repositório iniciará um build. No momento, esse build não faz nada útil; a próxima etapa lhe dará o comando de teste de API.
Passo 4: Adicione o Apidog CLI como uma etapa de build
Este é o cerne da configuração. Você está adicionando uma etapa de build que instala o CLI no agente e executa sua suíte.
Na sua configuração de build, abra Etapas de Build (Build Steps) e adicione uma nova etapa do tipo Linha de Comando (Command Line). Escolha script personalizado (Custom script) e cole:
#!/bin/bash
set -e
# Install the Apidog CLI on the build agent
npm install -g apidog-cli
# Run the API test suite and emit a JUnit report for TeamCity
apidog run \
--access-token "%env.APIDOG_ACCESS_TOKEN%" \
-e "%env.APIDOG_ENV_ID%" \
-r cli,junit \
--out-dir reports
Esse é o mesmo comando que você provou localmente, com duas alterações para a CI. Primeiro, set -e faz com que o script seja abortado em caso de erro. Segundo, os segredos são referenciados como parâmetros do TeamCity (%env.APIDOG_ACCESS_TOKEN%) em vez de estarem codificados; você os definirá a seguir.
Se o seu agente de build ainda não tiver o Node.js, instale-o antes na cadeia ou use uma imagem de agente que o inclua. As imagens Docker oficiais do agente TeamCity e a maioria dos pools de agentes em nuvem vêm com o Node disponível. Você também pode executar a etapa inteira dentro de um contêiner Node, configurando a etapa para ser executada em uma imagem Docker como node:20.
Um detalhe importante: o CLI deve ser executado depois que sua API for implantada e estiver acessível. Se o TeamCity estiver testando um serviço que acabou de implantar em staging, faça o build de teste depender do build de implantação usando uma Dependência de Snapshot ou uma Cadeia de Build. Isso garante que os testes sempre atinjam a versão da API produzida por este commit, e nunca a anterior.
Passo 5: Armazene segredos como parâmetros do TeamCity
Seu token de acesso é uma credencial. Ele não deve estar no script de build, no seu repositório ou no log de build. O TeamCity tem um lugar de primeira classe para isso.
- Na sua configuração de build (ou no projeto pai, para compartilhar entre configurações), abra Parâmetros (Parameters).
- Adicione um novo parâmetro chamado
env.APIDOG_ACCESS_TOKEN. - Defina seu Tipo (Spec) como Senha (Password). Isso mascara o valor na UI e o remove dos logs de build.
- Cole seu token de acesso Apidog como o valor.
- Adicione
env.APIDOG_ENV_IDda mesma forma com seu ID de ambiente (este não é secreto, mas mantê-lo como um parâmetro permite alterar ambientes sem editar o script).
Defini-los no nível do projeto, em vez do nível da configuração de build, significa que cada build de teste de API sob esse projeto os herda. Gire o token uma vez, e cada pipeline pegará o novo valor.
Um parâmetro de senha é a diferença entre um token que vive com segurança no TeamCity e um que vaza para um arquivo de log que toda a equipe pode ler. Trate-o da mesma forma que você trataria uma senha de banco de dados.
Passo 6: Mostre os resultados dos testes na aba Testes do TeamCity
Um build que fica vermelho apenas informa que algo quebrou. Um build que mostra qual teste quebrou diz onde procurar. Isso é o que o relatório JUnit lhe dá.

O relator -r junit escreve um arquivo XML no formato JUnit, o formato padrão de resultados de teste de CI que o TeamCity lê nativamente. Você aponta o TeamCity para esse arquivo com um recurso de build de Processamento de Relatório XML.
- Abra Recursos de Build (Build Features) na sua configuração de build.
- Adicione Processamento de relatório XML (XML report processing).
- Defina o tipo de relatório para Ant JUnit.
- Defina o caminho de monitoramento para corresponder à sua saída, por exemplo
reports/*.xml.
Execute um build. Abra-o e clique na aba Testes (Tests). Você verá cada cenário e asserção como um teste individual com status de sucesso/falha e tempo. Quando um teste falha, o TeamCity mostra a mensagem de falha em linha, o vincula ao commit que a introduziu e o rastreia em builds futuros. Se o mesmo teste falhar duas vezes seguidas, o TeamCity pode marcá-lo como uma nova falha, em vez de uma falha intermitente.
Esta é a recompensa por escolher a saída JUnit anteriormente. Sem ela, uma falha é um build vermelho e uma parede de texto no console. Com ela, você obtém um histórico de testes estruturado e pesquisável que transforma "o build da API está quebrado" em "a asserção do total do carrinho começou a falhar no commit a3f9c2."
Passo 7: Falhe o build e bloqueie a mesclagem
O objetivo de tudo isso é impedir que código ruim seja mesclado. Duas coisas fazem isso acontecer.
Primeiro, o código de saída. Como o Apidog CLI sai com um código diferente de zero em qualquer asserção falha e seu script usa set -e, um teste falho faz a etapa de build falhar, o que faz o build falhar. Você não precisa configurar nada extra; um teste de API vermelho é um build vermelho por padrão.
Segundo, o portão de mesclagem. Se sua equipe trabalha com pull requests ou merge requests, configure seu host Git (GitHub, GitLab, Bitbucket) para exigir que a verificação do TeamCity passe antes da mesclagem. O TeamCity reporta o status do seu build de volta ao commit através de um recurso de build Editor de Status de Commit (Commit Status Publisher):
- Adicione o recurso de build Editor de Status de Commit (Commit Status Publisher).
- Selecione seu provedor de hospedagem VCS.
- Adicione um token de acesso para que o TeamCity possa postar status.
Agora um colaborador abre um PR, o TeamCity executa a suíte de API contra sua branch, e o botão de mesclagem permanece desabilitado até que a suíte esteja verde. O cenário de campo renomeado do início deste guia é detectado aqui, na branch, antes mesmo de chegar à main.
Um pipeline completo realista
Juntando as peças, uma configuração de build funcional para um pipeline de testes de API se parece com isto:
- VCS root apontando para o seu repositório, com um gatilho VCS na branch principal e branches de PR.
- Etapa de build 1: implante o serviço em um ambiente de staging (ou inicie-o em um contêiner Docker no agente).
- Etapa de build 2: o comando Apidog CLI do Passo 4, executando sua suíte contra esse ambiente de staging.
- Recursos de build: Processamento de relatório XML lendo
reports/*.xml. - Recursos de build: Editor de Status de Commit (Commit Status Publisher) reportando de volta ao seu host Git.
- Parâmetros:
env.APIDOG_ACCESS_TOKEN(senha) eenv.APIDOG_ENV_ID.
Para equipes que mantêm toda a sua configuração de CI no controle de versão, o TeamCity suporta a definição de tudo isso em um DSL Kotlin (.teamcity/settings.kts) commitado no repositório, em vez de clicar na UI. A etapa de build é o mesmo comando apidog run de qualquer forma; o DSL apenas descreve a configuração como código para que seja revisada e versionada junto com todo o resto.

Você pode executar a suíte em mais do que apenas a cada push. Adicione um Gatilho de Agendamento (Schedule Trigger) para executar a suíte de regressão completa todas as noites contra o ambiente de staging, para que você detecte desvios que acontecem entre commits; uma dependência de terceiros que mudou, um banco de dados que entrou em um estado estranho. As execuções noturnas da API são um seguro barato e impedem que o primeiro commit da manhã herde o ambiente quebrado do dia anterior.
Como isso se compara a outras plataformas de CI
O padrão aqui é portátil. O comando que executa seus testes (apidog run com um token de acesso e um relator JUnit) é idêntico, não importa qual servidor de CI o invoque. Apenas o invólucro muda:
- No GitHub Actions, você colocaria o mesmo comando em uma etapa do workflow YAML. Abordamos isso em Como Automatizar Testes de API no GitHub Actions.
- No Jenkins, ele vai em um estágio do
Jenkinsfile. Veja Como Integrar Testes Automatizados do Apidog com Jenkins para CI/CD. - A estratégia mais ampla em qualquer plataforma está em Como Automatizar Testes de API em CI/CD.
Se você ainda está escolhendo um servidor de CI, nossa comparação das melhores ferramentas de CI/CD detalha onde o TeamCity se encaixa em relação às alternativas. Os pontos fortes do TeamCity são suas cadeias de build, histórico de testes granular e o DSL Kotlin; é uma excelente escolha para equipes já no ecossistema JetBrains ou que executam pipelines complexos de múltiplas etapas.
Problemas comuns e como resolvê-los
- O build não consegue encontrar o comando
apidog. O Node.js não está instalado no agente, ou o diretório bin global do npm não está no PATH do agente. Adicione uma etapa de instalação do Node antes na cadeia, ou execute a etapa dentro de uma imagem Dockernode:20. - Os testes passam localmente, mas falham na CI com erros de conexão. O agente de build não consegue alcançar sua API. Uma URL de staging que se resolve na VPN do seu laptop pode ser inacessível de um agente em nuvem. Confirme se o ambiente que você seleciona com
-eaponta para um host que o agente pode realmente alcançar, e que quaisquer regras de acesso de rede ou firewall necessárias cobrem o agente. - A autenticação falha apenas na CI. Verifique se o parâmetro de senha está escrito exatamente como o script o referencia e se o token não expirou. Um erro comum é definir
APIDOG_ACCESS_TOKENenquanto o script lê%env.APIDOG_ACCESS_TOKEN%; o prefixoenv.importa. - Os testes são instáveis; eles passam e falham no mesmo código. Geralmente um problema de tempo ou ordem de dados. Use as asserções de tempo de resposta do Apidog para identificar endpoints lentos, e faça com que cada cenário configure e desfaça seus próprios dados para que as execuções não dependam dos resíduos umas das outras. O recurso de silenciar e investigar do TeamCity permite que você coloque um teste instável em quarentena para que ele pare de bloquear todos enquanto você corrige a causa raiz.
- A aba Testes está vazia, embora o build tenha sido executado. O caminho de processamento do relatório XML não corresponde ao local onde o CLI escreveu o relatório. Confirme se
--out-dirno comando e o caminho de monitoramento no recurso de build apontam para o mesmo lugar.
FAQ
- Preciso escrever código para executar testes de API no TeamCity? Não. Você projeta os testes visualmente no Apidog com asserções, e o único "código" no TeamCity é o comando
apidog runde uma linha em uma etapa de build de Linha de Comando. Essa é a principal diferença de uma abordagem code-first como o REST Assured, onde cada endpoint precisa de código de requisição e asserção escrito manualmente. - Posso executar os testes em diferentes ambientes? Sim. Defina cada ambiente (staging, pré-produção, produção-somente-leitura) no Apidog e, em seguida, alterne qual deles será executado na CI, alterando o parâmetro de ID do ambiente
-e. Os mesmos testes são executados em qualquer ambiente, apontando para uma URL base diferente. - Como mantenho meu token de acesso seguro no TeamCity? Armazene-o como um parâmetro do TeamCity com a especificação de Senha (Password). Isso o mascara na UI e o remove dos logs de build. Nunca o codifique diretamente no script de build ou o comite no seu repositório. Defina-o no nível do projeto para poder rotacioná-lo uma vez para todos os pipelines.
- Um teste de API falho realmente bloqueará uma mesclagem? Sim, com duas peças no lugar. O Apidog CLI sai com um código diferente de zero em qualquer asserção falha, o que faz o build do TeamCity falhar. Adicione o recurso de build Editor de Status de Commit (Commit Status Publisher) e exija a verificação nas regras de proteção de branch do seu host Git, e o botão de mesclagem permanecerá desabilitado até que a suíte passe.
- Qual a diferença entre executar testes online e de um arquivo exportado? Executar online por ID de projeto e token de acesso significa que seus testes no Apidog são a única fonte de verdade; o que a equipe edita é o que é executado na CI. Executar de um arquivo exportado fixa os testes a uma versão commitada em seu repositório. O online é mais simples de manter sincronizado; o exportado oferece testes que viajam com o código. A maioria das equipes começa online.
- Posso executar a suíte de regressão completa em um agendamento em vez de a cada push? Sim. Adicione um Gatilho de Agendamento (Schedule Trigger) à configuração de build para executar diariamente (ou de hora em hora) contra o ambiente de staging. Muitas equipes executam uma suíte de fumaça rápida a cada push e a suíte de regressão completa em um agendamento noturno, para que feedback rápido e cobertura profunda não compitam pelos mesmos minutos.
Conclusão
Um pipeline do TeamCity que executa seus testes de API a cada commit muda a economia de um endpoint quebrado. Em vez de um cliente encontrar o bug, o build o encontra; na branch, antes da mesclagem, com a asserção exata falha e o commit que a causou, tudo detalhado na aba Testes.
A configuração se resume a três partes principais: testes com asserções reais que você constrói no Apidog, um único comando apidog run que os executa sem interface gráfica e sai com um código diferente de zero em caso de falha, e uma configuração de build do TeamCity que executa esse comando, analisa os resultados do JUnit e reporta o status de volta ao seu host Git. Uma vez implementado, você mantém a cobertura adicionando cenários no Apidog, e não mexendo no código do pipeline.
Baixe o Apidog para projetar sua primeira suíte de testes, prove o comando CLI localmente e, em seguida, insira-o no TeamCity. A partir desse ponto, sua API será testada da mesma forma em cada commit, independentemente de alguém se lembrar de executá-la ou não.
