Que Es Allure?
Allure es un framework de reportes de testing de codigo abierto que transforma resultados de tests en reportes HTML ricos e interactivos. Mientras la mayoria de frameworks de testing producen resumenes basicos de pass/fail, Allure crea reportes detallados con pasos de test, screenshots, logs de red, lineas de tiempo, tendencias historicas y fallas categorizadas.
Allure se integra con practicamente todos los frameworks de testing: JUnit, TestNG, Pytest, Jest, Mocha, Playwright, Cypress y mas. Funciona en dos pasos: primero, tus tests generan archivos de resultados Allure durante la ejecucion; segundo, el CLI de Allure genera un reporte HTML a partir de esos archivos.
Por Que Usar Allure?
Los reportes estandar responden una pregunta: cuantos tests pasaron? Allure responde muchas mas:
- Que hizo exactamente cada test? Ejecucion paso a paso con screenshots
- Por que fallo? Fallas categorizadas con stack traces y evidencia adjunta
- Es una falla nueva o un issue conocido? Tendencias historicas y deteccion de tests inestables
- Que funcionalidades estan afectadas? Tests organizados por feature, story y severidad
Configuracion de Allure
Instalacion
# macOS
brew install allure
# npm (multiplataforma)
npm install -g allure-commandline
Java (JUnit 5 + Maven)
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-junit5</artifactId>
<version>2.25.0</version>
<scope>test</scope>
</dependency>
Python (Pytest)
pip install allure-pytest
pytest --alluredir=allure-results
Anotaciones de Allure
Pasos
@Test
@Description("Verificar que el usuario puede loguearse con credenciales validas")
@Severity(SeverityLevel.CRITICAL)
@Feature("Autenticacion")
@Story("Login")
public void testSuccessfulLogin() {
openLoginPage();
enterCredentials("admin@example.com", "password123");
clickLoginButton();
verifyDashboardDisplayed();
}
@Step("Abrir la pagina de login")
public void openLoginPage() {
driver.get(baseUrl + "/login");
}
@Step("Ingresar credenciales: {email}")
public void enterCredentials(String email, String password) {
driver.findElement(By.id("email")).sendKeys(email);
driver.findElement(By.id("password")).sendKeys(password);
}
Adjuntos
@Attachment(value = "Screenshot", type = "image/png")
public byte[] takeScreenshot() {
return ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
}
Severidad y Labels
@Severity(SeverityLevel.BLOCKER)
@Feature("Carrito de Compras")
@Story("Agregar al Carrito")
@Epic("E-Commerce")
@Owner("qa-team")
@Link(name = "JIRA-1234", url = "https://jira.example.com/JIRA-1234")
Generando Reportes
# Generar y abrir reporte
allure serve allure-results
# Generar reporte en un directorio
allure generate allure-results -o allure-report --clean
Secciones del Reporte
Dashboard Principal
- Conteos de Pass/Fail/Broken/Skipped y porcentajes
- Desglose de severidad de todos los tests
- Cobertura de funcionalidades
- Tendencia de duracion de ejecucion de tests
- Categorias de razones de falla agrupadas
Vistas de Suites y Behaviors
- Suites: Tests organizados por clase de test y paquete (vista tecnica)
- Behaviors: Tests organizados por Epic > Feature > Story (vista de negocio)
Configuracion de Categorias
[
{
"name": "Defectos de Producto",
"matchedStatuses": ["failed"],
"messageRegex": ".*AssertionError.*"
},
{
"name": "Problemas de Infraestructura de Test",
"matchedStatuses": ["broken"],
"messageRegex": ".*TimeoutException.*|.*ConnectionRefused.*"
}
]
Allure en CI/CD
- name: Ejecutar tests
run: mvn test
continue-on-error: true
- name: Generar Reporte Allure
uses: simple-elf/allure-report-action@master
with:
allure_results: target/allure-results
Ejemplo en Python (Pytest)
import allure
@allure.feature("Autenticacion")
@allure.story("Login")
@allure.severity(allure.severity_level.CRITICAL)
def test_successful_login(page):
with allure.step("Abrir pagina de login"):
page.goto("/login")
with allure.step("Ingresar credenciales"):
page.fill("#email", "admin@example.com")
page.fill("#password", "password123")
with allure.step("Enviar formulario"):
page.click("#submit")
with allure.step("Verificar dashboard"):
assert page.text_content(".welcome") == "Welcome, Admin"
allure.attach(page.screenshot(), name="Screenshot", attachment_type=allure.attachment_type.PNG)
Ejercicios
Ejercicio 1: Configuracion de Allure
Agrega dependencias de Allure a un proyecto existente, anota 5 tests con @Step, @Feature, @Story y @Severity, genera un reporte y explora cada seccion.
Ejercicio 2: Categorias e Historial
Crea un archivo categories.json, ejecuta tests dos veces con historial para ver graficos de tendencia, identifica el test mas lento desde la vista Timeline.
Ejercicio 3: Integracion CI/CD
Agrega generacion de reportes Allure a un pipeline CI, configura seguimiento de tendencias historicas, configura publicacion de reportes accesibles via URL.