Simula una respuesta de API
Responde a una de las llamadas de API de tu app con una respuesta predefinida, en el teléfono que tienes en la mano, sin servidor falso y sin recompilar. Una regla de bloqueo Mock para un cuerpo fijo, un límite de ejecuciones cuando debe dispararse exactamente una vez, y un script cuando el cuerpo hay que calcularlo.
Simular en un dispositivo real es donde la mayoría de montajes se vienen abajo: el servidor de prueba vive en un portátil, el teléfono tiene que alcanzarlo y la app tiene que apuntar a él. Busymate DevTools pone el mock en la propia ruta de captura. Una regla de bloqueo vigila cada petición que coincide con un método y un patrón de host y ruta, y responde ella misma a la coincidencia: un error sintético, una conexión cortada o un éxito simulado que parece exactamente una respuesta del origen. El servidor real nunca recibe la llamada.
Las reglas se aplican en dos lugares, así que todos los modos de conexión quedan cubiertos: el servidor proxy para navegadores, Android a través del proxy e iOS en modo PAC, y el túnel VPN en el dispositivo para iOS en modo VPN. Las reglas globales se aplican a todos los dispositivos; las reglas por dispositivo se suman encima. Los cambios se propagan por Realtime, así que una regla que guardas está activa en el teléfono sin reconectar.
Lo que
Un teléfono que ya está capturando y el endpoint que quieres falsear.
Un teléfono emparejado con la captura activa: sigue antes la guía de iPhone o de Android.
El host de la API en la lista de SSL proxy de ese dispositivo. Una regla que coincide por ruta solo puede ver la ruta en un host descifrado.
El método, el host y la ruta de la llamada que quieres responder, y el cuerpo que tu app espera recibir.
Solo para la variante con script: la capacidad de scripts de nivel administrador en tu rol. Las reglas Mock normales no necesitan ningún rol especial.
Hazlo
Los pasos uno a cuatro te dan un mock fijo. El cinco y el seis cubren los dos casos que un cuerpo fijo no puede: dispararse una sola vez y calcular la respuesta.
- 01
Asegúrate de que el host está descifrado
Abre el feed del dashboard y busca una petición real al endpoint. Si su fila muestra un cuerpo descifrado, ya estás listo. Si el host sigue apareciendo cifrado, añádelo a la lista de SSL proxy del dispositivo —desde las acciones de host de la fila o en los ajustes del dispositivo— y vuelve a provocar la llamada. En un host que pasa cifrado, el motor solo puede coincidir por nombre de host; la ruta es invisible, así que un mock preciso por ruta nunca se dispara.
- 02
Abre Blocks y añade una regla
Abre la página Blocks desde el menú de ajustes para una regla global, o ve al dispositivo y luego a Blocks para una regla que solo aplique a este teléfono. Añade una regla y rellena el método —o déjalo vacío para coincidir con cualquiera— y el patrón. Los patrones son los mismos comodines de host y ruta que usan los breakpoints: el host, una barra, la ruta, con un asterisco donde un segmento varía.
- 03
Elige Mock y da forma a la respuesta
Pon la acción en Mock. Donde Block sirve para hacer fallar una llamada y Drop hace que parezca que la red desapareció, Mock sirve para satisfacerla: define el estado —por defecto 200—, las cabeceras que la app vaya a mirar y el cuerpo. Dale el Content-Type que tu app analiza; un cliente JSON que recibe una respuesta de texto fallará antes de leer un byte. Guardada como JSON, la regla queda así.
Una regla Mock que responde a una llamada de feature flags con un cuerpo fijo json{ "enabled": true, "method": "GET", "pattern": "api.example.com/v1/feature-flags", "action": { "type": "mock", "status": 200, "headers": { "Content-Type": "application/json" }, "body": "{\"flags\": {\"newCheckout\": true}}" } } - 04
Guarda, provoca la llamada y comprueba el feed
Guarda la regla y usa la app. La siguiente petición que coincida se responde sin salir nunca de la ruta de captura, y sigue apareciendo en tu feed, marcada como simulada, para que veas exactamente qué se falseó y confirmes que la regla hizo lo que esperabas. La app solo ve una respuesta de servidor normal: las respuestas sintéticas no llevan ninguna cabecera interna o identificativa, así que nada en la respuesta revela la interceptación.
Desactiva la regla con su interruptor cuando termines. Una regla desactivada no cuesta nada y conserva su forma para la próxima vez.
- 05
Dispárala exactamente una vez con un límite de ejecuciones
Algunos mocks deben ocurrir una sola vez. El caso clásico es un 401 sintético que hace creer a la app que su token caducó para que ejecute su flujo de renovación: si respondes así a todas las peticiones, la app renueva, reintenta, recibe otro 401 y gira para siempre. El campo Max runs limita cuántas veces puede dispararse una regla; al llegar al límite se desactiva sola y el editor muestra una insignia de autodesactivada, distinta de una regla que apagaste tú.
El contador se lleva por dispositivo y sobrevive a reconexiones y reinicios de la app, así que un límite de uno se dispara una sola vez en ese teléfono, no una vez por sesión. Una regla global con límite se suprime solo en el dispositivo que lo agotó y sigue disparándose en el resto de teléfonos de la flota. También puedes pedirle a BusyBro en lenguaje natural un mock 401 de una sola vez para un host, y escribe la misma regla.
El 401 de un solo disparo: idéntico a un mock normal más un límite de uno json{ "enabled": true, "method": "GET", "pattern": "api.example.com/v1/me", "action": { "type": "mock", "status": 401, "headers": { "Content-Type": "application/json" }, "body": "{\"error\": \"token_expired\"}" }, "maxRuns": 1 } - 06
Calcula el cuerpo con un script
Un cuerpo Mock es una cadena congelada. Cuando la respuesta tiene que depender de la petición —un id devuelto, una marca de tiempo, un campo parcheado en la respuesta real— cambia la acción de la regla a Script, o crea un script independiente en Settings y luego Scripts. Tienes un editor de código con autocompletado para los objetos de petición, respuesta y ayuda, y un panel Test que ejecuta tu script contra una entrada capturada real y muestra un diff de antes y después sin tocar el tráfico en vivo. La prueba en seco usa el mismo sandbox que el proxy en vivo, así que pasar la prueba significa que funciona en producción.
Un script que lanza una excepción o agota el tiempo falla en abierto: los bytes originales se reenvían y la entrada queda marcada en el inspector, de modo que un script roto nunca puede bloquear una conexión ni delatarse ante la app. Los scripts son de nivel administrador porque ejecutan código arbitrario en la ruta de captura.
Un hook de petición que corta el circuito con un cuerpo JSON calculado javascriptfunction onRequest(req) { if (req.path.startsWith("/v1/feature-flags")) { // computed per request — the upstream is never contacted return Response.json({ flags: { newCheckout: true, seed: Date.now() } }, { status: 200 }); } // no return → forward unchanged }
Qué puede
Una regla que parece muerta casi siempre está intentando coincidir con algo que no puede ver.
La regla nunca se dispara
Comprueba que el host está descifrado para ese dispositivo —un patrón de ruta lo necesita—, luego revisa la ortografía del patrón y que el método coincida o esté vacío. La fila del feed de la petición real muestra el host y la ruta exactos para copiar.
La app se quedó atascada en un bucle de renovación
Tu 401 sintético se dispara en cada petición. Pon Max runs a uno para que la regla se desactive tras el primer acierto y la petición reintentada llegue al servidor real.
La app rechaza la respuesta simulada
Normalmente falta la cabecera Content-Type o la forma del cuerpo no coincide con lo que analiza el cliente. Copia las cabeceras y el cuerpo de una respuesta real capturada desde el inspector como punto de partida.
La regla muestra una insignia de autodesactivada
Agotó su límite de ejecuciones en este dispositivo. Borra Max runs o vuelve a activar la regla para armarla de nuevo.
El script se ejecutó pero la respuesta fue la real
El script lanzó una excepción o agotó el tiempo y falló en abierto. Abre la entrada en el inspector —la insignia de error lleva el mensaje y la línea—, corrígelo en el editor y vuelve a ejecutar el panel Test contra la misma entrada antes de activarlo de nuevo.
Preguntas
¿Puede la app saber que fue simulada?
No inspeccionando la respuesta. Un 200 simulado o un 403 bloqueado no lleva ninguna cabecera identificativa y parece una respuesta normal del origen. La visibilidad va en un solo sentido: la entrada marcada aparece solo en tu feed.
¿Funciona en iOS en modo VPN o solo a través del proxy?
En ambos. El mismo motor de reglas se ejecuta dentro del túnel VPN de iOS y en el servidor proxy, así que iOS en cualquiera de los dos modos, Android a través del proxy y los navegadores respetan la regla.
¿Necesito volver a desplegar algo cuando cambio una regla?
No. Las reglas viven en los mismos ajustes que fluyen a los dispositivos por Realtime, así que un guardado se aplica de inmediato a las conexiones nuevas. Una conexión keep-alive que ya estaba abierta conserva la configuración con la que empezó hasta que se reconecta.
Falsea la respuesta,
Una regla en el dashboard, y la app que tienes en la mano recibe la respuesta que quieres probar: sin servidor de prueba, sin recompilar.