O problema: testes de integração instáveis
Testes que dependem de APIs externas — Stripe, Mercado Pago, ViaCEP, serviços internos em staging — são os primeiros a quebrar a build por razões completamente fora do seu controle: rate limit, instabilidade do sandbox, mudança de contrato sem aviso.
A solução é substituir essas dependências por mocks estáveis no CI. O httpdrop oferece três formas de fazer isso: API Tokens para gerenciar endpoints programaticamente, CLI para automação em scripts e GitHub Action para workflows nativos.
Opção 1 — Via API Token (recomendado)
Crie um API Token no dashboard (Settings → API Tokens) e use nas chamadas de configuração do pipeline:
# Criar endpoint via API
curl -X POST https://httpdrop.com/api/endpoints \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "ci-payments-mock"}'
# Criar uma mock rule no endpoint
curl -X POST https://httpdrop.com/api/endpoints/EP_ID/rules \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"method": "POST",
"path": "/payments",
"status": 200,
"body": "{"id":"{{uuid}}","status":"approved"}"
}'
Opção 2 — Via CLI no pipeline
# .github/workflows/integration-tests.yml
name: Integration Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install httpdrop CLI
run: npm install -g @httpdrop/cli
- name: Configure mock endpoints
env:
HTTPDROP_TOKEN: ${{ secrets.HTTPDROP_TOKEN }}
run: |
# Importa spec OpenAPI do Stripe mock
httpdrop import stripe-mock.yaml ${{ secrets.STRIPE_MOCK_EP_ID }}
# Popula tabela de clientes com dados de teste
httpdrop seed ${{ secrets.PAYMENTS_EP_ID }} /customers 20
- name: Run integration tests
env:
STRIPE_BASE_URL: https://httpdrop.com/mock/${{ secrets.STRIPE_MOCK_EP_ID }}
PAYMENTS_BASE_URL: https://httpdrop.com/mock/${{ secrets.PAYMENTS_EP_ID }}
run: npm run test:integration
Opção 3 — GitHub Action oficial
O httpdrop tem uma GitHub Action publicada no Marketplace para rodar Chaos Experiments durante o CI:
- name: Run Chaos Experiment
uses: httpdrop/action@v1
with:
token: ${{ secrets.HTTPDROP_TOKEN }}
endpoint-id: ${{ secrets.API_ENDPOINT_ID }}
chaos-rate: 30
chaos-status: 503
duration: 60 # segundos
Durante os 60 segundos com Chaos ativo, seus testes de resiliência vão verificar se o sistema se recupera corretamente de falhas.
Docker Compose para testes locais
Para rodar httpdrop junto com sua stack de testes localmente:
# docker-compose.test.yml
version: "3.8"
services:
httpdrop:
image: httpdrop/http-drop:latest
ports:
- "3000:3000"
environment:
- NODE_ENV=production
volumes:
- httpdrop_data:/data
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000/health"]
interval: 5s
timeout: 3s
retries: 10
app-tests:
build: .
depends_on:
httpdrop:
condition: service_healthy
environment:
- EXTERNAL_API_URL=http://httpdrop:3000/mock/SEU_EP_ID
command: npm run test:integration
volumes:
httpdrop_data:
Estratégia de IDs de endpoint
ci-payments, ci-notifications) e salve os IDs como secrets no GitHub. Os testes sempre apontam para os mesmos endpoints.pull_request: closed do GitHub Actions.