Tareas programadas
Versión del documento: 20260905
Versiones de la app cubiertas por este documento:
- iOS: >= 3.16
- Android: >= 1.8.0
- macOS / Windows (escritorio): >= 1.0.21
Una tarea programada dispara una reproducción de solicitud o una regla completa de reproducción combinada con Cron o un intervalo fijo. Sirve cuando un toque humano llega tarde: pruebas de flash sale, el segundo de apertura, o un health check periódico.
Caso típico: la ventana de un flash sale dura segundos y a mano casi siempre se pierde. Saca el pedido del historial de captura (o ármalo en Combo Replay), crea la tarea, dispara cada segundo justo antes de abrir y detén con auto-terminar cuando el cuerpo diga éxito o «actividad terminada».
Orquestación, inyección de dependencias y expresiones de Combo Replay: guía de reproducción combinada.
Índice
- Resumen
- Inicio rápido
- Entrada y gestión
- Qué ejecuta el Job
- Programación
- Terminación automática
- Cuándo corre de verdad
- Historial de ejecución y estadísticas
- Escenarios
- Preguntas frecuentes
1. Resumen
| Capacidad | Qué hace |
|---|---|
| Reproducción de solicitud | Reproduce un HTTP/HTTPS desde un snapshot (Method / URL / Header / Body) |
| Reproducción combinada | Ejecuta la regla combo completa desde el snapshot (capas, expresiones, inyección) |
| Cron | Expresión de 6 campos (con segundos): segundo minuto hora día mes día-semana |
| Personalizado | Repite cada N segundos; puedes limitar veces y duración (iOS / escritorio también tienen hora de inicio) |
| Terminación automática | Solo dos tipos: regex sobre el body, o igualdad exacta de string en un campo JSON. Un acierto desactiva el Job; no lo pausa |
| Historial de ejecución | Panel propio Execution History, con Avg / P95 / P99 y tasa de éxito |
2. Inicio rápido
- Captura primero para tener el HTTP/HTTPS. Si es un flujo, arma y guarda la regla de Combo Replay.
- Abre la lista Scheduled Task y pulsa + / Add Scheduled Task.
- Completa Job Name y elige el objetivo:
- Request Replay: una solicitud del historial; aún puedes editar query, headers y body.
- Combo Replay: una regla existente; aún puedes editar los parámetros de cada nodo.
- Elige Cron o Custom y revisa la vista previa de las próximas ejecuciones.
- Opcional: activa Auto Terminate y encaja una respuesta de «éxito / fin» con regex o campo JSON.
- Deja el Job Enabled y luego:
- iOS / Android: inicia la captura (VPN). Sin captura no corre. Con el VPN activo esas solicitudes entran al historial y aplican rewrite / scripts.
- Escritorio: deja abierta la ventana de ApiCatcher; no hace falta VPN. Inicia captura solo si quieres que rewrite / scripts actúen sobre lo que envía el Job.
- Entra al Job y mira Execution History.
3. Entrada y gestión
3.1 Cómo abrir Scheduled Task
- Inicio de captura, + arriba a la derecha → Scheduled Task
- En Request Replay o en la página de ejecución de Combo Replay, el reloj de arriba a la derecha crea el Job con la solicitud o regla actual
3.2 Crear / editar / borrar / activar
| Acción | Cómo |
|---|---|
| Crear | + en la lista, o Add Scheduled Task en el estado vacío |
| Ver historial | Tocar la fila |
| Editar | Deslizar a la izquierda → Edit |
| Borrar | Deslizar a la izquierda → Delete (borra también el historial de ese Job) |
| Activar / desactivar | Interruptor Enabled en la página de edición |
Los Jobs nuevos salen activados.
Al editar uno existente no puedes cambiar el tipo de objetivo ni elegir otra solicitud/regla. Sí puedes cambiar nombre, el interruptor, parámetros del snapshot / nodos, la programación y auto-terminar.
4. Qué ejecuta el Job
Solo hay dos objetivos:
| Objetivo del Job | Qué corre |
|---|---|
| Request Replay | Un HTTP; admite inyección de expresiones |
| Combo Replay | Varios HTTP, en el orden de la regla; admite inyección de dependencias y de expresiones |
Si actualizas la regla de Combo Replay y quieres que el Job lo note, hay que crear un Job nuevo.
5. Programación
Dos tipos: Cron / Custom.
La página de ajustes muestra las próximas ejecuciones (hasta 5).
5.1 Cron
La expresión tiene 6 campos, en este orden:
second minute hour day month weekday
Un 7.º campo (año), si existe, se ignora. Con menos de 6 campos no se calcula la siguiente hora y no se programa.
No es el crontab de 5 campos de Linux. */5 * * * * (cada 5 minutos) no vale aquí.
Qué puedes escribir:
*: cualquier valor en ese campo?: en día o día de la semana, «sin fijar»- Un número: p. ej. segundo
0, hora9 - Paso
/en el campo de segundos:0/30es cada 30 segundos
Valor por defecto / marcador:
0 * * * * ?
El segundo 0 de cada minuto.
Ejemplos:
| Expresión | Significado |
|---|---|
0 * * * * ? | Segundo 0 de cada minuto |
0 0 * * * ? | Minuto 0, segundo 0 de cada hora |
0 0 9 * * ? | Todos los días a las 09:00:00 |
0/30 * * * * ? | Cada 30 segundos |
Para «cada N minutos», usa Custom y pon el intervalo en N × 60 segundos.
Junto al campo, la IA puede generar Cron a partir de lenguaje natural. Después mira la vista previa.
Expresión vacía o sin próxima hora: ese Job no se agenda esta vez. No se desactiva solo por eso.
5.2 Custom
No hay campo de hora de fin. Repite a intervalo fijo y para cuando se cumple el recuento o la duración (se comprueba antes de cada ejecución).
| Campo | Unidad | Significado |
|---|---|---|
| Intervalo | segundos | Cada cuánto; mínimo 1 |
| Máximo de ejecuciones | veces | Para al llegar a este número |
| Duración | minutos | Para tantos minutos después de la primera ejecución |
El recuento vive en memoria del motor. Si el proceso reinicia, vuelve a cero. Un Job ya desactivado no se reactiva solo. Volver a poner Enabled empieza el recuento en 0.
Al llegar al recuento o a la duración, el Job se guarda como disabled.
6. Terminación automática
Nombre en la UI: Auto Terminate. Si acierta, para aunque Cron tenga más ticks o Custom tenga ejecuciones pendientes.
Solo dos tipos. No existe parar por código HTTP:
| Tipo | Sobre qué | Regla |
|---|---|---|
| Regular expression | Texto del body | Basta un acierto en cualquier sitio (no hace falta que todo el body coincida) |
| JSON field | JSON de la respuesta | El valor en la ruta debe ser el mismo string que Match value |
Notas:
- Varias condiciones son OR.
- Combo Replay puede elegir un nodo observador; solo se mira ese resultado.
- La comparación JSON es igualdad de string: el número
200pide valor200; booleanostrue/false.
Un acierto desactiva el Job. El Job y el historial siguen ahí; no se borra nada.
7. Cuándo corre de verdad
Por límites del sistema, cada plataforma corre el motor en un proceso distinto.
iOS
Corre en el proceso VPN. Hay que iniciar captura.
| Situación | ¿Sigue? |
|---|---|
| Captura activa, app principal en segundo plano | Sí |
| Captura activa, app principal cerrada por gesto, VPN aún arriba | Sí |
| Captura detenida | Se cancelan los timers; para |
| El sistema recicla el proceso VPN (memoria) | Para; al volver a capturar se recargan los Jobs activos |
| Sin captura | No corre. Guardar solo escribe en la base; se programa en el próximo inicio de captura |
Timeout 15 segundos. Con VPN, el replay pasa por MITM local (127.0.0.1:8888): aplican rewrite y scripts, y el mismo tráfico puede aparecer en el historial de captura.
Android
Corre en el servicio VPN. Hay que iniciar captura.
| Situación | ¿Sigue? |
|---|---|
| Captura activa, app solo al fondo (notificación en primer plano visible) | Suele sí |
| Captura detenida | stop(); se cancelan las corrutinas; recuento / primera hora en memoria a cero |
| Forzar cierre de la app | Mueren VPN y proceso; los Jobs paran |
| Ahorro de batería mata el proceso | Para; si el servicio en primer plano vuelve y llama start(), se reprograman los que sigan Enabled |
Timeout de conexión y lectura: 30 segundos cada uno. También MITM local, así que puede verse en el historial de captura.
Escritorio
Corre en el proceso de la app. Mientras viva el proceso, corre; al salir, para.
| Situación | ¿Sigue? |
|---|---|
| Ventana abierta (se puede minimizar) | Sí |
| Captura apagada | Sí |
| Salir de la app | Para |
Timeout de una solicitud: 30 segundos; cada nodo de Combo Replay: 5 segundos. Las peticiones usan el proxy del sistema. Si la captura local está on, aplican rewrite / scripts y el historial puede mostrarlas.
Ejecución de Combo Replay (igual en las tres)
- Capas según dependencias; la misma capa en paralelo; la siguiente espera.
- Si un nodo no es 2xx (o falla el envío), las capas siguientes se omiten (sin petición).
- Expresiones, inyección y variables globales del snapshot sí se ejecutan.
8. Historial de ejecución y estadísticas
Toca el Job para abrir Execution History (no el editor).
Las estadísticas de arriba agregan todas las ejecuciones de este Job (un disparo del temporizador = una fila, no un HTTP):
- Avg / P95 / P99: duración de cada ejecución (fin − inicio de ese registro), luego media y percentiles 95 / 99, en milisegundos
- Success Rate / Success / Failure: una ejecución cuenta como éxito solo si todas sus solicitudes lo fueron; un nodo combo fallido tumba esa ejecución. Eso se cuenta sobre todos los registros
Toca una fila para ver la solicitud enviada. En Combo Replay primero la lista de nodos, luego el detalle.
Arriba a la derecha se vacía el historial de este Job. Borrar el Job borra el historial con él.
Los datos viven en su propia tabla, no en History / Request History. Como en la sección anterior, con captura encendida ese tráfico suele colarse también en el historial principal.
Esas filas no llevan marca de tarea programada; parecen capturas normales.
9. Escenarios
Escenario 1: machacar el API de pedido antes del flash sale
- Captura el API de pedido y revisa body / headers (timestamp vivo:
${method.timestamp()}en un nodo combo). - Crea la tarea apuntando a esa solicitud o regla.
- Custom: inicio unos segundos antes (tiene que ser futuro), intervalo 1 segundo.
- Auto terminate: campo JSON
codeigual a200, o regex de éxito / fin. - iOS / Android: arranca la captura con antelación. Escritorio: deja la ventana abierta.
Escenario 2: health check cada minuto
Cron sirve en las tres plataformas:
0 * * * * ?
Sin auto terminate. Sigue cada minuto hasta que lo desactives, o pares la captura (móvil) / salgas de la app (escritorio).
Escenario 3: regresión programada de login + API de negocio
- En Combo Replay: login → API de negocio e inyecta el token.
- Crea la tarea a partir de esa regla.
10. Preguntas frecuentes
Q: Guardé el Job y no corre.
A: En iOS / Android hay que iniciar captura. En escritorio, dejar la app abierta. Comprueba Enabled, Cron de 6 campos y que la vista previa calcule la próxima hora.
Q: Un Job Custom pasa a disabled al guardar.
A: Una hora de inicio en el pasado desactiva el Job sin ejecutarlo ni una vez. Pon una hora futura, actívalo y vuelve a guardar.
Q: Cambié la regla de Combo Replay y el Job no se enteró.
A: Es lo esperado. El Job guarda el snapshot de cuando se creó. Bórralo y créalo de nuevo.
Q: ¿Por qué también aparecen en el historial principal?
A: En móvil, con VPN, el replay programado pasa por MITM local y se guarda como cualquier captura. El informe propio está en Execution History. El historial principal no etiqueta tareas programadas.
Q: Puse auto terminate en el estado 200 y no dispara.
A: No hay «parar por código HTTP». Usa un campo JSON (p. ej. code == 200) o regex sobre el body.
Q: ¿Por qué algunos nodos combo no se enviaron?
A: Igual que en una ejecución manual: tras un no-2xx en una capa anterior, las siguientes se omiten. Un observador omitido no tiene body, así que auto terminate no acierta.
Q: ¿Siguen los Jobs si desinstalo o borro datos?
A: Jobs e historial son locales. Se pierden.
Q: ¿Tengo que dejar las reglas de rewrite encendidas?
A: En móvil esas solicitudes pasan por MITM. Si un mock / drop / modify encaja con la URL, el Job envía ya el resultado alterado. Si la respuesta «no cuadra», mira primero rewrite y scripts.