CI/CD

Como usar mock em pipeline CI/CD

Integre httpdrop no GitHub Actions, Docker e testes automatizados sem depender de APIs externas

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

🔒
IDs fixos por ambiente — Crie endpoints dedicados para CI (ci-payments, ci-notifications) e salve os IDs como secrets no GitHub. Os testes sempre apontam para os mesmos endpoints.
🔄
Endpoints efêmeros — Crie e delete endpoints programaticamente no início e fim de cada pipeline. Garante isolamento total entre runs paralelos.
🌿
Um endpoint por branch — Endpoints de feature branch são deletados automaticamente quando o PR é fechado. Use o CLI no evento pull_request: closed do GitHub Actions.
💡
Dica de segurança: Use API Tokens com escopo restrito e expiração de 90 dias para pipelines. Nunca commite tokens no código — use GitHub Secrets ou variáveis de ambiente do seu CI.
Pronto para implementar? Consulte a documentação técnica completa com referência de API, exemplos de código e parâmetros detalhados.
Ver documentação →