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

  1. Resumen
  2. Inicio rápido
  3. Entrada y gestión
  4. Qué ejecuta el Job
  5. Programación
  6. Terminación automática
  7. Cuándo corre de verdad
  8. Historial de ejecución y estadísticas
  9. Escenarios
  10. Preguntas frecuentes

1. Resumen

CapacidadQué hace
Reproducción de solicitudReproduce un HTTP/HTTPS desde un snapshot (Method / URL / Header / Body)
Reproducción combinadaEjecuta la regla combo completa desde el snapshot (capas, expresiones, inyección)
CronExpresión de 6 campos (con segundos): segundo minuto hora día mes día-semana
PersonalizadoRepite cada N segundos; puedes limitar veces y duración (iOS / escritorio también tienen hora de inicio)
Terminación automáticaSolo 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ónPanel propio Execution History, con Avg / P95 / P99 y tasa de éxito

2. Inicio rápido

  1. Captura primero para tener el HTTP/HTTPS. Si es un flujo, arma y guarda la regla de Combo Replay.
  2. Abre la lista Scheduled Task y pulsa + / Add Scheduled Task.
  3. 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.
  4. Elige Cron o Custom y revisa la vista previa de las próximas ejecuciones.
  5. Opcional: activa Auto Terminate y encaja una respuesta de «éxito / fin» con regex o campo JSON.
  6. 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.
  7. 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ónCómo
Crear+ en la lista, o Add Scheduled Task en el estado vacío
Ver historialTocar la fila
EditarDeslizar a la izquierda → Edit
BorrarDeslizar a la izquierda → Delete (borra también el historial de ese Job)
Activar / desactivarInterruptor 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 JobQué corre
Request ReplayUn HTTP; admite inyección de expresiones
Combo ReplayVarios 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, hora 9
  • Paso / en el campo de segundos: 0/30 es cada 30 segundos

Valor por defecto / marcador:

0 * * * * ?

El segundo 0 de cada minuto.

Ejemplos:

ExpresiónSignificado
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).

CampoUnidadSignificado
IntervalosegundosCada cuánto; mínimo 1
Máximo de ejecucionesvecesPara al llegar a este número
DuraciónminutosPara 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:

TipoSobre quéRegla
Regular expressionTexto del bodyBasta un acierto en cualquier sitio (no hace falta que todo el body coincida)
JSON fieldJSON de la respuestaEl 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 200 pide valor 200; booleanos true / 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
Captura activa, app principal cerrada por gesto, VPN aún arriba
Captura detenidaSe cancelan los timers; para
El sistema recicla el proceso VPN (memoria)Para; al volver a capturar se recargan los Jobs activos
Sin capturaNo 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 detenidastop(); se cancelan las corrutinas; recuento / primera hora en memoria a cero
Forzar cierre de la appMueren VPN y proceso; los Jobs paran
Ahorro de batería mata el procesoPara; 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)
Captura apagada
Salir de la appPara

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

  1. Captura el API de pedido y revisa body / headers (timestamp vivo: ${method.timestamp()} en un nodo combo).
  2. Crea la tarea apuntando a esa solicitud o regla.
  3. Custom: inicio unos segundos antes (tiene que ser futuro), intervalo 1 segundo.
  4. Auto terminate: campo JSON code igual a 200, o regex de éxito / fin.
  5. 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

  1. En Combo Replay: login → API de negocio e inyecta el token.
  2. 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.