Introducción a Allure Spock
Genera hermosos informes en HTML usando Allure Report y tus pruebas con Spock.
INFO
Consulta los proyectos de ejemplo en github.com/allure-examples para ver Allure Spock en acción.
Configuración
1. Prepara tu proyecto
Abre una terminal y asegúrate de que Java versión 8 o superior esté disponible en el entorno.
bashjava --version
En la sección
dependencies
de tu archivobuild.gradle.kts
, añade la especificación de dependencia de Allure Spock antes de las dependencias del marco de trabajo Spock.WARNING
Debido a un detalle de implementación, algunas funcionalidades de Allure Spock no funcionarán a menos que las dependencias estén listadas en el orden correcto. Para detalles técnicos, consulta la discusión en GitHub.
ktsdependencies { // Allure Spock adapter testImplementation(platform("io.qameta.allure:allure-bom:2.24.0")) testImplementation("io.qameta.allure:allure-spock2") testImplementation("io.qameta.allure:allure-junit-platform") // Spock framework testImplementation(platform("org.spockframework:spock-bom:2.3-groovy-4.0")) testImplementation("org.spockframework:spock-core") // ... }
Actualiza el proyecto y descarga todas las dependencias:
bash./gradlew build
bashgradlew build
2. Ejecuta las pruebas
Ejecuta tus pruebas Spock de la misma forma que lo harías normalmente. Por ejemplo:
./gradlew test
gradlew test
Esto guardará los datos necesarios en el directorio build/allure-results
u otro, según la configuración, consulta AllureExtension
. Si el directorio ya existe, los nuevos archivos se agregarán a los existentes, de manera que un informe futuro se basará en todos ellos.
3. Genera un informe
Finalmente, convierte los resultados de las pruebas en un informe HTML. Esto puede hacerse con uno de los siguientes comandos:
gradle allureReport
procesa los resultados de las pruebas y guarda un informe HTML enbuild/reports/allure-report
u otro directorio, según la configuración, consultaAllureExtension
. Para ver el informe, utiliza el comandoallure open
.Usa este comando si necesitas guardar el informe para referencia futura o para compartirlo con colegas.
gradle allureServe
crea el mismo informe quegradle allureReport
pero lo coloca en un directorio temporal y comienza un servidor web local configurado para mostrar el contenido de ese directorio. El comando luego abre automáticamente la página principal del informe en un navegador web.Usa este comando si necesitas ver el informe para ti mismo y no necesitas guardarlo.
Escribir pruebas
El adaptador Allure Spock no solo recopila los datos proporcionados por las funciones estándar de Spock, sino que también ofrece características adicionales para escribir pruebas aún mejores. Esta sección enumera las formas más destacadas de mejorar tus pruebas, utilizando tanto las características de Spock como las de Allure Spock.
Con Allure Spock, puedes:
- proporcionar descripción, enlaces y otros metadatos,
- organizar pruebas en jerarquías,
- dividir la prueba en pasos de prueba más pequeños y fáciles de leer,
- describir los parámetros utilizados al ejecutar pruebas parametrizadas,
- hacer que la prueba guarde capturas de pantalla y otros archivos durante la ejecución,
- seleccionar qué pruebas ejecutar a través de un archivo de plan de pruebas,
- proporcionar información arbitraria del entorno para todo el informe de prueba.
Especificar descripción, enlaces y otros metadatos
Puedes agregar una gran cantidad de metadatos a cada prueba para que aparezcan en el informe. Consulta la referencia para obtener más detalles.
Para cada uno de los campos de metadatos, hay dos formas de asignarlos: mediante una anotación antes del método de prueba o mediante una llamada de método dentro del cuerpo del método de prueba. La segunda forma se denomina “dinámica”, porque permite construir cadenas y otros valores en tiempo de ejecución antes de pasarlos a los métodos. Sin embargo, se recomienda encarecidamente asignar todos los metadatos lo antes posible. De lo contrario, existe el riesgo de que la prueba falle antes de haber establecido todos los metadatos, lo que afecta negativamente la legibilidad del informe de prueba.
import io.qameta.allure.Description
import io.qameta.allure.Issue
import io.qameta.allure.Link
import io.qameta.allure.Owner
import io.qameta.allure.Severity
import io.qameta.allure.TmsLink
import spock.lang.Specification
import static io.qameta.allure.SeverityLevel.*
class TestMyWebsite extends Specification {
@Description("This test attempts to log into the website using a login and a password. Fails if any error happens.\n\nNote that this test does not test 2-Factor Authentication.")
@Severity(CRITICAL)
@Owner("John Doe")
@Link(name = "Website", url = "https://dev.example.com/")
@Issue("AUTH-123")
@TmsLink("TMS-456")
def "Test Authentication"() {
expect: true
}
}
import io.qameta.allure.Allure
import spock.lang.Specification
class TestMyWebsite extends Specification {
def "Test Authentication"() {
Allure.description("This test attempts to log into the website using a login and a password. Fails if any error happens.\n\nNote that this test does not test 2-Factor Authentication.")
Allure.label("severity", "critical")
Allure.label("owner", "John Doe")
Allure.link("Website", "https://dev.example.com/")
Allure.issue("AUTH-123", "https://example.com/issues/AUTH-123")
Allure.tms("TMS-456", "https://example.com/tms/TMS-456")
expect: true
}
}
Organizar pruebas
Como se describe en Mejorar la navegación en tu informe de pruebas, Allure admite múltiples formas de organizar las pruebas en estructuras jerárquicas. Allure Spock proporciona funciones para asignar los campos relevantes a las pruebas, ya sea mediante la adición de anotaciones o de forma “dinámica” (igual que para los campos de metadatos).
Para especificar la ubicación de una prueba en la jerarquía basada en comportamiento:
import io.qameta.allure.Epic
import io.qameta.allure.Feature
import io.qameta.allure.Story
import spock.lang.Specification
class TestMyWebsite extends Specification {
@Epic("Web interface")
@Feature("Essential features")
@Story("Authentication")
def "Test Authentication"() {
expect: true
}
}
import io.qameta.allure.Allure
import spock.lang.Specification
class TestMyWebsite extends Specification {
def "Test Authentication"() {
Allure.epic("Web interface")
Allure.feature("Essential features")
Allure.story("Authentication")
expect: true
}
}
Para especificar la ubicación de una prueba en la jerarquía basada en suites:
import io.qameta.allure.Allure
import spock.lang.Specification
class TestMyWebsite extends Specification {
def "Test Authentication"() {
Allure.label("parentSuite" "Tests for web interface")
Allure.suite("Tests for essential features")
Allure.label("subSuite", "Tests for authentication")
expect: true
}
}
La ubicación de una prueba en la jerarquía basada en paquetes se define por los nombres totalmente cualificados de las clases en las que se declaran, con prefijos comunes mostrados como paquetes principales.
Dividir una prueba en pasos
Allure Spock proporciona dos formas de crear pasos y subpasos: “pasos anotados” y “pasos no operativos” (no-op steps), consulta la referencia.
import io.qameta.allure.Step
import spock.lang.Specification
class TestMyWebsite extends Specification {
def "Test Authentication"() {
expect: true
steps.step1()
steps.step2()
}
private class steps {
@Step("Step 1")
static def step1() {
expect: true
}
@Step("Step 2")
static def step2() {
expect: true
}
}
}
import io.qameta.allure.Allure
import spock.lang.Specification
class TestMyWebsite extends Specification {
def "Test Authentication"() {
Allure.step("Step 1")
expect: true
Allure.step("Step 2")
expect: true
}
}
Describir pruebas parametrizadas
Allure Spock admite el patrón de pruebas parametrizadas.
La forma más sencilla de escribir una prueba parametrizada es definir una tabla de datos. Consulta Pruebas basadas en datos en la documentación de Spock. Esto hará que Spock ejecute la misma prueba varias veces, y Allure detectará automáticamente cada conjunto de parámetros y los mostrará en el informe generado.
Además, puedes llamar manualmente al método parameter()
de Allure Spock para definir pseudo-parámetros en cualquier función.
import io.qameta.allure.Allure
import spock.lang.Specification
class TestMyWebsite extends Specification {
def "Test Authentication"() {
expect: true
where:
login | _
"johndoe" | _
"[email protected]" | _
}
def "Test Authentication With Empty Login"() {
Allure.parameter("login", "")
expect: true
}
}
Adjuntar capturas de pantalla y otros archivos
Puedes adjuntar cualquier tipo de archivo a tu informe de Allure. Por ejemplo, una forma popular de hacer que un informe sea más comprensible es adjuntar una captura de pantalla de la interfaz de usuario en un momento determinado.
Allure Spock proporciona varias formas de crear un archivo adjunto, ya sea a partir de archivos existentes o generados dinámicamente. Consulta la referencia.
import io.qameta.allure.Allure
import spock.lang.Specification
import java.nio.file.Files
import java.nio.file.Paths
class TestMyWebsite extends Specification {
def "Test Authentication"() {
Allure.attachment("data.txt", "This is the file content.")
Allure.attachment(
"img.png",
Files.newInputStream(Paths.get("/path/img.png"))
)
expect: true
}
}
Seleccionar pruebas mediante un archivo de plan de pruebas
Si la variable de entorno ALLURE_TESTPLAN_PATH
está definida y apunta a un archivo existente, Spock solo ejecutará las pruebas listadas en este archivo.
Aquí tienes un ejemplo de cómo ejecutar pruebas según un archivo llamado testplan.json
:
export ALLURE_TESTPLAN_PATH=testplan.json
./gradlew test
$Env:ALLURE_TESTPLAN_PATH = "testplan.json"
gradlew test
Información del entorno
Para la página principal del informe, puedes recopilar información variada sobre el entorno en el que se ejecutaron las pruebas.
Por ejemplo, es una buena idea usar esto para recordar la versión del sistema operativo y la versión de Java. Esto puede ayudar al lector futuro a investigar errores que solo son reproducibles en ciertos entornos.
Para proporcionar información del entorno, coloca un archivo llamado environment.properties
en el directorio allure-results
después de ejecutar las pruebas. Consulta el ejemplo en Archivo de entorno.
Ten en cuenta que esta característica debe usarse para propiedades que no cambian para todas las pruebas en el informe. Si tienes propiedades que pueden ser diferentes para pruebas específicas, considera usar Pruebas parametrizadas.