Sus pruebas de API pasan en cada pull request. La compilación está en verde. Usted lanza. Luego, a las 9 a.m., alguien en otra zona horaria informa que la caja devuelve un 500, y nadie cambió el código de la caja. Lo que cambió fue un entorno de pruebas de pago de terceros, una migración de base de datos que se ejecutó durante la noche o un token que expiró silenciosamente. Sus pruebas por commit nunca lo detectaron porque nada en su repositorio se movió.
Esta es la brecha que cierra una compilación nocturna. Una compilación nocturna es una ejecución de prueba completa y programada que se dispara una vez al día, generalmente en las primeras horas de la mañana, contra sus servicios y entornos reales en lugar de solo en los cambios de código. Atrapa las fallas que viven entre commits: la deriva de datos, integraciones inestables, credenciales caducadas, fugas lentas de rendimiento y rupturas de contratos introducidas por servicios que usted no controla. Para las API específicamente, una ejecución de regresión nocturna es el sistema de alerta temprana más económico que puede configurar.
Esta guía le mostrará cómo construir ese sistema de principio a fin con Apidog. Diseñará un conjunto de regresión, generará una ejecución de línea de comandos con la CLI de Apidog, la conectará a un trabajo CI programado en GitHub Actions, GitLab y Jenkins, y obtendrá un informe esperándolo antes de la reunión de standup. Si alguna vez ha depurado una interrupción que una ejecución nocturna habría señalado horas antes, este es el flujo de trabajo que le devuelve esas horas.
Por qué las pruebas por commit no son suficientes
La integración continua nos enseñó a probar en cada push. Eso es bueno, y debería seguir haciéndolo. Pero las pruebas por commit responden a una pregunta limitada: "¿este cambio rompió algo?". Se ejecutan rápido, se ejecutan a menudo y están diseñadas para mantener a los desarrolladores desbloqueados. Ese alcance es exactamente la razón por la que pasan por alto una clase completa de problemas.
Una compilación nocturna responde a una pregunta más amplia: "¿el sistema sigue sano en este momento, independientemente de si alguien lo tocó?". La diferencia importa porque la producción tiene partes móviles que sus commits nunca ven.
- Las dependencias externas se desvían. Un proveedor de pagos rota una clave de sandbox. Una API meteorológica deprecia un campo. Su código es idéntico, pero el contrato cambió por debajo.
- Los datos cambian sin código. Los trabajos ETL nocturnos, las migraciones programadas y las actualizaciones de contenido pueden poner su base de datos en un estado que sus pruebas rápidas nunca ejercitan.
- Los tokens y certificados caducan. Los tokens de actualización de OAuth, los certificados TLS y las claves de API tienen una vida útil. El día que uno caduca, su compilación en verde es una mentira.
- Las regresiones lentas se ocultan en suites rápidas. Una consulta que se arrastra de 200 ms a 1.2 s no fallará una aserción funcional, pero una ejecución nocturna con un umbral de tiempo de respuesta sí lo hará.
- Las suites completas son demasiado lentas para cada push. La ejecución completa de 400 casos que llega a cada endpoint, cada caso límite y cada entorno es demasiado pesada para bloquear un pull request. La nocturna es donde pertenece.
Así que el patrón es de dos niveles, no "uno u otro". Las pruebas rápidas de humo protegen cada commit. Un conjunto de regresión más profundo se ejecuta según un horario. El nivel nocturno es donde se coloca todo lo que es demasiado lento, demasiado amplio o demasiado dependiente del mundo real para pertenecer al ciclo interno.
Qué se incluye en una suite de regresión de API nocturna
Antes de programar cualquier cosa, decida qué es lo que la ejecución nocturna realmente verifica. Una suite nocturna es más amplia que sus pruebas de humo de puerta de commit y más exhaustiva que un rápido ping de salud. Busque una cobertura que le avergonzaría si fallara silenciosamente.
Una sólida suite de API nocturna cubre:
- Recorridos críticos del usuario, de principio a fin. No endpoints únicos de forma aislada; las cadenas reales. Registrarse, iniciar sesión, crear un recurso, leerlo, actualizarlo, eliminarlo. Cada paso pasando tokens e IDs al siguiente.
- Autenticación y autorización. Inicio de sesión válido, rechazo de token caducado, acceso basado en roles. La autenticación es el asesino silencioso; pruébela todas las noches.
- Conformidad con el contrato. Cada respuesta validada contra su esquema OpenAPI para que se detecte un backend que silenciosamente elimina un campo o cambia un tipo. Si sus documentos y sus respuestas tienden a desviarse, esta es la verificación que lo detecta. (Consulte por qué los documentos y colecciones de Swagger se siguen desviando para conocer la mecánica).
- Casos límite y de error. 400s en entradas incorrectas, 404s en recursos faltantes, 429s bajo límites de tasa, 401s sin credenciales. Las rutas infelices se rompen más a menudo que las felices.
- Integridad de los datos entre solicitudes. Cree algo, luego confirme que una solicitud posterior lo ve. Detecte la consistencia eventual y los errores de caché.
- Umbrales de rendimiento. Afirme que los endpoints clave responden dentro de un presupuesto. Una línea de tendencia nocturna muestra el arrastre antes de que se convierta en un incidente.
Si nunca ha escrito casos estructurados como estos, la plantilla y ejemplo de caso de prueba de API es un buen punto de partida, y las aserciones de API cubren cómo validar el cuerpo de la respuesta, el estado, los encabezados y la temporización con precisión.
Paso 1: Construir la suite de regresión en Apidog
Apidog trata las pruebas como una parte de primera clase del ciclo de vida de la API, no como un complemento. Usted diseña endpoints, luego los encadena en escenarios de prueba que reflejan flujos de trabajo reales. Un escenario es una lista ordenada de pasos donde cada paso es una solicitud de API con aserciones, y donde los datos fluyen de un paso al siguiente.
Aquí está la forma de un escenario de regresión de pago:
- POST /auth/login: envía credenciales, afirma
200, extrae elaccessTokende la respuesta a una variable. - POST /carts: crea un carrito usando el token, afirma
201, extraecartId. - POST /carts/{cartId}/items: añade un producto, afirma
200, afirma que eltotaldel cuerpo de la respuesta es igual al precio esperado. - POST /checkout: envía el carrito, afirma
200, afirma queorder.statuses"confirmed". - GET /orders/{orderId}: lee el pedido, afirma que persistió con los artículos correctos.
En Apidog, construyes esto visualmente. Cada paso recibe aserciones sin escribir código repetitivo: una aserción visual como "el estado de la respuesta es 200" o "JSONPath $.order.status es igual a confirmado". Para la conformidad del esquema, Apidog puede validar automáticamente la respuesta contra la definición OpenAPI guardada del endpoint, por lo que no tienes que escribir manualmente una verificación para cada campo.
Algunas reglas de diseño mantienen una suite nocturna mantenible:
- Utilice entornos, no URLs codificadas. Defina un entorno
stagingcon su URL base, credenciales y variables. El mismo escenario se ejecuta contra staging esta noche y contra un candidato de lanzamiento la próxima semana simplemente cambiando una bandera. - Parametrice con variables. Extraiga el nombre de usuario de prueba, la URL base y cualquier ID de las variables de entorno para que nada secreto o específico del entorno viva en el propio escenario.
- Agrupe escenarios en una suite de prueba. Una suite de prueba agrupa muchos escenarios para que un solo comando los ejecute todos. Esa es la unidad que programará.
Si viene de otra herramienta, esto se mapea claramente a conceptos que ya conoce. La imagen más amplia de encadenar escenarios se encuentra en la guía de orquestación de pruebas de API, y si nunca ha ejecutado una prueba estructurada en Apidog, cómo probar una API con Apidog es el punto de partida paso a paso. Descargue Apidog y construya un escenario antes de seguir leyendo; el resto de esta guía asume que tiene una suite para ejecutar.
Paso 2: Ejecute la suite desde la línea de comandos
Una compilación nocturna se ejecuta sin supervisión, por lo que necesita un ejecutor sin interfaz gráfica. Esa es la CLI de Apidog, un paquete npm que ejecuta sus escenarios de prueba guardados desde cualquier terminal, sin necesidad de GUI. Está diseñada precisamente para esto: ejecuciones automatizadas dentro de una tubería de CI/CD.
Instálelo globalmente. La CLI requiere Node.js v16 o posterior.
npm install -g apidog-cli
Para ejecutar un escenario en línea (uno que vive en su proyecto de Apidog), necesita dos cosas: un token de acceso y el ID del escenario o de la suite. Genere el token en Apidog bajo la configuración de CI/CD, donde hay un botón "Add access token". Trate ese token como una contraseña; debe ir en un secreto, nunca en su repositorio.
El comando para ejecutar un único escenario de prueba se ve así:
apidog run \
--access-token $APIDOG_ACCESS_TOKEN \
-t 123456 \
-e 789 \
-r cli,html \
--out-dir ./apidog-reports
Bandera por bandera, usando las opciones reales de la CLI de Apidog:
--access-token <token>autentica la ejecución. Páselo desde una variable de entorno.-t, --test-scenario <id>selecciona el escenario a ejecutar. Para ejecutar una suite completa, use--test-suite <id>; para ejecutar una carpeta de escenarios, use-f, --test-scenario-folder <id>.-e, --environment <id>elige el entorno (staging, producción-solo-lectura, etc.).-r, --reporters [reporters]establece el formato de salida.cliimprime los resultados en la consola para sus logs de CI;htmlproduce un archivo de informe compartible.--out-dir <dir>es donde se guarda el informe HTML para que CI pueda archivarlo como un artefacto.
Otras banderas ganan su lugar en una ejecución nocturna. -n, --iteration-count <n> repite la ejecución para detectar inestabilidades. -d, --iteration-data <path> alimenta un archivo CSV o JSON para que un escenario se ejecute a través de muchas filas de datos; perfecto para pruebas de límites. --env-var "key=value" y --global-var "key=value" inyectan valores en tiempo de ejecución, que es como se mantienen las credenciales fuera del escenario guardado.
No tienes que memorizar esto. Apidog genera el comando exacto para ti: abre el panel de CI/CD en el cliente, elige tu escenario o suite, y copia la línea apidog run ya preparada directamente en la configuración de tu pipeline. Ejecútala una vez localmente primero para confirmar que está en verde antes de programarla.
Paso 3: Prográmelo como una compilación nocturna
Una compilación nocturna es este comando en un temporizador. Cada plataforma CI soporta trabajos programados a través de la sintaxis cron. El patrón es idéntico en todas ellas: un disparador diario, el token de acceso desde un secreto, la ejecución de la CLI y el informe archivado como un artefacto.
GitHub Actions
GitHub Actions soporta un disparador schedule con cron estándar. Este flujo de trabajo se ejecuta a las 02:00 UTC todos los días y también expone un botón manual a través de workflow_dispatch.
name: Nightly API Regression
on:
schedule:
- cron: '0 2 * * *' # 02:00 UTC daily
workflow_dispatch: # allow manual runs
jobs:
regression:
runs-on: ubuntu-latest
steps:
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Apidog CLI
run: npm install -g apidog-cli
- name: Run nightly regression suite
run: |
apidog run \
--access-token $APIDOG_ACCESS_TOKEN \
--test-suite ${{ vars.APIDOG_SUITE_ID }} \
-e ${{ vars.APIDOG_ENV_ID }} \
-r cli,html \
--out-dir ./apidog-reports
env:
APIDOG_ACCESS_TOKEN: ${{ secrets.APIDOG_ACCESS_TOKEN }}
- name: Upload HTML report
if: always()
uses: actions/upload-artifact@v4
with:
name: apidog-nightly-report
path: ./apidog-reports
El if: always() en el paso de carga es importante: desea que el informe se archive incluso cuando la ejecución falle, porque un fallo es precisamente cuando necesita leerlo. Tenga en cuenta que los trabajos programados de GitHub se ejecutan en UTC y pueden retrasarse durante los picos de carga, así que no programe nada que necesite dispararse en un segundo exacto.

