GH GambleHub

Teste de API Postman/Newman

1) Porquê Postman/Newman

O Postman é um IDE conveniente para cenários e colecções de consultas. Newman é um motor CLI que lança as mesmas coleções sem GUI em CI/CD. Juntos, eles dão:
  • regravações repetidas e smocks rápidos;
  • parametrizar ambientes/segredos;
  • métricas de qualidade e relatórios de leitura de máquina.

2) Modelo básico

A coleção é uma árvore de consultas e pastas compartilhadas.

Ambiente - Conjunto de 'Diante' de 'se' para 'para'

Pré-request script - Preparação de assinaturas, tokens, coralização de dados.
Testes - afirmações e preservação de variáveis/artefatos.
Data-files - CSV/JSON para o teste data-driven.
Mock/Monitor - Manadas e verificações periódicas.

Estrutura da coleção (recomendação):

<API v1>
├─ _bootstrap (auth, health, seeds)
├─ Public
├─ Authenticated
│  ├─ Accounts
│  ├─ Payments
│  └─ Reports
└─ _teardown (cleanup)

3) Variáveis e segredos

Defina as variáveis com o prefixo explícito «baseUrl», «tenant», «clientId».
Segredos (senhas, clientes _ segredo, chaves HMAC) guardem as variáveis de ambiente CI, não entreguem no repositório.
Use a colecção local à coleção de eventos globals (minimamente possível).

Exemplo de ambiente (fragment JSON):
json
{
"name": "stage-eu",
"values": [
{"key":"baseUrl","value":"https://api. stage. example. com","type":"text","enabled":true},
{"key":"tenant","value":"eu-1","type":"text","enabled":true}
]
}

4) Autenticação: modelos

4. 1 OAuth2/OIDC (Client Credentials)

Pre-request:
js if (!pm.environment. get("access_token")          Date. now() > pm. environment. get("token_exp")) {
pm. sendRequest({
url: pm. environment. get("authUrl"),
method: 'POST',
header: {'Content-Type':'application/x-www-form-urlencoded'},
body: { mode:'urlencoded', urlencoded:[
{key:'grant_type',value:'client_credentials'},
{key:'client_id',value:pm. environment. get('clientId')},
{key:'client_secret',value:pm. environment. get('clientSecret')},
{key:'scope',value:'payments:read payments:write'}
]}
}, (err, res) => {
pm. environment. set("access_token", res. json(). access_token);
pm. environment. set("token_exp", Date. now()+ (res. json(). expires_in-30)1000);
});
}

A solicitação é 'Autorization: Bearer Se Você Quiser Que Você Possa Usar Esta Coisa.

4. 2 HMAC (webhooks/associados)

Pre-request:
js const body = pm. request. body? pm. request. body. raw          '': '';
const ts = Math. floor(Date. now()/1000);
const msg = `${ts}.${body}`;
const sig = CryptoJS. HmacSHA256(msg, pm. environment. get('hmacSecret')). toString();
pm. variables. set('ts', ts);
pm. variables. set('sig', sig);

Os cabeçalhos são 'X-Timestamp: Se não for possível.

5) Testes: aprovação e corelação

Use 'pm. expect(...)` и `pm. test("...", fn)`.
Mantenha os ID para os passos seguintes através de 'pm. collectionVariables. set`.

Exemplos:
js pm. test("HTTP 200", () => pm. response. to. have. status(200));
pm. test ("Scheme is valid," () => {
const schema = pm. collectionVariables. get("schema_wallet");
pm. expect(tv4. validate(pm. response. json(), JSON. parse(schema))). to. be. true;
});
pm. test ("Contains id," () => {
const id = pm. response. json(). id;
pm. expect(id). to. be. a('string');
pm. collectionVariables. set("wallet_id", id);
});

6) Validação de esquema (OpenAPI/JSON Schema)

Guarde o JSON Schema em variáveis de coleção ou arquivo individual.
Para OpenAPI: use as lambas prontas no pré-request/teste (ajv, tv4) através de 'pm. sendRequest 'para o arquivo raw ou inline JSON.

Exemplo de armazenamento de esquema:
js pm. collectionVariables. set("schema_wallet", JSON. stringify({
"type":"object",
"required":["id","currency","balance"],
"properties":{
"id":{"type":"string"},
"currency":{"type":"string","pattern":"^[A-Z]{3}$"},
"balance":{"type":"number","minimum":0}
}
}));

7) Script data-driven

CSV:

email, password, currency u1@example. com, P@ss1, EUR u2@example. com, P@ss2, USD

A solicitação usa 'se', por exemplo, o 'se'.

Iniciar:

newman run collection. json -e stage-eu. json -d users. csv

JSON (matriz de objetos) - conveniente para maletas e estruturas complexas.

8) Maletas negativas e sustentabilidade

Cobre:
  • 401/403 (sem token/scope/papel errado).
  • 400/422 (validação do esquema, campos obrigatórios, limites).
  • 404 (BOLA/recurso alheio).
  • 409 (conflitos, chaves idimpotentes).
  • 429 (limites) - verifique «Retry-After».
  • 5xx - degradação correta e retratos do cliente.
