Por Qué Herramientas Proxy para QA

Las herramientas proxy HTTP se ubican entre el cliente y el servidor, dándote visibilidad y control completos sobre el tráfico de red. Para ingenieros QA, son indispensables para depurar apps móviles (donde no puedes ver requests de red directamente), testear edge cases (modificando respuestas del servidor), y simular condiciones de red (throttling, latencia).

A diferencia de DevTools del navegador que solo muestran tráfico del navegador, las herramientas proxy capturan tráfico de cualquier aplicación — apps móviles, software de escritorio, herramientas CLI y servicios en background.

Casos de Uso Comunes en QA

  • Depurar apps móviles: Ver cada llamada API que la app hace
  • Testear manejo de errores: Modificar respuestas para devolver errores, datos vacíos o JSON malformado
  • Simular redes lentas: Throttle de ancho de banda para testear bajo condiciones 3G/4G
  • Verificar contratos API: Inspeccionar payloads exactos de request/response
  • Testear sin cambios backend: Reemplazar respuestas del servidor con archivos locales

Charles Proxy y Fiddler

Charles Proxy

Charles es el proxy GUI más popular para ingenieros QA:

Configuración:

  1. Instalar Charles Proxy
  2. Configurar navegador/dispositivo para usar Charles como proxy HTTP (localhost:8888)
  3. Para HTTPS: Instalar certificado raíz de Charles y habilitar SSL proxying

Funciones Esenciales:

FunciónPropósitoCaso de Uso QA
SSL ProxyingDescifrar tráfico HTTPSInspeccionar detalles de request/response
BreakpointsPausar request/responseModificar datos antes de llegar al cliente/servidor
Map LocalReemplazar respuesta con archivo localTestear con datos mock
Map RemoteRedirigir a servidor diferenteEnrutar URLs de producción a staging
RewriteModificar headers/body con reglasAgregar/quitar headers, cambiar status codes
ThrottleSimular condiciones de redTestear bajo red lenta

mitmproxy para Automatización

mitmproxy es una herramienta proxy de línea de comandos scriptable con Python:

# Instalar
pip install mitmproxy

# Modo consola interactivo
mitmproxy

# Modo interfaz web
mitmweb

# Modo dump (no interactivo, para scripting)
mitmdump

Script de Addon Python

# modify_response.py — Inyectar condiciones de error para testing
from mitmproxy import http

def response(flow: http.HTTPFlow):
    if "/api/v1/checkout" in flow.request.pretty_url:
        flow.response.status_code = 500
        flow.response.text = '{"error": "Internal Server Error"}'
# Ejecutar con script addon
mitmdump -s modify_response.py
graph LR C[App Cliente] -->|Request| P[Proxy
Charles/Fiddler/mitmproxy] P -->|Inspeccionar y Modificar| S[Servidor] S -->|Response| P P -->|Inspeccionar y Modificar| C

Técnicas Proxy Avanzadas

Configuración Proxy para Apps Móviles

iOS:

  1. Conectarse al mismo WiFi que tu máquina proxy
  2. Ajustes > WiFi > Proxy HTTP > Manual: configurar IP y puerto del proxy
  3. Visitar chls.pro/ssl para instalar certificado raíz de Charles
  4. Ajustes > General > Acerca de > Confianza de Certificados > Habilitar raíz de Charles

Android:

  1. Para Android 7+, las apps ignoran certificados instalados por el usuario por defecto
  2. Agregar network security config para permitir certificados proxy:
<network-security-config>
  <debug-overrides>
    <trust-anchors>
      <certificates src="user" />
    </trust-anchors>
  </debug-overrides>
</network-security-config>

Inspección de WebSocket y gRPC

  • Charles Proxy puede inspeccionar frames WebSocket
  • mitmproxy soporta inspección WebSocket con hooks de eventos dedicados
  • Tráfico gRPC (HTTP/2 + protobuf) requiere archivos de definición proto para inspección legible

Grabación Automatizada de Respuestas para Servidores Mock

# Grabar todas las respuestas
mitmdump -w recorded_session.flow

# Reproducir respuestas grabadas (actúa como servidor mock)
mitmdump --server-replay recorded_session.flow

Esto crea servidores mock instantáneos desde tráfico real — invaluable para testing offline y entornos CI.

Ejercicio Práctico

Configura Charles Proxy y realiza estas tareas:

  1. Configurar SSL proxying para api.example.com
  2. Capturar tráfico desde una app móvil o navegador
  3. Usar breakpoints para modificar una respuesta API (cambiar status code a 500)
  4. Usar Map Local para devolver datos mock desde un archivo JSON local
  5. Hacer throttle de conexión para simular condiciones 3G
Enfoque de Solución
  1. Proxy > SSL Proxying Settings > Agregar api.example.com:443
  2. Configurar proxy del dispositivo a tu-ip:8888, instalar certificado Charles
  3. Proxy > Breakpoints > Agregar api.example.com/endpoint > Editar respuesta
  4. Tools > Map Local > Mapear patrón URL a archivo .json local
  5. Proxy > Throttle Settings > Habilitar, seleccionar preset “3G”

Pro Tips

  • Siempre recuerda deshabilitar la configuración del proxy después del testing — configuraciones proxy residuales causan fallos misteriosos
  • Usa Map Local para testear el frontend contra respuestas API mock sin un backend
  • Graba sesiones proxy para reportes de bugs — capturan datos exactos de request/response
  • Para testing móvil, usa Android network security config para permitir certificados proxy
  • Los scripts de mitmproxy se pueden integrar en CI para tests automatizados

Puntos Clave

  1. Las herramientas proxy proporcionan visibilidad inigualable en la comunicación cliente-servidor
  2. La modificación de request/response permite testear edge cases imposibles de crear a través de la UI
  3. La scriptabilidad de mitmproxy conecta la investigación manual con la automatización CI
  4. El testing de apps móviles casi siempre requiere configuración proxy