Comenzando con Allure PHPUnit
Genera informes HTML hermosos usando Allure Report y tus pruebas de PHPUnit.
INFO
Consulta el proyecto de ejemplo en github.com/allure-examples/phpunit para ver Allure PHPUnit en acción.
Configuración
1. Prepara tu proyecto
Instala la herramienta de línea de comandos de Allure Report, si aún no está instalada en tu sistema operativo. Ten en cuenta que Allure Report requiere Java, consulta las instrucciones de instalación.
Asegúrate de que tu proyecto utilice:
- PHP versión 8.1, 8.2 o 8.3,
- PHPUnit versión 10.
Añade
allure-framework/allure-phpunit
a las dependencias de desarrollo de tu proyecto:plainphp composer.phar require allure-framework/allure-phpunit --dev
Habilita la extensión Allure para PHPUnit a través de una etiqueta
<bootstrap>
enphpunit.xml
. En el parámetroconfig
, especifica una ruta donde pondrás el archivo de configuración para Allure PHPUnit. Por ejemplo:xml<?xml version="1.0" encoding="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.0/phpunit.xsd"> <extensions> <bootstrap class="Qameta\Allure\PHPUnit\AllureExtension"> <parameter name="config" value="config/allure.config.php"/> </bootstrap> </extensions> </phpunit>
Crea un archivo de configuración de Allure PHPUnit en la ubicación especificada (
config/allure.config.php
en el ejemplo anterior). El archivo debe devolver un array asociativo que contenga opciones de configuración. Por ejemplo:php<?php return [ 'outputDirectory' => 'build/allure-results', ];
2. Ejecuta las pruebas
Ejecuta tus pruebas de PHPUnit de la misma manera en que las ejecutarías normalmente. Por ejemplo:
vendor/bin/phpunit
Esto guardará los datos necesarios en build/allure-results
u otra carpeta, según la configuración de outputDirectory
. Si la carpeta ya existe, los nuevos archivos se agregarán a los existentes, de modo 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 se puede hacer con uno de dos comandos:
allure generate
procesa los resultados de las pruebas y guarda un informe HTML en la carpetaallure-report
. Para ver el informe, usa el comandoallure open
.Usa este comando si necesitas guardar el informe para referencia futura o para compartirlo con colegas.
allure serve
crea el mismo informe queallure generate
, pero lo coloca en una carpeta temporal e inicia un servidor web local configurado para mostrar el contenido de esa carpeta. Luego, el comando abre automáticamente la página principal del informe en un navegador web.Usa este comando si necesitas ver el informe por ti mismo y no necesitas guardarlo.
Escribir pruebas
El adaptador Allure PHPUnit extiende las características estándar de informes de PHPUnit proporcionando capacidades adicionales para crear pruebas más informativas y estructuradas. Esta sección destaca las mejoras clave que pueden ser utilizadas:
- Anotación de Metadatos: Mejora los informes de pruebas con descripciones, enlaces y otros metadatos.
- Organización de Pruebas: Estructura tus pruebas en jerarquías claras para una mejor legibilidad y organización.
- División en Pasos: Divide las pruebas en pasos de prueba más pequeños para facilitar la comprensión y el mantenimiento.
- Pruebas Parametrizadas: Describe claramente los parámetros de las pruebas parametrizadas para especificar diferentes escenarios.
- Archivos Adjuntos: Captura automáticamente capturas de pantalla y otros archivos durante la ejecución de la prueba.
- Detalles del Entorno: Incluye información completa sobre el entorno para acompañar el informe de la prueba.
En la mayoría de los casos, Allure PHPUnit proporciona dos formas diferentes de usar una característica: la API de Atributos y la API en Tiempo de Ejecución.
API de Atributos: agrega un atributo PHP a un método de prueba o a toda una clase para agregar ciertos datos al resultado de la prueba. Cuando se utiliza este enfoque, se garantiza que los datos se agreguen independientemente de cómo se ejecute la prueba.
API en Tiempo de Ejecución: usa las funciones de Allure para agregar ciertos datos al resultado de la prueba durante su ejecución. Este enfoque permite construir los datos dinámicamente.
Ten en cuenta que se recomienda llamar a las funciones de Allure lo más cerca posible del comienzo de la prueba. De esta manera, los datos se agregarán incluso si la prueba falla al principio.
Especificar descripción, enlaces y otros metadatos
Hay muchos metadatos que puedes agregar a cada prueba para que aparezcan en el informe. Consulta la referencia para más detalles.
use PHPUnit\Framework\TestCase;
use Qameta\Allure\Attribute\Description;
use Qameta\Allure\Attribute\DisplayName;
use Qameta\Allure\Attribute\Issue;
use Qameta\Allure\Attribute\Link;
use Qameta\Allure\Attribute\Owner;
use Qameta\Allure\Attribute\Severity;
use Qameta\Allure\Attribute\TmsLink;
final class TestMyWebsite extends TestCase
{
#[DisplayName('Test Labels')]
#[Description('This test attempts to create a label with specified title.')]
#[Severity(Severity::CRITICAL)]
#[Owner('John Doe')]
#[Link('My Website', 'https://example.com/')]
#[Issue('UI-123')]
#[TmsLink('TMS-456')]
public function testLabels()
{
// ...
}
}
use PHPUnit\Framework\TestCase;
use Qameta\Allure\Allure;
use Qameta\Allure\Model\Severity;
final class TestMyWebsite extends TestCase
{
public function testLabels()
{
Allure::displayName('Test Labels');
Allure::description('This test attempts to create a label with specified title.');
Allure::severity(Severity::critical());
Allure::owner('John Doe');
Allure::link('My Website', 'https://example.com/');
Allure::issue('UI-123');
Allure::tms('TMS-456');
// ...
}
}
Organizar pruebas
Como se describe en Mejorar la navegación en tu informe de prueba, Allure admite varias formas de organizar las pruebas en estructuras jerárquicas. Allure PHPUnit proporciona la API para asignar los campos relevantes a las pruebas, ya sea añadiendo atributos o “dinámicamente” (igual que para los campos de metadatos).
Para especificar la ubicación de una prueba en la jerarquía basada en el comportamiento:
use PHPUnit\Framework\TestCase;
use Qameta\Allure\Attribute\Epic;
use Qameta\Allure\Attribute\Feature;
use Qameta\Allure\Attribute\Story;
final class TestMyWebsite extends TestCase
{
#[Epic('Web interface')]
#[Feature('Essential features')]
#[Story('Labels')]
public function testLabels()
{
// ...
}
}
use PHPUnit\Framework\TestCase;
use Qameta\Allure\Allure;
final class TestMyWebsite extends TestCase
{
public function testLabels()
{
Allure::epic('Web interface');
Allure::feature('Essential features');
Allure::story('Labels');
// ...
}
}
Para especificar la ubicación de una prueba en la jerarquía basada en la suite:
use PHPUnit\Framework\TestCase;
use Qameta\Allure\Attribute\ParentSuite;
use Qameta\Allure\Attribute\SubSuite;
use Qameta\Allure\Attribute\Suite;
final class TestMyWebsite extends TestCase
{
#[ParentSuite('Web interface')]
#[Suite('Essential features')]
#[SubSuite('Labels')]
public function testLabels()
{
// ...
}
}
use PHPUnit\Framework\TestCase;
use Qameta\Allure\Allure;
final class TestMyWebsite extends TestCase
{
public function testLabels()
{
Allure::parentSuite('Web interface');
Allure::suite('Essential features');
Allure::subSuite('Labels');
// ...
}
}
Dividir una prueba en pasos
Allure PHPUnit proporciona tres formas de crear pasos y sub-pasos: “pasos basados en métodos”, “pasos lambda” y “pasos no operativos”, consulta la referencia.
use PHPUnit\Framework\TestCase;
use Qameta\Allure\Allure;
use Qameta\Allure\Attribute\DisplayName;
use Qameta\Allure\StepContextInterface;
final class TestMyWebsite extends TestCase
{
public function testLabels()
{
Allure::runStep([$this, 'logIn']);
Allure::runStep([$this, 'createLabel']);
Allure::runStep([$this, 'checkThatLabelExists']);
}
#[DisplayName('Log in')]
function logIn(StepContextInterface $context)
{
$context->parameter('Email', '[email protected]');
$context->parameter('Password', 'qwerty');
// ...
}
#[DisplayName('Create label')]
function createLabel(StepContextInterface $context)
{
$context->parameter('Label name', 'My Label');
// ...
}
#[DisplayName('Check that label exists')]
function checkThatLabelExists(StepContextInterface $context)
{
$context->parameter('Label name', 'My Label');
// ...
}
}
use PHPUnit\Framework\TestCase;
use Qameta\Allure\Allure;
use Qameta\Allure\StepContextInterface;
final class TestMyWebsite extends TestCase
{
public function testLabels()
{
Allure::runStep(function (StepContextInterface $context) {
$context->name('Log in');
$context->parameter('Email', '[email protected]');
$context->parameter('Password', 'qwerty');
// ...
});
Allure::runStep(function (StepContextInterface $context) {
$context->name('Create label');
$context->parameter('Label name', 'My Label');
// ...
});
Allure::runStep(function (StepContextInterface $context) {
$context->name('Check that label exists');
$context->parameter('Label name', 'My Label');
// ...
});
}
}
use PHPUnit\Framework\TestCase;
use Qameta\Allure\Allure;
final class TestMyWebsite extends TestCase
{
public function testLabels()
{
// ...
Allure::addStep('Log in');
// ...
Allure::addStep('Create label');
// ...
Allure::addStep('Check that label exists');
}
}
Describir pruebas parametrizadas
Si usas el patrón de pruebas parametrizadas, llama a la función Allure::parameter()
para agregar los parámetros al informe de pruebas, consulta la referencia.
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
use Qameta\Allure\Allure;
final class TestMyWebsite extends TestCase
{
public static function credentialsProvider()
{
return [
['johndoe', 'qwerty'],
['[email protected]', 'qwerty'],
];
}
#[DataProvider('credentialsProvider')]
public function testAuthentication(string $login, string $password)
{
Allure::parameter('login', $login);
Allure::parameter('password', $password);
// ...
}
}
use PHPUnit\Framework\TestCase;
use Qameta\Allure\Allure;
final class TestMyWebsite extends TestCase
{
public function testAuthenticationWithUsername()
{
Allure::parameter('login', 'johndoe');
Allure::parameter('password', 'qwerty');
// ...
}
public function testAuthenticationWithEmail()
{
Allure::parameter('login', '[email protected]');
Allure::parameter('password', 'qwerty');
// ...
}
}
Adjuntar capturas de pantalla y otros archivos
Puedes adjuntar todo tipo de archivos a tu informe de Allure. Por ejemplo, una forma popular de hacer que un informe sea más fácil de entender es adjuntar una captura de pantalla de la interfaz de usuario en un punto determinado.
Allure PHPUnit proporciona varias formas de crear un archivo adjunto, tanto de archivos existentes como generados dinámicamente, consulta la referencia.
use PHPUnit\Framework\TestCase;
use Qameta\Allure\Allure;
final class TestMyWebsite extends TestCase
{
public function testLabels()
{
// ...
Allure::attachment('data.txt', 'This is the file content.', 'text/plain');
Allure::attachmentFile('data.txt', '/path/to/image.png', 'image/png');
}
}
Seleccionar pruebas mediante un archivo de plan de pruebas
DANGER
El plan de pruebas actualmente no es compatible con el adaptador Allure PHPUnit.
Información del entorno
Para la página principal del informe, puedes recopilar varias informaciones 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 PHP. Esto puede ayudar al lector futuro a investigar errores que solo se reproducen en algunos entornos.
Para proporcionar información sobre el 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 diferentes pruebas, considera usar Pruebas parametrizadas.