Como Testar a API do ChatGPT com Apidog: Autenticação, Streaming, Ferramentas e CI

Testes de API ChatGPT ponta a ponta no Apidog. Configure a autenticação, envie conclusões de chat, depure streaming SSE, valide chamadas de ferramenta, simule respostas e envie cenários de teste de CI.

Ashley Innocent

Ashley Innocent

9 junho 2026

Como Testar a API do ChatGPT com Apidog: Autenticação, Streaming, Ferramentas e CI

Apidog para empresas

Implantação local

SSO & RBAC

Conforme SOC 2

Explorar Apidog Enterprise

A API do ChatGPT é lançada rapidamente, quebra contratos com frequência e cobra por token mesmo quando seus testes estão errados. Respostas de streaming falham de forma diferente das não-streaming. A chamada de função adiciona uma camada de JSON-schema que nem sempre corresponde ao que o modelo retorna. Limites de taxa são atingidos silenciosamente em produção e não no seu console de desenvolvimento. Se você depurar tudo isso em um REPL Python ou um loop curl, você gasta dinheiro e tempo.

Este guia apresenta o fluxo de trabalho completo de teste da API do ChatGPT dentro do Apidog: autenticação, a primeira conclusão de chat, streaming SSE, chamada de função, tratamento de erros, verificações de limite de taxa e respostas simuladas para trabalho frontend paralelo. Ao final, você terá um projeto Apidog reutilizável que detecta desvios de contrato da OpenAI antes que cheguem à produção.

button

TL;DR

Por que testar a API do ChatGPT?

A superfície da API da OpenAI parece estável. Não é. Entre janeiro de 2024 e agora, a equipe lançou ou alterou:

Se você conectar qualquer uma dessas funcionalidades diretamente em seu aplicativo e pular uma camada de teste, seu próximo PR de mudança de prompt lançará uma regressão que você não verá até que os usuários reclamem. Uma coleção de requisições no Apidog oferece um contrato que você controla. Você pode reproduzir a requisição exata, comparar a resposta e falhar ruidosamente quando a forma muda.

Passo 1: Adicionar OpenAI como um ambiente no Apidog

Abra o Apidog e crie um novo projeto. Dentro do projeto, abra Gerenciamento de Ambiente (dropdown no canto superior direito) e adicione um ambiente chamado OpenAI Prod:

Variável Valor
baseUrl https://api.openai.com/v1
OPENAI_API_KEY sk-proj-... (armazenar como Secreto)
defaultModel gpt-5.5

Marque OPENAI_API_KEY como secreto para que seja mascarado em workspaces compartilhados e nunca seja escrito em coleções exportadas. O Apidog armazena segredos por usuário, então um colega de equipe que puxar o projeto verá o nome da variável, mas fornecerá sua própria chave.

Passo 2: Configurar autenticação Bearer no nível da pasta

Crie uma pasta chamada ChatGPT dentro do projeto. Abra as configurações da pasta, vá para Autenticação, escolha Bearer Token e cole {{OPENAI_API_KEY}}. Toda requisição dentro da pasta herda este cabeçalho. Você para de colar Authorization: Bearer sk-... em cada requisição, e a rotação de chaves é uma única edição.

Este é o pequeno detalhe que torna o Apidog mais rápido do que um fluxo de trabalho curl puro: a autenticação reside em um só lugar, os corpos das requisições permanecem limpos.

Passo 3: Criar a primeira requisição de conclusão de chat

Dentro da pasta ChatGPT, crie uma nova requisição:

{
  "model": "{{defaultModel}}",
  "messages": [
    { "role": "system", "content": "You are a senior backend engineer. Answer in under 100 words." },
    { "role": "user", "content": "What's the difference between idempotent and safe HTTP methods?" }
  ],
  "temperature": 0.2
}

Clique em Enviar. Você deve receber um 200 com um campo choices[0].message.content contendo a resposta e um bloco usage com a contagem de tokens. Salve a requisição como chat-completion-basic.

Se você receber 401, sua chave não foi carregada. Verifique se o dropdown de ambiente no canto superior direito está configurado para OpenAI Prod. Se você receber 429, você atingiu um limite de taxa, o que o próximo passo abordará.

Passo 4: Testar respostas de streaming (SSE)

O streaming é onde a maioria das integrações do ChatGPT falha. A resposta é text/event-stream, não JSON, e cada chunk é uma linha data: {...} com um delta parcial. O Apidog entende SSE nativamente.

Duplique chat-completion-basic, renomeie para chat-completion-stream e adicione "stream": true ao corpo:

{
  "model": "{{defaultModel}}",
  "stream": true,
  "messages": [
    { "role": "user", "content": "Stream the first 100 prime numbers, comma-separated." }
  ]
}

Clique em Enviar. O painel de resposta muda para a visualização de streaming e renderiza cada chunk data: à medida que chega. Você vê os frames SSE reais, não apenas o texto montado. Essa é a visualização que você precisa ao depurar um delta malformado ou um terminador [DONE] ausente.

O que observar:

Passo 5: Testar chamada de função e uso de ferramentas

A chamada de função é o lugar mais comum onde as mudanças de prompt quebram silenciosamente o código downstream. O modelo retorna um array tool_calls; sua tarefa é validar que os argumentos são analisados como o JSON Schema que você registrou.

