Integración con Gradle
El plugin de Allure para Gradle genera reportes de Allure a partir de los resultados en bruto producidos por tus tareas de prueba. Se encarga de descargar el CLI de Allure, instrumentar las tareas de prueba para escribir resultados y proporcionar tareas para generar y servir reportes.
- Requiere Gradle 8.11 o superior
- Requiere Java 17 o superior
Configuración inicial
Aplica el plugin principal en tu build.gradle.kts:
plugins {
id("io.qameta.allure") version "4.1.0"
}
repositories {
// Requerido para que Gradle pueda resolver las dependencias del adaptador allure-java
mavenCentral()
}O en Groovy DSL (build.gradle):
plugins {
id 'io.qameta.allure' version '4.1.0'
}
repositories {
mavenCentral()
}El plugin io.qameta.allure es un acceso directo que aplica tanto io.qameta.allure-adapter como io.qameta.allure-report juntos. Aplica cada uno por separado si necesitas un control más detallado (ver Desglose de plugins).
Generar un reporte
Ver el reporte localmente
./gradlew allureServeAbre el reporte en un servidor web local. Por defecto, no ejecuta tus pruebas primero.
Ejecutar pruebas y ver el reporte
./gradlew allureServe --depends-on-testsGenerar un reporte estático
./gradlew allureReportSalida: build/reports/allure-report/allureReport/
Cuando usas la extensión reportDir, el subdirectorio de salida siempre se nombra según la tarea (allureReport, allureAggregateReport, etc.), por lo que el reporte agregado se encuentra en build/reports/allure-report/allureAggregateReport/. Cuando usas el flag --report-dir, el reporte se escribe directamente en la ruta especificada sin añadir un subdirectorio con el nombre de la tarea.
Ejecutar pruebas y generar un reporte en un solo comando
./gradlew allureReport --depends-on-testsTareas añadidas por el plugin
| Tarea | Descripción |
|---|---|
allureReport | Genera un reporte HTML estático |
allureServe | Genera un reporte y lo abre en un servidor web local |
allureAggregateReport | Genera un reporte agregado entre subproyectos (requiere io.qameta.allure-aggregate-report) |
allureAggregateServe | Sirve un reporte agregado (requiere io.qameta.allure-aggregate-report) |
downloadAllure | Descarga y almacena en caché el CLI de Allure |
Selección de la versión de Allure
Establece allure.version para elegir el entorno de ejecución:
allure {
version = "3.9.0" // Allure 3 (por defecto)
// version = "2.42.1" // Allure 2
}- Versión
3.x→ Allure 3 (basado en Node.js, aprovisionado automáticamente) - Versión
2.x→ Allure 2 (archivo zipallure-commandline, descargado desde Maven Central) - Por defecto si no se establece: Allure 3, versión
3.9.0
Cualquier cadena de versión cuyo número mayor sea 3 o superior selecciona Allure 3; número mayor 2 o inferior selecciona Allure 2.
Aprovisionamiento del entorno de Allure 3
Para Allure 3, el plugin aprovisiona automáticamente un entorno privado de Node.js. No necesitas tener Node.js instalado en tu máquina.
En el primer uso, el plugin descarga Node.js e instala el paquete npm allure. La descarga de Node.js se almacena en caché por Gradle y se omite en compilaciones posteriores. La instalación de npm se ejecuta nuevamente en un checkout nuevo.
Autoconfiguración del framework de pruebas
Cuando aplicas io.qameta.allure-adapter, el plugin escanea tu classpath de pruebas y añade automáticamente el adaptador allure-java correspondiente. No es necesario declarar manualmente la dependencia para frameworks soportados.
Frameworks soportados y sus activadores:
| Nombre DSL del framework | Se activa cuando esto está en el classpath |
|---|---|
junit4 | junit:junit |
junit5 | org.junit.jupiter:junit-jupiter-api |
junitPlatform | org.junit.platform:junit-platform-launcher |
testng | org.testng:testng (6.14.3+) |
assertj | org.assertj:assertj-core |
jbehave | org.jbehave:jbehave-core (4.x) |
jbehave5 | org.jbehave:jbehave-core (5.x) |
karate | com.intuit.karate:karate-core |
scalatest | org.scalatest:scalatest_2.12 o scalatest_2.13 |
spock | org.spockframework:spock-core (usa allure-spock2; requiere useJUnitPlatform() en la tarea de prueba — sin esto, el adaptador está en el classpath pero no captura resultados) |
cucumber4Jvm | io.cucumber:cucumber-core (4.x) |
cucumber5Jvm | io.cucumber:cucumber-core (5.x) |
cucumber6Jvm | io.cucumber:cucumber-core (6.x) |
cucumber7Jvm | io.cucumber:cucumber-core (7.x) |
La versión por defecto de allure-java usada para todos los adaptadores es 2.35.2. La versión de AspectJ weaver es 1.9.25.1.
Qué hace la autoconfiguración
Cuando se detecta un framework soportado:
- Añade la dependencia del adaptador de Allure al classpath de compilación y ejecución de pruebas
- Añade el agente AspectJ weaver a los argumentos JVM de todas las tareas
TestyJavaExec(habilita soporte para@Stepy@Attachment) - Añade
allure-descriptions-javadocal path del procesador de anotaciones (habilita@Descriptiondesde Javadoc) - Configura listeners de prueba por defecto donde aplica (
junit5,junitPlatform,testng,karate)
Desactivar la autoconfiguración
Para desactivar toda la autoconfiguración:
allure {
adapter {
autoconfigure.set(false)
}
}Para desactivar partes individuales:
allure {
adapter {
autoconfigureListeners.set(false) // no registrar listeners por defecto
autoconfigureJavadocDescriptions.set(false) // no añadir el procesador de anotaciones de Javadoc
aspectjWeaver.set(false) // no añadir el agente AspectJ
}
}Para desactivar listeners solo para un framework específico:
allure {
adapter {
frameworks {
junit5 {
autoconfigureListeners.set(false)
}
}
}
}Listar frameworks explícitamente
Si tienes varios frameworks de prueba en el classpath pero solo quieres instrumentar uno:
allure {
adapter {
frameworks {
junit5
// solo se configurará junit5; los demás se ignoran
}
}
}Listar cualquier framework explícitamente en frameworks {} cambia el plugin de modo totalmente automático a modo selectivo: solo los adaptadores que nombres aquí se registran, y el registro automático de los demás adaptadores se suprime. Cada adaptador listado sigue dependiendo de su activador — su dependencia solo se añade si la dependencia activadora se detecta en el classpath, por lo que no hay coste si el activador está ausente.
Referencia de configuración
Opciones del adaptador
allure {
adapter {
// Versión del adaptador allure-java para todos los frameworks
allureJavaVersion.set("2.35.2")
// Versión de AspectJ weaver
aspectjVersion.set("1.9.25.1")
// Dónde las tareas de prueba escriben los resultados en bruto de Allure
resultsDir.set(layout.buildDirectory.dir("allure-results"))
// Ruta a categories.json para Allure 2 (detectado automáticamente desde test/resources por defecto)
categoriesFile.set(layout.projectDirectory.file("config/categories.json"))
}
}Opciones del reporte
allure {
report {
// Directorio base para todos los reportes (cada tarea tiene su propio subdirectorio nombrado según la tarea)
reportDir.set(layout.buildDirectory.dir("my-reports"))
// Generar un único archivo HTML autocontenible en vez de un directorio
singleFile.set(true)
// Archivo de configuración personalizado de Allure 3
configFile.set(layout.projectDirectory.file("allurerc.mjs"))
}
}Variables de entorno para el CLI de Allure
allure {
environment.put("JAVA_HOME", "/ruta/a/java_home")
}Opciones a nivel de tarea (línea de comandos)
Opciones compartidas por allureReport y allureServe:
# Ejecutar tareas de prueba antes de generar el reporte
./gradlew allureReport --depends-on-tests
./gradlew allureServe --depends-on-testsPara hacer que dependsOnTests sea permanente sin el flag, configúralo a nivel de tarea:
tasks.named<io.qameta.allure.gradle.report.tasks.AllureReport>("allureReport") {
dependsOnTests()
}
# Usar un archivo de configuración personalizado de Allure 3 (solo Allure 3)
./gradlew allureReport --config-file=allurerc.mjs
./gradlew allureServe --config-file=allurerc.mjsOpciones específicas de allureReport:
# Generar un reporte de archivo único
./gradlew allureReport --single-file=true
# Salida a un directorio específico
./gradlew allureReport --report-dir=build/my-report
# Eliminar el directorio de reporte antes de generar
./gradlew allureReport --cleanOpciones específicas de allureServe:
# Vincular el servidor a un puerto específico
./gradlew allureServe --port=8080
# Vincular el servidor a una dirección de host específica (solo Allure 2)
./gradlew allureServe --host=192.168.1.10--host no está soportado para Allure 3. Usa solo --port, o establece allure.version en una versión 2.x si necesitas vinculación de host.
Para Allure 3, --port se pasa al subcomando allure open (Allure 3 usa internamente generate + open en vez de un proceso persistente serve).
Directorio de resultados personalizado
Por defecto, los resultados en bruto van a build/allure-results. Para cambiar esto:
allure {
adapter {
resultsDir.set(layout.buildDirectory.dir("custom-allure-results"))
}
}Reporte de archivo único
Para producir un archivo HTML autocontenible en vez de un directorio:
allure {
report {
singleFile.set(true)
}
}O para una ejecución puntual:
./gradlew allureReport --single-file=trueEsto funciona tanto para Allure 2 como para Allure 3. Para allureServe, singleFile no tiene efecto.
Archivo de configuración de Allure 3
Para Allure 3, puedes proporcionar un archivo de configuración personalizado para controlar el nombre del reporte, el tema, los entornos, agrupaciones y plugins:
allure {
report {
configFile.set(layout.projectDirectory.file("allurerc.mjs"))
}
}O por invocación:
./gradlew allureReport --config-file=allurerc.mjsCuando se establece configFile, el plugin pasa --config <tu archivo> al CLI de Allure y también pasa --output <reportDir>. El flag --output tiene prioridad sobre cualquier campo output en tu archivo de configuración, por lo que el reporte siempre se escribe en el reportDir de la tarea. Las opciones de Allure 3 como singleFile, nombre del reporte y tema deben establecerse en tu archivo de configuración; la propiedad singleFile a nivel de Gradle y el flag --single-file se ignoran cuando se usa un configFile personalizado.
configFile no está soportado para Allure 2. Establecerlo mientras usas una versión 2.x falla con un error.
Compilaciones multiproyecto
Reporte agregado
Para generar un reporte combinado de todos los subproyectos, aplica io.qameta.allure-aggregate-report al proyecto raíz y io.qameta.allure-adapter a cada subproyecto que ejecute pruebas.
build.gradle.kts raíz:
plugins {
id("io.qameta.allure-aggregate-report") version "4.1.0"
}
repositories {
mavenCentral()
}Cada build.gradle.kts de subproyecto:
plugins {
`java`
id("io.qameta.allure-adapter") version "4.1.0"
}Luego ejecuta:
./gradlew allureAggregateReport
# o ver directamente:
./gradlew allureAggregateServePor defecto, io.qameta.allure-aggregate-report agrega resultados de allprojects (el proyecto raíz más todos los subproyectos). Para personalizar qué proyectos se incluyen:
// Elimina todos los valores por defecto y añade proyectos específicos
configurations.allureAggregateReport.dependencies.clear()
dependencies {
allureAggregateReport(project(":module1"))
allureAggregateReport(project(":module2"))
}Directorios de resultados por módulo
Si un subproyecto escribe resultados en una ubicación no predeterminada, configúralo en ese subproyecto:
allure {
adapter {
resultsDir.set(layout.buildDirectory.dir("my-results"))
}
}Añadir directorios de resultados externos
Para alimentar resultados desde un directorio no gestionado por el plugin (por ejemplo, desde un script o una herramienta que no sea JVM) al reporte:
// En un proyecto que aplica io.qameta.allure-adapter-base:
plugins {
id("io.qameta.allure-adapter-base") version "4.1.0"
}
dependencies {
allureRawResultElements(files(layout.buildDirectory.dir("external-results")))
}O desde el lado del reporte:
dependencies {
allureReport(files(layout.buildDirectory.dir("external-results")))
}Personalización de la descarga de Allure 2
Para Allure 2, el plugin descarga io.qameta.allure:allure-commandline:{version}:zip desde Maven Central mediante la resolución de dependencias de Gradle.
URL de descarga personalizada (entornos aislados)
allure {
version.set("2.42.1")
commandline {
// Patrones: [organization], [group], [module], [version]
downloadUrlPattern.set("https://my-mirror.example.com/[group]/[module]-[version].zip")
}
}El plugin registra un repositorio Ivy exclusivo para la URL resuelta. El archivo siempre se resuelve como zip; pon .zip fijo en tu patrón de URL.
Archivo local allure-commandline
Para resolver Allure 2 desde un archivo local en vez de un repositorio:
dependencies {
allureCommandline(files("/ruta/a/allure-commandline.zip"))
}Usa una ruta absoluta — las rutas relativas no son fiables en compilaciones multiproyecto.
Desglose de plugins
El plugin principal io.qameta.allure está compuesto por plugins más pequeños que puedes aplicar individualmente:
| ID del plugin | Qué hace |
|---|---|
io.qameta.allure | Aplica io.qameta.allure-adapter + io.qameta.allure-report |
io.qameta.allure-adapter | Instrumenta automáticamente todas las tareas Test y JavaExec, añade adaptadores allure-java, AspectJ |
io.qameta.allure-adapter-base | Expone la configuración allureRawResultElements; sin autoconfiguración de adaptadores |
io.qameta.allure-report | Añade las tareas allureReport y allureServe para el proyecto actual |
io.qameta.allure-aggregate-report | Añade las tareas allureAggregateReport y allureAggregateServe; agrega desde el proyecto raíz y todos los subproyectos |
io.qameta.allure-download | Añade la tarea downloadAllure; aprovisiona el CLI de Allure |
io.qameta.allure-base | Añade la extensión allure {}; la base sobre la que se construyen los demás plugins |
Uso en CI
GitHub Actions
Almacena en caché el directorio de caché de compilación de Gradle para evitar descargar el CLI de Allure en cada ejecución:
- name: Ejecutar pruebas y generar el reporte de Allure
run: ./gradlew test allureReport
- name: Subir el reporte de Allure
uses: actions/upload-artifact@v4
with:
name: allure-report
path: build/reports/allure-report/allureReport/Para compartir las cachés de Gradle entre ejecuciones (incluyendo el CLI de Allure descargado):
- uses: gradle/actions/setup-gradle@v4Jenkins Pipeline
pipeline {
agent any
stages {
stage('Test') {
steps {
sh './gradlew test'
}
}
stage('Report') {
steps {
sh './gradlew allureReport'
publishHTML(target: [
reportDir: 'build/reports/allure-report/allureReport',
reportFiles: 'index.html',
reportName: 'Allure Report'
])
}
}
}
}Alternativamente, si usas el plugin de Allure para Jenkins, puedes dejar que Jenkins genere y muestre el reporte directamente en vez de llamar a allureReport.
Ejecutar sin ejecutar pruebas
En pipelines de CI donde las pruebas y el reporte son etapas separadas, puede que quieras ejecutar solo la tarea de reporte sobre resultados ya escritos en disco:
./gradlew allureReportEsto lee los resultados existentes en build/allure-results/ sin volver a ejecutar las pruebas, que es el comportamiento por defecto.