Ir al contenido

Resultados reales de los pasos

Durante una ejecución de pruebas, un miembro registra un resultado real por cada paso. Es texto enriquecido: envíalo como Markdown en actualResult, o como documento en actualResultDocument (ver Campos de texto enriquecido). El texto admite como máximo 20000 caracteres. Las capturas y otras imágenes van insertadas en el texto: prepara cada una con POST /api/v1/images:stage y referencíala como ![alt](attachment:<ULID>).

Los archivos que no son imágenes del texto, como registros, trazas y videos, son adjuntos de resultado. Un archivo de resultado puede asociarse a un paso con stepIndex.

Las escrituras necesitan el permiso attachments.execute, que tienen los miembros, los administradores y los propietarios. Los visualizadores reciben 403 forbidden. Las lecturas siempre están permitidas. Las escrituras siguen las reglas de estado de la ejecución de Configuración de ejecución: una ejecución open las acepta, una ejecución closed las acepta cuando allowResultsInClosedRuns resuelve a true (el valor por defecto del código), y una ejecución aborted siempre las rechaza con 409.

PATCH/api/v1/runs/{runUlid}/cases/{runCaseUlid}/steps/{stepUlid}/result
{
"actualResult": "Se vio HTTP 500 en lugar del dashboard:\n\n![Página de error](attachment:01J...IMG)"
}

Envía actualResult (Markdown) o actualResultDocument (el documento), nunca ambos. null borra el resultado. Si no envías ninguno, el resultado guardado no cambia.

Errores:

  • 422 validation_failed — se envían ambas formas, o el texto incumple una regla de texto enriquecido (ver Campos de texto enriquecido). Una imagen que nunca se preparó, o que expiró, responde con details.code unknown_image.
  • 403 forbidden — rol visualizador.
  • 409 — las reglas de estado de la ejecución de arriba.
  • 413 storage_quota_exceeded — las imágenes llevarían a la organización por encima de su cuota de almacenamiento. No se cambia nada.

Auditoría: emite run.case_step_actual_result_set con el cambio de texto plano de actual_result.

GET /api/v1/runs/{runUlid}/cases/{runCaseUlid} devuelve el actualResult (Markdown) y el actualResultDocument de cada paso. Ambos son null cuando el paso no tiene resultado.

Prepara una imagen con POST /api/v1/images:stage antes del guardado que la referencia. Quitar la imagen del texto y guardar la elimina, salvo que otro texto o una revisión guardada todavía la referencie. Las imágenes de un resultado cuentan para la cuota de almacenamiento de la organización en la categoría content_image. Un guardado que no añade imágenes nunca se rechaza por almacenamiento.

  • POST /api/v1/runs/{runUlid}/cases/{runCaseUlid}/retry — reinicia el caso (y sus snapshots de pasos congelados) a untested y recalcula el agregado de la ejecución. Emite run.case_retried.
  • DELETE /api/v1/runs/{runUlid}/cases/{runCaseUlid} — elimina el caso junto con sus pasos y recalcula el agregado de la ejecución. Emite run.case_removed.

Ambas siguen la regla de ejecución cerrada de arriba.