Ir al contenido

API de matriz de cobertura

El endpoint de matriz de cobertura devuelve el estado del resultado más reciente para cada caso de prueba de un proyecto, desglosado por entorno. Cada fila representa un caso de prueba; cada celda dentro de la fila representa el resultado más reciente registrado para ese caso en uno de los entornos del proyecto.

El endpoint es de solo lectura — no emite eventos de auditoría ni realiza cambios de estado.

Todas las peticiones requieren una sesión autenticada (token de API o cookie) con membresía mínima de viewer en la organización del proyecto. Un projectId que pertenezca a otra organización devuelve 404 not_found.

GET/api/v1/projects/{projectId}/coverage-matrix

{projectId} es el código del proyecto (por ejemplo ACME).

ParámetroPor defectoNotas
page1Número de página (base 1)
pageSize50Filas por página (mínimo 1, máximo 200)
suiteUlidLista opcional de ULIDs de suite, separados por comas. Cuando se indica, solo se devuelven los casos de prueba que pertenezcan a alguna de las suites listadas (semántica OR). Un único ULID se comporta de forma idéntica al comportamiento anterior. Los ULIDs desconocidos o de otro proyecto se ignoran silenciosamente; si todos los ULIDs son desconocidos, el resultado es una página vacía con total = 0. Un ULID con formato inválido (no es un Crockford base32 de 26 caracteres válido) devuelve 422 validation_failed.
statusFiltro opcional por estado derivado más reciente, separado por comas. Valores aceptados: passed, failed, blocked, skipped, untested, none. none selecciona las filas con al menos una celda vacía (un caso nunca ejecutado en ningún entorno). Los valores se combinan con OR. Un token desconocido devuelve 422 validation_failed.
qConsulta de búsqueda de texto opcional. Cuando no está vacío (tras eliminar espacios), restringe las filas a los casos cuyos campos de texto (seleccionados por searchBy) contengan q como subcadena sin distinción de mayúsculas. Los caracteres % y _ en q se tratan literalmente. Un valor vacío o compuesto solo de espacios se considera ausente (sin filtro de texto).
searchByallControla qué campo se busca cuando q no está vacío. Valores aceptados: all (por defecto), title, id. Consulta la tabla de valores de searchBy. Un valor desconocido devuelve 422 validation_failed.

200 con la siguiente forma:

{
"columns": [ ... ],
"rows": {
"items": [ ... ],
"page": 1,
"pageSize": 50,
"total": 120
}
}

Un array de objetos de entorno, uno por cada entorno activo del proyecto, en orden de creación. Son los encabezados de columna de la matriz.

CampoTipoNotas
environmentIdstring (ULID)El ULID del entorno
namestringNombre para mostrar (por ejemplo Staging)
slugstringIdentificador seguro para URLs (por ejemplo staging)

Los entornos eliminados de forma lógica nunca se incluyen.

Un array paginado de filas de casos de prueba. Cada fila contiene los siguientes campos:

CampoTipoNotas
testCaseIdstring (ULID)El ULID del caso de prueba
caseNumbernumberNúmero de caso legible dentro del proyecto
titlestringTítulo del caso de prueba
suiteobject | nullLa suite a la que pertenece el caso ({ ulid, name }), o null si no tiene asignación
cellsarrayUna celda por columna, en el mismo orden que columns

Cada entrada de cells:

CampoTipoNotas
environmentIdstring (ULID)Corresponde al columns[i].environmentId equivalente
statusstring | nullEstado del resultado más reciente para este caso en este entorno, o null si no existe ningún resultado
executedAtnumber | nullMilisegundos desde epoch Unix del resultado más reciente, o null
runUlidstring (ULID) | nullLa ejecución que produjo el resultado más reciente, o null

Un status null significa que el caso de prueba nunca se ejecutó en ese entorno — es una celda vacía, distinta de un resultado con estado untested. cells.length siempre es igual a columns.length.

ValorSignificado
passedEl resultado más reciente es satisfactorio
failedEl resultado más reciente es fallido
blockedEl resultado más reciente está bloqueado
skippedEl resultado más reciente fue omitido
untestedEl caso fue marcado explícitamente como no probado en el resultado más reciente
nullNo hay ningún resultado registrado en este entorno (celda vacía)
ValorColumnas buscadas
all (por defecto)title del caso o ID visible (#<caseNumber>) — combinados con OR
titleSolo el title del caso
idSolo el ID visible — el formato #<caseNumber> que aparece en la UI

Cuando q está ausente o vacío, searchBy no tiene efecto.

total en la respuesta siempre refleja el conteo de filas tras aplicar todos los filtros activos (suite + estado + texto).

Cuando dos resultados para el mismo par (caso de prueba, entorno) comparten la misma marca de tiempo executedAt, prevalece el resultado con el ID interno mayor.

Los resultados de ejecuciones sin entorno asignado (environment_id IS NULL) nunca se incluyen en ninguna celda.

EstadoCódigoCondición
404not_foundprojectId no existe o pertenece a otra organización
422validation_failedpageSize fuera de rango, token de status desconocido, ULID con formato inválido en suiteUlid, valor de searchBy desconocido

Filtrar por dos suites y buscar por título:

Ventana de terminal
curl -sS \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
"https://probara.net/api/v1/projects/ACME/coverage-matrix?suiteUlid=01JAAAA...,01JBBBB...&q=login&searchBy=title"

Filtrar por estado con paginación:

Ventana de terminal
curl -sS \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
"https://probara.net/api/v1/projects/ACME/coverage-matrix?pageSize=20&status=failed,none"

Fragmento de respuesta:

{
"columns": [
{ "environmentId": "01JAAAA...", "name": "Staging", "slug": "staging" },
{ "environmentId": "01JBBBB...", "name": "Production", "slug": "production" }
],
"rows": {
"items": [
{
"testCaseId": "01JCCCC...",
"caseNumber": 1,
"title": "Inicio de sesión con credenciales válidas",
"suite": { "ulid": "01JDDDD...", "name": "Autenticación" },
"cells": [
{
"environmentId": "01JAAAA...",
"status": "failed",
"executedAt": 1718700000000,
"runUlid": "01JEEEE..."
},
{ "environmentId": "01JBBBB...", "status": null, "executedAt": null, "runUlid": null }
]
}
],
"page": 1,
"pageSize": 20,
"total": 3
}
}