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 el permiso de importación/exportación (que tienen owner/admin/member). Los usuarios con rol viewer reciben 403 forbidden.
Exportar casos de prueba
Sección titulada «Exportar casos de prueba»/api/v1/projects/{projectId}/exports{projectId} es el código del proyecto (por ejemplo ACME).
Parámetros de consulta
Sección titulada «Parámetros de consulta»| Parámetro | Por defecto | Notas |
|---|---|---|
format | — | Obligatorio. Uno de json, xml, csv, xlsx. Un valor no listado devuelve 422 validation_failed. |
scope | project | project (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). |
suite | — | ULID de la suite. Obligatorio cuando scope=suite; se ignora en otro caso. Un ULID de suite no resoluble devuelve 404 not_found. |
q | — | Filtro de subcadena, aplicado solo cuando scope=filtered. Mismo contrato de coincidencia de subcadena que el endpoint de búsqueda de casos de prueba. |
cf | — | Filtro 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. |
Respuesta
Sección titulada «Respuesta»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>:
format | Content-Type | Extensión |
|---|---|---|
json | application/json | .json |
xml | application/xml | .xml |
csv | text/csv | .csv |
xlsx | application/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.
Límite de tamaño
Sección titulada «Límite de tamaño»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.
Límite de tasa
Sección titulada «Límite de tasa»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.
Errores
Sección titulada «Errores»| Estado | Código | Condición |
|---|---|---|
403 | forbidden | El rol del llamante es viewer |
404 | not_found | projectId no existe en la organización activa, o scope=suite referencia un ULID de suite que no existe en este proyecto |
422 | validation_failed | Falta format o no es uno de los cuatro valores listados, o scope=suite está presente sin suite |
422 | too_many_cases | El alcance resuelto supera EXPORT_MAX_CASES |
429 | too_many_requests | Se superó el límite de tasa de exportación de la organización |
Reimportar una exportación
Sección titulada «Reimportar una exportació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.
Ejemplo
Sección titulada «Ejemplo»Exportar un proyecto completo como CSV:
curl -sS \ -H "Authorization: Bearer $PROBARA_API_TOKEN" \ -o acme-export.csv \ "https://app.probara.net/api/v1/projects/ACME/exports?format=csv"Exportar el subárbol de una suite (incluyendo sus descendientes) como XLSX:
curl -sS \ -H "Authorization: Bearer $PROBARA_API_TOKEN" \ -o acme-suite-export.xlsx \ "https://app.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:
curl -sS \ -H "Authorization: Bearer $PROBARA_API_TOKEN" \ -o acme-filtered-export.json \ "https://app.probara.net/api/v1/projects/ACME/exports?format=json&scope=filtered&q=login"Páginas relacionadas
Sección titulada «Páginas relacionadas»- API de búsqueda de casos de prueba — el mismo contrato de filtros
q/cfusado porscope=filtered. - API de importación de casos de prueba — reimporta los archivos que produce este endpoint, con fidelidad completa para reimportaciones de Probara.