GitLab CI/CD
GitLab programa pipelines a través de la interfaz de usuario (CI/CD > Schedules) en lugar de en el YAML, luego su trabajo se basa en una condición de reglas para que solo se ejecute en el horario, no en cada push.
nightly-regression:
image: node:20
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
before_script:
- npm install -g apidog-cli
script:
- apidog run
--access-token "$APIDOG_ACCESS_TOKEN"
--test-suite "$APIDOG_SUITE_ID"
-e "$APIDOG_ENV_ID"
-r cli,html
--out-dir ./apidog-reports
artifacts:
when: always
paths:
- apidog-reports/
expire_in: 30 days
Configure APIDOG_ACCESS_TOKEN como una variable CI/CD enmascarada y protegida, luego cree una programación de pipeline con una expresión cron como 0 2 * * *. El bloque rules evita que este trabajo se ejecute en commits ordinarios.

Jenkins
En Jenkins, un pipeline con un disparador cron hace el mismo trabajo. Almacene el token como una credencial y extráigalo con withCredentials.
pipeline {
agent any
triggers {
cron('H 2 * * *') // alrededor de las 02:00, H distribuye la carga
}
stages {
stage('Install CLI') {
steps { sh 'npm install -g apidog-cli' }
}
stage('Nightly regression') {
steps {
withCredentials([string(credentialsId: 'apidog-token',
variable: 'APIDOG_ACCESS_TOKEN')]) {
sh '''
apidog run \
--access-token $APIDOG_ACCESS_TOKEN \
--test-suite $APIDOG_SUITE_ID \
-e $APIDOG_ENV_ID \
-r cli,html \
--out-dir ./apidog-reports
'''
}
}
}
}
post {
always {
archiveArtifacts artifacts: 'apidog-reports/**', allowEmptyArchive: true
}
}
}
La H en H 2 * * * es una característica de Jenkins: elige un minuto estable dentro de la hora para que todos sus trabajos nocturnos no se amontonen exactamente a las 02:00.

