Documentación: Ejecuciones de prueba

Ver como Markdown

Ejecuciones de prueba

Una ejecución de prueba convierte un script en evidencias. El agente envuelve un flujo en astral.test, lo divide en pasos, indica qué debería cumplirse, y Astral registra lo que ocurrió.

Las ejecuciones de prueba usan la herramienta run_script, que ejecuta JavaScript escrito por el agente en un sandbox que llama a las demás herramientas. El grupo script está desactivado por defecto; el grupo tests está activado por defecto, pero solo surte efecto mientras script esté activado. Consulta el grupo script.

Un ejemplo

return await astral.test('Login demo', async () => {
  await astral.step('Open the store', () => astral.navigate({url: 'http://localhost:3000/'}));
  await astral.step('Sign in', async () => {
    await astral.type({locator: {role: 'textbox', name: 'Username'}, text: 'demo'});
    await astral.type({locator: {role: 'textbox', name: 'Password'}, text: 'demo', submit: true});
    await astral.expect.visible({role: 'button', name: 'Sign out'});
    await astral.expect.noErrors();
  });
  await astral.step('Pay', async () => {
    await astral.click({locator: {role: 'button', name: 'Pay'}});
    await astral.expect.request({urlContains: '/api/', method: 'POST', status: '2xx'});
  });
}, {continueOnFailure: true, record: 'actions'});

Pasa a run_script un timeoutMs de 60000 a 120000 para una prueba: las evidencias llevan tiempo.

astral.test y astral.step

Opciones de astral.test(name, fn, options): tabId, continueOnFailure (por defecto false) y record. No lanza una excepción cuando falla un paso: comprueba el status del resultado, que además incluye los totales, un summary en Markdown y las rutas del informe.

astral.step(name, fn) agrupa acciones. Al terminar, y siempre que falla, Astral guarda una captura, la URL y el título, las peticiones hechas durante el paso (las que fallan, con cabeceras y cuerpos censurados), errores y avisos de la consola, y los nuevos grupos de errores. Un paso falla cuando su función lanza una excepción o falla una expectativa dentro de él. Sin continueOnFailure, la prueba se detiene en el primer paso fallido.

run_script también acepta test: {name, continueOnFailure, ...} para tratar todo el script como una sola prueba.

Expectativas

LlamadaSe cumple cuando
expect.visible(locator)El elemento es visible; espera hasta timeoutMs (por defecto 5000).
expect.hidden(locator)El elemento no es visible.
expect.text(locator, 'contains') / expect.text('text')El elemento contiene el texto, o el texto aparece en cualquier parte de la página.
expect.url('/dashboard') / expect.url(/regex/)La URL de la pestaña coincide.
expect.request({urlContains, method, status})Se hizo una petición coincidente desde que empezó el paso. status es un número, '2xx' o 'error'.
expect.noErrors({kinds, waitMs, ignoreStatus, ignore})No apareció ningún grupo de errores nuevo desde que empezó el paso. Ignora estados como 401 o mensajes por subcadena.
expect.layout({rules, ignore})El layout responsive de la página no tiene errores en el viewport de la ejecución. Consulta la comprobación de layout.

Un localizador es {role, name, text, nth, exact}, una referencia de instantánea como "e12", o un texto. Una expectativa fallida lanza un error de aserción con lo que se esperaba y lo que se encontró, y el informe lo muestra. astral.screenshot({name, fullPage}) dentro de una prueba añade una captura con nombre al paso actual.

Modos de grabación

ModoQué se captura
'off'Capturas solo de los fallos.
'steps' (por defecto)Una captura al final de cada paso.
'actions'Además, una después de cada clic, escritura, selección, pulsación de tecla y navegación, tomada mientras un marcador señala el objetivo: un recuadro, una onda en el punto del clic y un rótulo como click "Sign in".
'video'Además, fotogramas de la pestaña a 4 por segundo (hasta 5 minutos o 200 MB), guardados como un recording.png animado, y recording.mp4 donde Astral puede codificarlo (macOS), con un reproductor de fotogramas en el informe.

Los marcadores se dibujan en todos los modos excepto 'off', desaparecen a los 2,5 segundos y al terminar la ejecución, y nunca capturan clics. El texto escrito en un campo de contraseña, de código de un solo uso o de tarjeta nunca se guarda: los rótulos muestran •••••• y el valor se enmascara en el resto del informe. Consulta Plataformas para saber qué sistemas admiten vídeo.

Qué deja una ejecución

Cada ejecución escribe una carpeta en el directorio de datos de Astral que contiene:

  • report.html: un informe legible con un resumen, una tarjeta por paso con sus capturas, la aserción fallida, las peticiones fallidas, errores de consola, errores de página agrupados, una línea de tiempo de acciones y una sección de rendimiento.
  • report.json: los mismos datos, más un resumen en Markdown pensado para pegarlo en una incidencia.
  • Las capturas como archivos PNG, y la grabación si la pediste.

Se conservan las 50 ejecuciones más recientes (configurable en Ajustes → Desarrollador, donde también se pueden desactivar las ejecuciones de prueba). El agente vuelve a leer las ejecuciones con test_runs_list y test_run_get.

Evidencias para tickets

El resumen en Markdown está pensado para pegarlo en una incidencia, junto a las capturas y el informe. Si tu agente está conectado a tu herramienta de tickets, puede publicar esas evidencias allí por ti. Astral en sí no se integra con ninguna herramienta de tickets: escribe las evidencias y deja la publicación en tus manos o en las de tu agente.

Los nombres de las pruebas, los pasos, los nombres de las capturas y todo lo que Astral escribe sobre una ejecución están en inglés, sea cual sea el idioma que uses tú, el ticket o la página. Solo los localizadores conservan el texto propio de la página.