🛡️ 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égia | Quando usar? | Ferramenta Recomendada |
|---|---|---|
| Sandbox | Parceiro fornece ambiente de teste oficial. | URL de Staging do fornecedor. |
| Virtualização | Serviço é instável ou pago por chamada. | WireMock (Mock Server). |
| Contrato | Validar 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 eraStringvirouInt. 🏁
Dica de Ouro ⚡
Centralize a configuração da API em uma classe base (ex:
ApiTestBase). Defina ali obaseURI,porte filtros de log. Isso torna seus testes de API extremamente profissionais e fáceis de gerenciar. 🚀 🏁