Exemplo de verificação de 'Retry-After':
js pm. test ("There is Retry-After at 429," () => {
if (pm. response. code === 429) pm. expect(pm. response. headers. has('Retry-After')). to. be. true;
});

9) Idempotidade, retrai, paginação

Passe 'Idempotency-Key' e certifique-se de que a repetição dá o mesmo 'id/status'.
Teste de paginação com 'limit/offset '/' cursor', duplicado e omissão.
Simulação de retrações no Script de Teste: chamadas em sequência com a mesma chave.

js pm. test ("Idempotent repetition," () => {
pm. sendRequest(pm. request, (err, res2) => {
pm. expect(res2. code). to. eql(pm. response. code);
pm. expect(res2. json(). id). to. eql(pm. response. json(). id);
});
});

10) Newman в CI/CD

10. 1 Iniciar


newman run collection. json \
-e stage-eu. json \
-d data. csv \
--timeout-request 30000 \
--reporters cli,htmlextra,junit \
--reporter-htmlextra-export./reports/report. html \
--reporter-junit-export./reports/junit. xml

10. 2 GitHub Action (fatia)

yaml
- uses: actions/setup-node@v4 with: { node-version: '20' }
- run: npm i -g newman newman-reporter-htmlextra
- run: newman run collection. json -e stage-eu. json --reporters cli,junit --reporter-junit-export reports/junit. xml
- uses: actions/upload-artifact@v4 with: { name: newman-reports, path: reports }

10. 3 Jenkins/GitLab CI

Exporte JUnit ('-reporter-junit-export') para visualização nativa.
No pipline, divida o jobs: smoke (rápido), regressão (completo), segurança (negativo/limite).

10. 4 Docker


docker run --rm -v $PWD:/etc/newman postman/newman \
run collection. json -e stage-eu. json

11) Moki e monitorização

Mock servers Postman - manadas rápidas para frente e contratos.
Monitors é uma prova periódica de smooks da nuvem (latency, 5xx, SSL).
No repositório, mantenha os arquivos de exemplos de respostas para mocos determinados.

12) Teste de dados e limpeza

Crie/remova entidades (_ bootstrap/_ teardown).
Assinale os objetos de teste com o prefixo 'e2e _' e o TTL.

Para campos de conflito, use sufixos aleatórios:
js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));

13) Desempenho «no joelho»

Postman não é uma ferramenta de carga, mas:
  • mede 'pm. response. responseTime`;
  • exalem 5-10 iterações e fixem p95/liminares;
  • pesada performance em JMeter/k6/Gatling (fora este artigo).

14) Localização e Multiplicidade

Variáveis 'tenant', 'region', 'lang'; alterna nos ambientes.
Os testes devem verificar se os dados não são «fluídos» por tenentes (BOLA-read, cross-tenant proibições).
Coletâneas/pastas individuais para características regionais (limites, moedas).

15) Relatórios e artefatos

Guarde os artefatos CI, repostos HTML, 'junit. & ', logs de respostas incompletas (response bodies).
Ligue o Slack/Teams de notificação de queda de smooks.

16) Qualidade e cobertura

Matriz de revestimentos:
  • CRUD per-recurso (200/201/204 + negativos).
  • Permissão: rolos/escopos/multi-tenante.
  • Paginação/filtros/triagem.
  • Idempotação e retraí.
  • Limites: 413/414/431/429.
  • Formatos e circuitos (JSON Schema/OpenAPI).
  • Integrações (webhooks com HMAC/mTLS) - anti-replay.

17) Antipattern

Um «caminho feliz» sem testes negativos.
Tokens de longa vida na coleção/repositório.
Mistura de dados de teste com dados de prod.
Dependência oculta da ordem dos testes sem uma aparente coralização.
Data-files gigantes sem semeadura.
Não há relatórios JUnit/HTML → não há visibilidade na CI.

18) Folha de cheque pró-prontidão

  • As coleções estão divididas em domínios, há '_ bootstrap/_ teardown'.
  • Ambientes para dave/estágio/prod; segredos do depósito de segredos CI.
  • Pre-request для auth (OAuth2/HMAC); os tokens são armazenados e rotativos.
  • Testes: positivo + negativo, esquemas (JSON Schema), paginação, 429/Retry-After.
  • Idempotidade: Verificação de 'Idempotency-Key', a chamada dupla é equivalente.
  • Data-driven CSV/JSON, sufixos aleatórios para exclusividade.
  • Newman em CI: JUnit/HTML relatórios, artefatos como build outputs.
  • Moki/monitores para rotas-chave; A SLA de smooks.
  • Documentação de variáveis, marcas de formatação e ordem de lançamento.

19) TL; DR

Mantenha a lógica dos testes em coleções Postman, os parâmetros em ambientes e faça o teste em CI através do Newman com relatórios JUNit/HTML. Cobre negativos, esquemas, idempotidade, paginação e limites. Correlacione os passos com variáveis, use entradas data-driven e motes/monitores. Os segredos são apenas da CI, os relatórios são artefactos do bildo.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Telegram
@Gamble_GC
Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.