Reportar JUnit XML desde cualquier lenguaje
Cómo generar el JUnit XML de Playwright, pytest, Maven, Gradle, PHPUnit, .NET y Go para enviarlo a Qably desde CI.
El backend de Qably procesa cualquier archivo con estructura estándar <testsuite>/<testcase>, extrayendo el resultado de cada prueba a partir de los elementos <failure>, <error> o <skipped>. Genere el reporte XML utilizando las herramientas nativas de su lenguaje y envíe el archivo resultante en su pipeline de CI.
JavaScript y TypeScript
Jest y Vitest se detallaron en el paso 4 del inicio rápido.
Comandos por herramienta
PLAYWRIGHT_JUNIT_OUTPUT_NAME=results.xml npx playwright test --reporter=junitpytest --junitxml=report.xmlmvn test
# genera target/surefire-reports/TEST-*.xml./gradlew test
# genera build/test-results/test/TEST-*.xmlphpunit --log-junit junit.xmldotnet add package JUnitXml.TestLogger
dotnet test --logger:"junit;LogFilePath=test-result.xml"go install github.com/jstemmer/go-junit-report/v2@latest
go test -v ./... 2>&1 | go-junit-report -set-exit-code > report.xmlNotas sobre cada herramienta
El reporter de JUnit incorporado en Playwright escribe a la salida estándar a menos que se indique un archivo, ya sea mediante una variable de entorno o en el archivo de configuración.
También puede configurarse una vez en playwright.config.ts: reporter: [['junit', { outputFile: 'results.xml' }]].
mvn test escribe un reporte por clase de prueba sin ninguna bandera extra; el plugin Surefire lo hace por defecto.
PHPUnit escribe el reporte JUnit XML en el archivo indicado a --log-junit.
Agregue el paquete NuGet JUnitXml.TestLogger al proyecto de pruebas y pase el logger por línea de comandos.
go-junit-report lee la salida de go test. Su bandera -set-exit-code hace que termine con estado 1 cuando una prueba falla, de modo que una prueba fallida sigue haciendo fallar el paso de CI.
Identidad de los casos y suites
Importante: Un caso se identifica por su classname y su name en conjunto, por lo que dos pruebas llamadas test_login en clases distintas siguen siendo casos separados. Cuando el name ya comienza con el classname, la identidad es solo el name. Si dos pruebas distintas de una suite resuelven a la misma identidad, Qably no las fusiona en un solo caso: informa la colisión en la respuesta de ingesta (caseIdentityCollisions) para que pueda renombrar una de ellas.
pytest escribe todas las pruebas en un único <testsuite name="pytest">, por lo que Qably agrupa todos los casos de pytest en una sola suite llamada pytest. La opción junit_suite_name solo cambia el nombre de esa suite raíz; no la divide. Para mantener suites separadas, ejecute pytest una vez por grupo de pruebas (por ejemplo, una ejecución por archivo) y envíe cada reporte por separado, cada uno con su propio externalId.