EmuLabZip logo EmuLabZip

Mocks y breakpoints

Actualizado el · Editar esta página en GitHub

Las reglas te permiten cambiar lo que recibe una app sin tocar el servidor: responder tú a una petición, hacerla lenta, hacerla fallar o detenerla y editarla a mano. Viven en el proxy, así que funcionan en todos los dispositivos a los que está conectada la herramienta Network.

Reglas#

Una regla tiene un matcher (qué peticiones) y una acción (qué hacer). Gana la primera regla activada que coincide.

Campo del matcherCoincide con
methodsCualquiera de estos métodos. Vacío significa cualquiera.
hostUn patrón: api.example.com, *.example.com. * es cualquier cadena de caracteres, ? cualquier carácter.
pathUn patrón para la ruta sin la query: /v1/users/*.
urlContainsTexto que tiene que contener la dirección completa (host, ruta y query).

Todos los campos definidos tienen que coincidir.

AcciónQué ocurre
Answer (mock)El proxy responde con tu estado, headers y cuerpo, tras un retraso opcional. Nunca se consulta al servidor.
DelayLa petición espera y luego continúa. Úsalo para probar una red lenta.
BlockLa app recibe un error de gateway, como si la red hubiera fallado. Nada llega al servidor.
Hold (breakpoint)La petición, la respuesta, o ambas, se detienen y te esperan.

Cuatro acciones más envían una petición a un archivo o a otro servidor, comprueban la respuesta contra un archivo OpenAPI o ejecutan un script de WebAssembly, y una regla puede dejar que se apliquen también las que están debajo: consulta Reglas de red y Scripts de reglas.

Los flujos que tocó una regla muestran una insignia MOCK o RULE en la lista y en los detalles.

Una regla es para una cosa que tú elegiste. Para responder todo desde una grabación, consulta Repetir una grabación. Una regla sigue ganando a la grabación.

En la app#

Abre Network y luego Rules. Elige un preset (una respuesta JSON, un 500, una red lenta, un bloqueo, un breakpoint) o parte de una petición: selecciónala y pulsa Mock para obtener una regla que responde como lo hizo el servidor, lista para editar. Las reglas se aplican a la siguiente petición y se guardan en net-rules.json en la carpeta de datos de EmuLabZip.

Breakpoints#

Una petición o respuesta retenida aparece en un cajón en la parte inferior de la vista Network. Puedes editar los headers (un name: value por línea), el cuerpo (cuando es texto) y, en una respuesta, el estado. Continue la envía con tus ediciones, Abort la hace fallar, Continue all deja pasar todo. Una respuesta se muestra decodificada y sigue sin comprimir. Si nadie responde, un mensaje retenido continúa sin cambios tras 2 minutos, así que una app nunca se queda colgada para siempre.

En la línea de comandos#

emulabzip net --rules rules.json
[
  {
    "name": "stub the profile",
    "matcher": { "host": "api.example.com", "path": "/v1/profile" },
    "action": { "type": "mock", "status": 200,
                "headers": [["content-type", "application/json"]],
                "body": "{\"name\": \"Ada\"}" }
  },
  { "name": "slow uploads", "matcher": { "methods": ["POST"] }, "action": { "type": "delay", "ms": 3000 } },
  { "name": "no analytics", "matcher": { "host": "*.analytics.example.com" }, "action": { "type": "block" } }
]

Un mock puede llevar un cuerpo binario: define "base64": true y da el cuerpo en base64. Los breakpoints necesitan que alguien los continúe, así que la línea de comandos omite esas reglas y lo indica.

Límites#

  • El cuerpo de un mock puede ser de hasta 5 MB, y un retraso de hasta 60 segundos.
  • Las reglas ven la petición descifrada, así que HTTPS necesita el certificado instalado. Los hosts que pasan sin cambios (apps con certificate pinning) no se pueden modificar.
  • Los upgrades de WebSocket se comparan como cualquier petición, pero solo se puede simular o bloquear el handshake.