Crie uma requisição chat-completion-tools com este corpo:

{
  "model": "{{defaultModel}}",
  "messages": [
    { "role": "user", "content": "What is the weather in Singapore right now?" }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Get current weather for a city.",
        "parameters": {
          "type": "object",
          "properties": {
            "city": { "type": "string" },
            "unit": { "type": "string", "enum": ["c", "f"] }
          },
          "required": ["city"]
        },
        "strict": true
      }
    }
  ],
  "tool_choice": "auto"
}

Uma resposta correta tem choices[0].message.tool_calls[0].function.name === "get_weather" e function.arguments é uma string JSON que pode ser analisada para { "city": "Singapore", "unit": "c" } (ou similar).

Na aba Testes da requisição, adicione:

pm.test("Tool was called", () => {
  const body = pm.response.json();
  const call = body.choices[0].message.tool_calls?.[0];
  pm.expect(call?.function?.name).to.eql("get_weather");
});

pm.test("Arguments parse as valid JSON", () => {
  const body = pm.response.json();
  const args = JSON.parse(body.choices[0].message.tool_calls[0].function.arguments);
  pm.expect(args.city).to.be.a("string");
});

Execute. Os testes verdes são agora seu contrato. Quando a OpenAI muda a forma, o teste fica vermelho antes que seu tráfego de produção o faça.

Passo 6: Lidar explicitamente com erros e limites de taxa

As integrações de produção do ChatGPT falham de cinco maneiras previsíveis. Crie uma requisição para cada uma e afirme o comportamento esperado:

Cenário Como acionar Esperado
Chave inválida Defina OPENAI_API_KEY para sk-bad em um ambiente Sandbox 401 com error.code = "invalid_api_key"
Limite de taxa Repita a requisição 200x no runner de coleção do Apidog 429 com cabeçalho Retry-After
Limite de tokens excedido Envie um prompt de 200K tokens para um modelo de contexto de 128K 400 com error.code = "context_length_exceeded"
Nome de modelo inválido "model": "gpt-99" 404
Violação de esquema Chamada de ferramenta com strict: true e uma entrada malformada O modelo rejeita a ferramenta, retorna texto simples

Adicione asserções na aba Testes para que uma regressão apareça como um teste vermelho, e não como uma tempestade de retries silenciosos. O cabeçalho Retry-After é o que a maioria do código de produção erra. Ele está em segundos, às vezes um valor fracionário, e você deve lê-lo em vez de codificar um backoff.

Passo 7: Simular o ChatGPT para desenvolvimento frontend paralelo

Sua chave da OpenAI tem um limite mensal. Sua equipe de frontend não. Quando a UI precisa renderizar tokens transmitidos, sugestões de acompanhamento e cartões de chamada de ferramenta antes que o prompt do backend seja finalizado, entregue a eles um mock do Apidog.

Na pasta ChatGPT, clique com o botão direito na requisição chat-completion-basic, escolha Smart Mock e ative. O Apidog retorna uma resposta sintética que corresponde ao esquema da OpenAI: id, object, created, model, choices, usage. A URL do mock se parece com https://mock.apidog.com/m1/<projectId>/chat/completions e aceita o mesmo corpo.

Para mocks de streaming, defina um script na aba Advanced Mock que escreve chunks data: { ... }\n\n em um intervalo de 50ms. O frontend obtém um stream SSE realista sem qualquer tráfego da OpenAI.

Quando o prompt real for implementado, mude a URL base do frontend de volta para https://api.openai.com/v1. Nada mais muda.

Passo 8: Salvar o conjunto como um cenário de teste CI

Os Cenários de Teste do Apidog permitem encadear requisições com asserções e executá-las sem interface gráfica. Crie um cenário que:

  1. Chama chat-completion-basic, afirma status === 200 e usage.total_tokens > 0.
  2. Chama chat-completion-stream, afirma que o SSE terminou com [DONE].
  3. Chama chat-completion-tools, afirma que o esquema da chamada de ferramenta é validado.
  4. Chama cada cenário de erro do Passo 6, afirma o código de status correto.

Exporte o cenário e execute-o na CI via apidog-cli run scenario.json --env OpenAI Prod. Conecte-o ao pipeline de PR para o arquivo que contém seus prompts. Cada mudança de prompt agora é executada contra a API real da OpenAI como uma verificação pré-merge. Custo: alguns centavos por execução da CI. Valor: você para de lançar regressões de prompt.

FAQ

Conclusão

A API do ChatGPT continuará mudando. O streaming falhará de novas maneiras, os esquemas de ferramentas ficarão mais rigorosos e os modelos de raciocínio continuarão descartando parâmetros que você considerava estáveis. A defesa é uma coleção de requisições que você controla, um servidor mock no qual seu frontend pode se apoiar e um cenário de teste que sua CI executa antes de cada PR de prompt.

Baixe o Apidog e importe suas chamadas existentes da OpenAI. Coleções do Postman e comandos curl são convertidos em um clique. Crie as oito requisições acima uma vez, e cada atualização futura do ChatGPT se tornará uma execução de teste controlada em vez de um incidente de produção.

Pratique o design de API no Apidog

Descubra uma forma mais fácil de construir e usar APIs