Ir al contenido

API de exportación de casos de prueba

El endpoint de exportación descarga los casos de prueba activos (no archivados) de un proyecto como un único artefacto. Admite cuatro formatos y tres opciones de alcance, de forma que un integrador puede descargar un proyecto completo, el subárbol de una suite, o exactamente el subconjunto filtrado que un usuario está viendo en el repositorio.

El endpoint es de solo lectura — no emite eventos de auditoría ni realiza cambios de estado. Los adjuntos (imágenes de pasos, evidencia de defectos, etc.) nunca se incluyen en ningún formato exportado; solo viajan con el artefacto el texto, las etiquetas, los valores de campos personalizados y la estructura de suites.

Todas las peticiones requieren autenticación (token de API Bearer o cookie de sesión) con rol mínimo de member en la organización del proyecto. Los usuarios con rol viewer reciben 403 forbidden.

GET/api/v1/projects/{projectId}/exports

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

ParámetroPor defectoNotas
formatObligatorio. Uno de json, xml, csv, xlsx. Un valor no listado devuelve 422 validation_failed.
scopeprojectproject (todo el proyecto), suite (la suite indicada por suite, más todas sus suites descendientes), o filtered (el servidor reevalúa q/cf — ver abajo).
suiteULID de la suite. Obligatorio cuando scope=suite; se ignora en otro caso. Un ULID de suite no resoluble devuelve 404 not_found.
qFiltro de subcadena, aplicado solo cuando scope=filtered. Mismo contrato de coincidencia de subcadena que el endpoint de búsqueda de casos de prueba.
cfFiltro de campo personalizado, repetible, aplicado solo cuando scope=filtered. Cada entrada es <fieldUlid>:<value[,value…]> — contrato idéntico al de los endpoints de búsqueda/listado.

200 con el cuerpo del artefacto en el formato solicitado. La respuesta siempre lleva un Content-Type correspondiente y una cabecera Content-Disposition: attachment que nombra el archivo <projectId>-export.<extension>:

formatContent-TypeExtensión
jsonapplication/json.json
xmlapplication/xml.xml
csvtext/csv.csv
xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet.xlsx

Todos los formatos llevan los mismos datos subyacentes: para cada caso de prueba activo, su título, descripción, etiquetas, ruta de suite, pasos y los valores completos de campos personalizados (campos fijos — prioridad/tipo/estado — más cada campo personalizado configurado en el proyecto). Las celdas de CSV y XLSX que comienzan con =, +, -, @, un tabulador o un retorno de carro se prefijan con una comilla simple (') inicial para neutralizar la inyección de fórmulas en hojas de cálculo — esto es visible si abres el archivo en una aplicación de hoja de cálculo.

Una exportación está acotada a EXPORT_MAX_CASES (5000) casos activos por petición. Cuando el alcance resuelto superaría ese límite, la petición falla antes de leer o serializar cualquier fila:

{ "error": { "code": "too_many_cases", "message": "..." } }

Reduce el alcance (una suite más pequeña, o un alcance filtered con q/cf) y vuelve a intentarlo.

Las peticiones de exportación están limitadas por organización. Superar el límite devuelve 429 con { "error": { "code": "too_many_requests", ... } }. Espera un momento y reintenta.

EstadoCódigoCondición
403forbiddenEl rol del llamante es viewer
404not_foundprojectId no existe en la organización activa, o scope=suite referencia un ULID de suite que no existe en este proyecto
422validation_failedFalta format o no es uno de los cuatro valores listados, o scope=suite está presente sin suite
422too_many_casesEl alcance resuelto supera EXPORT_MAX_CASES
429too_many_requestsSe superó el límite de tasa de exportación de la organización

Todo archivo que produce este endpoint — JSON, XML, CSV o XLSX — puede reimportarse mediante la API de importación en dos pasos: POST /api/v1/projects/{projectId}/imports:stage para cargar el archivo y luego POST /api/v1/projects/{projectId}/imports/commit con el formato de origen probara_json/probara_xml/probara_csv/probara_xlsx correspondiente — un ciclo completo de ida y vuelta para respaldar y restaurar, o migrar casos entre proyectos. Como los adjuntos nunca se exportan, un caso reimportado nunca conserva sus imágenes de paso originales; todo lo demás (título, descripción, etiquetas, ruta de suite, pasos y valores de campos personalizados) se conserva íntegramente en el ciclo.

Exportar un proyecto completo como CSV:

Ventana de terminal
curl -sS \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
-o acme-export.csv \
"https://probara.net/api/v1/projects/ACME/exports?format=csv"

Exportar el subárbol de una suite (incluyendo sus descendientes) como XLSX:

Ventana de terminal
curl -sS \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
-o acme-suite-export.xlsx \
"https://probara.net/api/v1/projects/ACME/exports?format=xlsx&scope=suite&suite=01JAAAA..."

Exportar el subconjunto filtrado que coincide con una búsqueda como JSON:

Ventana de terminal
curl -sS \
-H "Authorization: Bearer $PROBARA_API_TOKEN" \
-o acme-filtered-export.json \
"https://probara.net/api/v1/projects/ACME/exports?format=json&scope=filtered&q=login"