Ese campo cron es el mismo en las tres plataformas. 0 2 * * * significa minuto 0, hora 2, todos los días. ¿Lo quiere dos veces por noche para detectar problemas antes? 0 2,14 * * *. ¿Solo los días laborables? 0 2 * * 1-5. Elija un momento en que su entorno de staging esté tranquilo y los sandboxes externos estén activos.
Paso 4: Haga que los fallos sean imposibles de ignorar
Una ejecución nocturna que falla en un registro que nadie lee es peor que ninguna ejecución nocturna; genera una falsa confianza. El objetivo es la alerta. Conecte el resultado a donde su equipo ya mira.
El código de salida de la CLI es su gancho. apidog run sale con un código distinto de cero cuando un escenario falla, por lo que CI automáticamente pone el trabajo en rojo. A partir de ahí:
- Deje que CI notifique por sí misma. GitHub Actions, GitLab y Jenkins envían correos electrónicos o mensajes al equipo responsable en caso de una ejecución programada fallida. Actívelo.
- Publique en el chat. Añada un paso que dispare un mensaje de Slack o webhook en caso de fallo con un enlace a la ejecución y al informe HTML archivado. El informe muestra qué escenario, qué paso y qué aserción falló, para que el ingeniero de guardia empiece a depurar en lugar de reproducir.
- Siga la tendencia, no solo el aprobado/suspenso. Apidog puede cargar el informe para que usted mantenga un historial. Una sola noche en rojo es ruido; tres noches en rojo seguidas en el mismo endpoint es una señal.
Una disciplina mantiene las compilaciones nocturnas confiables: trate un fallo como un error real hasta que se demuestre lo contrario. La forma más rápida de matar una suite nocturna es dejar que las pruebas inestables enseñen a todos a ignorar el rojo. Si un escenario falla intermitentemente, arregle la prueba o el entorno; no lo ignore. Ejecutar con -n para repetir un escenario, o estabilizar los datos de los que depende su escenario, generalmente expone la verdadera inestabilidad.
Por qué Apidog se ajusta al patrón nocturno
Puede ensamblar una pipeline de API nocturna a partir de piezas separadas: una herramienta para diseñar, otra para escribir pruebas, una tercera para ejecutarlas sin interfaz gráfica y un validador de esquemas atornillado. Muchos equipos viven así, y funciona hasta que las piezas se desincronizan. La fricción aparece a las 2 a.m. cuando la prueba que ejecuta el runner ya no coincide con la API que realmente ha lanzado.


