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:
- Instalar Charles Proxy
- Configurar navegador/dispositivo para usar Charles como proxy HTTP (
localhost:8888) - Para HTTPS: Instalar certificado raíz de Charles y habilitar SSL proxying
Funciones Esenciales:
| Función | Propósito | Caso de Uso QA |
|---|---|---|
| SSL Proxying | Descifrar tráfico HTTPS | Inspeccionar detalles de request/response |
| Breakpoints | Pausar request/response | Modificar datos antes de llegar al cliente/servidor |
| Map Local | Reemplazar respuesta con archivo local | Testear con datos mock |
| Map Remote | Redirigir a servidor diferente | Enrutar URLs de producción a staging |
| Rewrite | Modificar headers/body con reglas | Agregar/quitar headers, cambiar status codes |
| Throttle | Simular condiciones de red | Testear 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
Técnicas Proxy Avanzadas
Configuración Proxy para Apps Móviles
iOS:
- Conectarse al mismo WiFi que tu máquina proxy
- Ajustes > WiFi > Proxy HTTP > Manual: configurar IP y puerto del proxy
- Visitar
chls.pro/sslpara instalar certificado raíz de Charles - Ajustes > General > Acerca de > Confianza de Certificados > Habilitar raíz de Charles
Android:
- Para Android 7+, las apps ignoran certificados instalados por el usuario por defecto
- 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:
- Configurar SSL proxying para
api.example.com - Capturar tráfico desde una app móvil o navegador
- Usar breakpoints para modificar una respuesta API (cambiar status code a 500)
- Usar Map Local para devolver datos mock desde un archivo JSON local
- Hacer throttle de conexión para simular condiciones 3G
Enfoque de Solución
- Proxy > SSL Proxying Settings > Agregar
api.example.com:443 - Configurar proxy del dispositivo a
tu-ip:8888, instalar certificado Charles - Proxy > Breakpoints > Agregar
api.example.com/endpoint> Editar respuesta - Tools > Map Local > Mapear patrón URL a archivo
.jsonlocal - 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
- Las herramientas proxy proporcionan visibilidad inigualable en la comunicación cliente-servidor
- La modificación de request/response permite testear edge cases imposibles de crear a través de la UI
- La scriptabilidad de mitmproxy conecta la investigación manual con la automatización CI
- El testing de apps móviles casi siempre requiere configuración proxy