🛡️ 6.5 Segurança, Headers e Boas Práticas de API

Testar uma API não é apenas olhar o corpo da resposta. Precisamos garantir que a segurança (Autenticação) e o transporte (Headers/Cookies) estão corretos. Além disso, a manutenibilidade dos testes de API depende de como gerenciamos as dependências externas.

🏁 Headers e Cookies: O “Envelope” da Mensagem

Imagine uma API que exige um Token JWT e retorna um Cookie de sessão.

📄 Exemplo: Automação com Metadados

@Test
void deveValidarHeadersESeguranca() {
    given()
        .header("Authorization", "Bearer token-secreto-123")
        .cookie("session_id", "xyz")
    .when()
        .get("/admin/stats")
    .then()
        .statusCode(200)
        .header("Cache-Control", containsString("max-age"))
        .cookie("last_visit", notNullValue());
}

🏗️ O Problema das APIs de Terceiros

O que fazer se o serviço de frete dos Correios estiver fora do ar no dia do seu deploy? Seus testes falharão injustamente.

📊 Estratégias de Sobrevivência

EstratégiaQuando usar?Ferramenta Recomendada
SandboxParceiro fornece ambiente de teste oficial.URL de Staging do fornecedor.
VirtualizaçãoServiço é instável ou pago por chamada.WireMock (Mock Server).
ContratoValidar se o JSON continua igual.JSON Schema Validation.

📊 Pirâmide de Teste de API

graph TD
    A[Unit Tests] --> B[Integration Tests]
    B --> C["Contract Tests (JSON Schema) ✨"]
    C --> D["E2E API Tests (REST-assured)"]
    style C fill:#f1f8e9,stroke:#558b2f

JSON Schema Validation 🛡️

Use o REST-assured para validar se o parceiro mudou a estrutura do JSON. then().body(matchesJsonSchemaInClasspath("schema.json")) Isso evita que seu sistema quebre porque um campo que era String virou Int. 🏁


Dica de Ouro ⚡

Centralize a configuração da API em uma classe base (ex: ApiTestBase). Defina ali o baseURI, port e filtros de log. Isso torna seus testes de API extremamente profissionais e fáceis de gerenciar. 🚀 🏁


⬅️ Capítulo Anterior | Próximo Capítulo ➡️