Apidog colapsa eso en un solo flujo de trabajo. El endpoint que diseña, el escenario que prueba, el esquema contra el que valida y el comando que programa, todo hace referencia a la misma fuente de verdad. Cuando cambia un endpoint, el escenario y la verificación del esquema se mueven con él. No hay un paso de exportación, ninguna colección que se quede obsoleta silenciosamente, ninguna segunda copia del contrato que mantener sincronizada. Si ha sentido el dolor de las colecciones de Postman que no son una verdadera fuente de verdad, ese diseño de fuente única es la diferencia.
La CLI es el mismo motor que la GUI, por lo que un escenario que depura visualmente en su escritorio se ejecuta de forma idéntica en CI a las 2 a.m. Construye y corrige pruebas con total visibilidad, luego las ejecuta sin interfaz gráfica con un solo comando. Esa simetría es lo que hace que una compilación nocturna sea algo en lo que confía en lugar de algo que tiene que cuidar.
Preguntas frecuentes
¿Cuál es la diferencia entre una compilación nocturna y la integración continua?
La integración continua ejecuta pruebas en cada cambio de código para detectar regresiones en los nuevos commits. Una compilación nocturna se ejecuta en un horario fijo, generalmente durante la noche, independientemente de si algo cambió. CI detecta lo que su equipo rompe; la ejecución nocturna detecta lo que el mundo exterior rompe: tokens caducados, dependencias desviadas, cambios de datos y un lento arrastre del rendimiento. Los pipelines maduros ejecutan ambos. Las pruebas rápidas de humo controlan cada commit, y un conjunto de regresión más amplio se ejecuta por la noche.
¿A qué hora debe ejecutarse una compilación nocturna?
Elija una ventana en la que su entorno de prueba esté inactivo y los servicios externos de los que depende sean accesibles. Para muchos equipos, eso es de 1 a.m. a 4 a.m. hora local. Si sus API llaman a sandboxes de terceros, confirme que estén activos a esa hora; algunos proveedores limitan o pausan durante la noche. Evite programar exactamente a la hora en CI compartido, donde miles de trabajos se activan a la vez; compensar unos minutos (o usar la sintaxis H de Jenkins) distribuye la carga.
¿Puedo ejecutar una suite nocturna contra producción?
Ejecute comprobaciones de solo lectura contra producción de forma segura. Para cualquier cosa que escriba datos, dirija la suite nocturna a un entorno de preparación o preproducción dedicado con datos realistas, o utilice operaciones idempotentes y un paso de limpieza. Un patrón común es una ejecución de regresión completa de lectura-escritura contra staging más una pequeña ejecución de humo de solo lectura contra producción para confirmar que el sistema en vivo es accesible y responde correctamente.
¿En qué se diferencia esto del monitoreo?
El monitoreo de tiempo de actividad responde "¿la API está activa?". Un conjunto de regresión nocturna responde "¿la API es correcta?". El monitoreo hace ping a un endpoint y verifica un 200. Una ejecución de regresión ejercita flujos de trabajo completos, valida los cuerpos de las respuestas contra su esquema, verifica los límites de autenticación y afirma las reglas de negocio. Son complementarios; el monitoreo es continuo y superficial, las pruebas nocturnas son periódicas y profundas.
¿Necesito escribir código para programar pruebas de API?
No. Usted construye escenarios visualmente en Apidog sin necesidad de scripts, luego copia el comando apidog run generado desde el panel de CI/CD. El único "código" son las pocas líneas de YAML o la configuración de pipeline que le dicen a su plataforma de CI cuándo ejecutar, y esas son las plantillas anteriores. Si prefiere ver cómo se comparan los ejecutores de línea de comandos en general, Postman CLI vs Newman y ejecutar colecciones en CI sin Newman cubren las alternativas.
Configure su primera ejecución nocturna
Empiece poco a poco. Elija un flujo de trabajo crítico, su flujo de inicio de sesión o su ruta de pago, y constrúyalo como un único escenario de Apidog con aserciones reales. Ejecútelo localmente con la CLI hasta que esté en verde. Inserte el comando generado en un trabajo programado utilizando una de las plantillas anteriores. Conecte el fallo al chat de su equipo. Eso es una compilación nocturna funcional en una tarde.
A partir de ahí, amplíe la suite. Añada escenarios para los viajes más importantes, active la validación de esquemas en todos los ámbitos y establezca presupuestos de rendimiento en sus endpoints críticos. En una semana tendrá una red de regresión que detecta los fallos que sus pruebas por commit nunca fueron diseñadas para ver, y se enterará de ellos a través de un mensaje de chat a las 2 a.m. en lugar de por un cliente a las 9.
