Objetivo do checklist de revisão antes da entrega
Um checklist de revisão antes da entrega serve para reduzir risco: garantir que a suíte de testes em Postman cobre o que precisa cobrir, executa de forma confiável (sem falsos positivos e falsos negativos) e gera evidências suficientes para auditoria, rastreabilidade e comunicação com o time. A ideia não é “rodar mais uma vez”, e sim validar três pilares: cobertura (o que foi testado), confiabilidade (o quão estável e determinístico é o resultado) e evidências (o que fica registrado para provar o que aconteceu).
Na prática, esse checklist é aplicado quando você vai entregar uma coleção para outro time, abrir um pull request, publicar uma versão no workspace, anexar evidências em um ticket, ou configurar/ajustar uma execução automatizada (Newman/CI). Ele também ajuda a identificar lacunas típicas: testes que passam por acaso, dependência de ordem, dados frágeis, variáveis mal definidas e relatórios que não permitem entender falhas.
Checklist de cobertura: o que precisa estar testado
Mapeamento de endpoints e operações críticas
Antes de avaliar asserts, confirme se a coleção representa o escopo combinado. Uma forma objetiva é ter uma lista de endpoints e métodos esperados (por exemplo, a partir de uma especificação OpenAPI, documentação interna ou backlog) e checar se existe pelo menos uma request correspondente na coleção para cada operação relevante. Para APIs com muitos endpoints, priorize operações críticas: autenticação, criação/alteração de recursos, fluxos de pagamento, permissões e integrações.
- Existe request para cada endpoint/método do escopo?
- Os endpoints críticos têm testes mais completos (status, schema, regras de negócio)?
- Há requests para cenários de leitura e escrita quando aplicável (GET/POST/PUT/PATCH/DELETE)?
Cobertura de cenários: positivo, negativo e bordas
Cobertura não é apenas “bater no endpoint”. Para cada operação importante, verifique se há pelo menos: um cenário positivo (happy path), um cenário negativo (entrada inválida/sem permissão) e um cenário de borda (limites, campos opcionais, paginação vazia, etc.). Em Postman, isso pode ser organizado por pastas, por exemplo: “Users / Positive”, “Users / Negative”, “Users / Edge”.
- Happy path valida status e conteúdo essencial?
- Negativos validam códigos corretos (400/401/403/404/409/422) e mensagens/erros esperados?
- Bordas cobrem limites de tamanho, paginação, ordenação, filtros vazios e valores extremos?
Validação de contrato: schema e tipos
Para reduzir regressões silenciosas, inclua validações de contrato: presença de campos, tipos e estruturas. Isso não substitui regras de negócio, mas evita que uma resposta “pareça ok” e ainda assim quebre consumidores. Em Postman, você pode usar um schema JSON e validar com Ajv (já embutido via pm com bibliotecas comuns em exemplos), ou validar manualmente tipos e campos essenciais.
Continue em nosso aplicativo
Você poderá ouvir o audiobook com a tela desligada, ganhar gratuitamente o certificado deste curso e ainda ter acesso a outros 5.000 cursos online gratuitos.
ou continue lendo abaixo...Baixar o aplicativo
Checklist de contrato:
- Campos obrigatórios do response são verificados?
- Tipos (string/number/boolean/array/object) são verificados nos pontos críticos?
- Campos de data/hora têm formato esperado (ex.: ISO 8601) quando relevante?
pm.test("Contrato: campos essenciais", function () { const json = pm.response.json(); pm.expect(json).to.have.property("id"); pm.expect(json.id).to.be.a("string"); pm.expect(json).to.have.property("createdAt"); pm.expect(json.createdAt).to.match(/\d{4}-\d{2}-\d{2}T/);});Regras de negócio e invariantes
Além do contrato, revise se as regras de negócio mais importantes estão cobertas por asserts claros. Invariantes são condições que devem ser verdadeiras sempre que o endpoint responder com sucesso. Exemplos: saldo não pode ficar negativo após uma operação específica; um usuário recém-criado deve vir com status “ACTIVE”; um item removido não deve aparecer em listagens.
- Asserts verificam regras do domínio, não apenas status code?
- Há validação de consistência entre requests encadeadas (criou, buscou, atualizou, buscou de novo)?
- Há validação de idempotência quando aplicável (PUT repetido não muda estado indevidamente)?
Autenticação, autorização e perfis
Revise se a coleção cobre autenticação e autorização de forma realista. Muitas falhas em produção vêm de permissões. O checklist aqui é garantir que você testou pelo menos: token válido, token ausente/expirado, e perfis diferentes (por exemplo, admin vs usuário comum) em endpoints sensíveis.
- Existe request que valida 401 quando não há credencial?
- Existe request que valida 403 quando o perfil não tem permissão?
- Existe request que valida 200/201 quando o perfil correto é usado?
Paginação, filtros e ordenação
Endpoints de listagem costumam quebrar consumidores quando mudam parâmetros. Garanta cobertura mínima: paginação padrão, paginação com página vazia, filtro que retorna resultados e filtro que retorna zero resultados, e ordenação quando suportada.
- Parâmetros de paginação são testados (limit/offset, page/size)?
- Há assert para tamanho máximo retornado quando aplicável?
- Filtros e ordenação retornam resultados coerentes?
Checklist de confiabilidade: testes determinísticos e reprodutíveis
Independência e controle de estado
Uma suíte confiável minimiza dependência de ordem e de dados externos instáveis. Revise se requests que dependem de dados criados anteriormente deixam isso explícito e armazenam IDs em variáveis. Se a suíte exige ordem, ela deve ser executada sempre na mesma sequência e com dados controlados. Se possível, prefira criar e limpar dados durante a execução (setup/teardown) para evitar “lixo” no ambiente.
- Requests dependentes usam variáveis (ex.:
{{userId}}) e não valores fixos? - Há estratégia de limpeza (delete) ou isolamento de dados (prefixo único)?
- Falhas em uma etapa não deixam o ambiente em estado inconsistente para a próxima execução?
Dados dinâmicos e unicidade
Flakiness comum: tentar criar um recurso com um identificador que já existe. Para evitar, gere dados únicos por execução. Em Postman, você pode usar timestamp, random, ou uma combinação. O checklist é garantir que dados que precisam ser únicos realmente são únicos e que isso não compromete asserts (por exemplo, você valida que o email retornado é o mesmo que enviou, usando variável).
// Pre-request Script: gerar email único e salvar no ambiente/coleçãoconst unique = Date.now();pm.collectionVariables.set("email", `qa_${unique}@example.com`);- Campos com restrição de unicidade (email, documento, username) são gerados dinamicamente?
- Os asserts comparam com a variável gerada, não com valor hardcoded?
Timeouts, retries e tolerância a latência
Confiabilidade também envolve lidar com variação de tempo de resposta sem mascarar problemas reais. Evite asserts rígidos demais para performance se o ambiente não é controlado, mas defina limites quando houver requisito. Se a API é assíncrona (processamento eventual), considere uma estratégia de polling com limite de tentativas para evitar falhas intermitentes.
- Existe limite de tempo de resposta apenas quando é requisito?
- Para fluxos assíncronos, há polling com número máximo de tentativas e espera controlada?
- Falhas por instabilidade do ambiente são identificáveis (ex.: 502/503) e tratadas de forma consciente?
// Exemplo simples de assert de tempo quando há requisito (ajuste conforme SLA)pm.test("Performance: resposta em até 800ms", function () { pm.expect(pm.response.responseTime).to.be.below(800);});Asserts robustos: evitar falsos positivos
Um falso positivo acontece quando o teste passa, mas o comportamento está errado. Revise se os asserts verificam algo significativo: não apenas “status 200”, mas também conteúdo mínimo, IDs, e coerência. Também evite asserts frágeis, como comparar mensagens completas que mudam com frequência, quando o que importa é um código de erro ou um campo específico.
- Para 2xx, há validação de conteúdo essencial (id, status, campos chave)?
- Para erros, valida um identificador estável (ex.:
error.code) em vez de texto longo? - Há verificação de headers relevantes (Content-Type, cache, correlation-id) quando necessário?
pm.test("Erro padronizado", function () { pm.response.to.have.status(422); const json = pm.response.json(); pm.expect(json).to.have.property("error"); pm.expect(json.error).to.have.property("code", "VALIDATION_ERROR");});Asserts robustos: evitar falsos negativos
Falso negativo é quando o teste falha por um detalhe irrelevante. Revise comparações de datas, ordenação e campos não determinísticos (por exemplo, updatedAt, IDs gerados, tokens). Se um campo muda a cada execução, não compare com valor fixo; valide formato, presença e coerência relativa (ex.: updatedAt maior ou igual a createdAt).
- Campos não determinísticos são validados por formato e não por igualdade fixa?
- Listas são validadas por conter itens esperados, não por ordem, quando a ordem não é garantida?
pm.test("Datas coerentes", function () { const json = pm.response.json(); const created = new Date(json.createdAt).getTime(); const updated = new Date(json.updatedAt).getTime(); pm.expect(updated).to.be.at.least(created);});Variáveis e ambientes: consistência de execução
Uma entrega confiável exige que a coleção rode em diferentes ambientes (dev, staging) com o mínimo de ajustes manuais. O checklist aqui é validar se as variáveis necessárias estão definidas, se há valores padrão seguros, e se não existem referências quebradas (por exemplo, {{baseUrl}} ausente). Também verifique se segredos não foram hardcoded em scripts.
- Todas as variáveis usadas existem (baseUrl, tokens, ids, flags)?
- Há separação entre variáveis de ambiente e de coleção quando faz sentido?
- Não há credenciais expostas em texto puro na coleção exportada?
Checklist de evidências: o que registrar para provar o resultado
O que é evidência em testes de API
Evidência é o conjunto de informações que permite a outra pessoa entender: o que foi executado, em qual ambiente, com quais parâmetros, qual foi o resultado e, em caso de falha, por quê. Em testes de API, evidência normalmente inclui: relatório de execução (pass/fail), logs relevantes, request/response (ou partes), IDs/correlation IDs, e versão do artefato testado (commit, tag, build).
- Evidência permite reproduzir a execução?
- Evidência permite diagnosticar falhas sem “rodar de novo”?
- Evidência respeita segurança (sem vazar tokens, senhas, dados sensíveis)?
Padronização mínima de logs no Postman
Para facilitar diagnóstico, use logs de forma intencional. O checklist é garantir que, quando algo falhar, exista informação suficiente para entender o contexto: endpoint, status, payload resumido, e IDs importantes. Evite logar tokens e dados pessoais. Uma abordagem prática é logar apenas campos não sensíveis e usar mascaramento quando necessário.
// Test Script: log controlado em caso de falhafunction safeLog(obj) { console.log(JSON.stringify(obj, null, 2));}pm.test("Status esperado", function () { const expected = 200; if (pm.response.code !== expected) { safeLog({ requestName: pm.info.requestName, url: pm.request.url.toString(), status: pm.response.code, responseSnippet: pm.response.text().slice(0, 300) }); } pm.expect(pm.response.code).to.eql(expected);});- Logs aparecem apenas quando necessário (principalmente em falha)?
- Logs não incluem Authorization, cookies, senhas, tokens?
- Logs incluem identificadores úteis (requestName, URL, status, snippet)?
Captura de IDs e correlation IDs
Muitas APIs retornam um identificador de correlação em headers (por exemplo, X-Correlation-Id) ou no body. Esse dado é valioso para o time de backend rastrear logs. Inclua no checklist a captura e exposição desse ID em logs e, se fizer sentido, salvar em variável para uso em requests seguintes ou para anexar em evidências do ticket.
// Test Script: capturar correlation idconst corr = pm.response.headers.get("X-Correlation-Id");if (corr) { pm.collectionVariables.set("correlationId", corr); console.log("correlationId:", corr);}- Correlation ID é coletado quando disponível?
- Em falhas, o correlation ID é exibido para facilitar investigação?
Relatórios de execução: Collection Runner e Newman
Para evidência de entrega, prefira relatórios exportáveis. No Collection Runner, você consegue registrar resultados, mas em automação o Newman é mais comum por gerar saídas em formatos consumíveis (CLI, JSON, JUnit, HTML via reporters). O checklist é garantir que a execução gera um artefato de relatório e que ele é armazenado junto ao pipeline ou anexado ao ticket.
- Existe comando Newman documentado para rodar a coleção?
- O relatório inclui falhas de testes e tempo de execução?
- Os artefatos (report, logs) ficam acessíveis após a execução?
# Exemplo de execução com Newman (ajuste paths e reporters)newman run "MinhaColecao.postman_collection.json" -e "staging.postman_environment.json" --reporters cli,junit --reporter-junit-export "reports/newman-junit.xml"Evidência de ambiente e versão
Uma evidência completa registra o contexto: qual ambiente foi usado (baseUrl), qual versão da API/build estava no ar, e qual versão da coleção foi executada. Se você não tem acesso direto à versão do backend, registre pelo menos: data/hora, baseUrl, e commit/tag da coleção. Em Postman, você pode imprimir variáveis no início da execução e salvar em logs.
// Pre-request em uma pasta "00 - Contexto"console.log("baseUrl:", pm.environment.get("baseUrl"));console.log("collection version:", pm.collectionVariables.get("collectionVersion"));console.log("run timestamp:", new Date().toISOString());- BaseUrl e timestamp são registrados?
- Versão da coleção (ou commit) é registrada?
- Quando possível, versão do serviço é registrada (header, endpoint /version)?
Evidência sem vazamento de dados
Antes de entregar relatórios e logs, revise se não há dados sensíveis. Isso inclui tokens, chaves de API, dados pessoais e payloads completos com informações confidenciais. O checklist é aplicar minimização: registrar apenas o necessário para diagnosticar. Se precisar anexar request/response, prefira mascarar campos.
- Relatórios não contêm Authorization, API keys, cookies?
- Dados pessoais são removidos ou mascarados?
- Há orientação clara de quais variáveis são segredos e não devem ser exportadas?
Passo a passo prático: aplicar o checklist em uma coleção antes da entrega
Passo 1: congelar escopo e identificar o artefato a entregar
Defina qual coleção e quais pastas fazem parte da entrega. Se houver múltiplas coleções, determine dependências. Registre uma versão (por exemplo, variável collectionVersion) e garanta que todos rodarão o mesmo artefato.
- Qual é o arquivo/ID da coleção a ser entregue?
- Quais pastas estão “in scope”?
- Existe uma versão/identificador da entrega?
Passo 2: rodar uma execução limpa em ambiente alvo
Execute a coleção no ambiente alvo (ex.: staging) com variáveis atualizadas e sem “resíduos” de execuções anteriores. Se a suíte depende de dados pré-existentes, valide que esses dados estão presentes e documentados. Se a suíte cria dados, confirme que consegue rodar do zero.
- Ambiente selecionado é o correto?
- Variáveis obrigatórias estão preenchidas?
- Execução do zero passa sem intervenção manual?
Passo 3: revisar cobertura por pasta e por endpoint
Abra a coleção e faça uma verificação sistemática: para cada pasta, liste mentalmente quais endpoints ela cobre e quais cenários existem. Onde houver apenas happy path, adicione pelo menos um negativo ou borda para endpoints críticos. Se o tempo for curto, priorize riscos: autenticação, permissões e escrita de dados.
- Existe pelo menos 1 negativo para endpoints sensíveis?
- Existe validação mínima de contrato em respostas críticas?
- Existe validação de regras de negócio essenciais?
Passo 4: revisar confiabilidade dos dados e variáveis
Procure por valores hardcoded que tendem a quebrar: IDs fixos, emails fixos, datas fixas, tokens fixos. Substitua por variáveis e geração dinâmica quando necessário. Garanta que IDs capturados em responses são salvos e reutilizados corretamente. Verifique também se variáveis estão no escopo certo (ambiente vs coleção) para facilitar reuso.
- Não há token hardcoded em scripts?
- IDs são capturados do response e armazenados?
- Dados únicos são gerados por execução?
Passo 5: fortalecer asserts para reduzir falsos positivos/negativos
Para cada request crítica, confirme que há asserts além do status code. Em caso de erro, valide um código de erro estável. Para campos variáveis, valide formato e coerência. Se houver listas, valide propriedades dos itens e condições gerais (ex.: “todos os itens têm id”).
pm.test("Lista: itens com id", function () { pm.response.to.have.status(200); const json = pm.response.json(); pm.expect(json).to.be.an("array"); json.forEach(item => { pm.expect(item).to.have.property("id"); });});- Asserts checam conteúdo essencial?
- Erros checam
error.code(ou equivalente)? - Campos não determinísticos não causam falha desnecessária?
Passo 6: preparar evidências e reexecutar para gerar relatório final
Faça uma execução final para gerar evidência. Se for entrega manual, exporte ou registre o resultado do Runner e anexe ao ticket. Se for entrega automatizada, rode com Newman e gere relatório (JUnit/JSON/HTML conforme necessidade). Inclua no log o contexto (baseUrl, timestamp, versão da coleção) e, em caso de falha, correlation ID e snippet do response.
- Relatório foi gerado e salvo?
- Contexto (ambiente, timestamp, versão) está registrado?
- Não há vazamento de segredos no relatório/log?
Passo 7: checklist final de entrega (copiável)
Use esta lista como “gate” antes de entregar:
- Cobertura: endpoints do escopo presentes na coleção
- Cobertura: cenários positivos e negativos para operações críticas
- Cobertura: validação mínima de contrato (campos/tipos) em respostas críticas
- Confiabilidade: dados únicos onde necessário; sem IDs fixos frágeis
- Confiabilidade: variáveis resolvem corretamente no ambiente alvo
- Confiabilidade: asserts evitam falsos positivos e falsos negativos
- Evidências: relatório exportável gerado (Runner/Newman)
- Evidências: contexto registrado (baseUrl, timestamp, versão)
- Evidências: correlation ID/logs úteis em falhas
- Segurança: sem tokens/segredos/dados sensíveis em exportações e logs