Génération de rapports de tests avancés avec Allure-Python

L'écosystème Python propose plusieurs frameworks de tests comme Pytest, Unittest ou Nose. Pour transformer les résultats bruts de ces tests en rapports visuels, interactifs et détaillés, l'outil de référence est Allure-Python. Ce framework permet de structurer les résultats de tests avec des métadonnées enrichies, facilitant ainsi l'analyse des échecs et la communication avec les parties prenantes.

Installation et Prérequis

Comme Allure est basé sur Java pour la génération du rendu final, assurez-vous qu'un environnement JRE ou JDK est installé sur votre machine. Ensuite, installez le plugin correspondant à votre moteur de test via pip :

# Pour les utilisateurs de Pytest (recommandé)
pip install allure-pytest

# Pour Unittest
pip install allure-unittest

Configuration de l'exécution

Avec Pytest, l'intégration est immédiate. Il suffit de spécifier le dossier de destination des données temporaires lors du lancement de la commande :

pytest --alluredir=rapport_brut

Pour Unittest, l'enregistrement du plugin doit être explicite dans votre script de lancement :

import allure_unittest
from allure_commons.lifecycle import ALLURE_LIFECYCLE

# Enregistrement du plugin pour intercepter les événements de test
ALLURE_LIFECYCLE.plugin_manager.register(allure_unittest.AllureUnittest)

Enrichissement des métadonnées via décorateurs

Allure utilise des décorateurs pour ajouter du contexte métier et technique aux rapprots.

1. Documentation et Titres

Le décorateur @allure.title remplace le nom de la fonction par un titre lisible, tandis que @allure.description permet de détailler le scénario.

@allure.title("Vérification de la création de compte")
@allure.description("""
Ce test valide que l'inscription d'un nouvel utilisateur 
fonctionne correctement avec une adresse email valide et 
un mot de passe complexe.
""")
def test_inscription_nouveau_client():
    pass

2. Organisation Hiérarchique

Les annotations @allure.feature et @allure.story permettent de classer les tests selon une structure de type "Feature -> User Story" dans le rapport final.

@allure.feature("Gestion du Panier")
class TestPanier:
    
    @allure.story("Ajout d'article")
    def test_ajouter_produit_au_panier(self):
        pass

    @allure.story("Suppression d'article")
    def test_retirer_produit_du_panier(self):
        pass

3. Niveaux de Sévérité

Vous pouvez prioriser vos tests avec @allure.severity. Les niveaux disponibles incluent blocker, critical, normal, minor, et trivial.

@allure.severity(allure.severity_level.CRITICAL)
def test_processus_paiement_cb():
    # Test critique pour le business
    pass

Gestion des étapes et captures d'écran

La granularité d'un rapport Allure dépend de l'utilisation des étapes (steps) et des pièces jointes (attachments).

Étapes de test dynamiques

Utilisez allure.step pour segmenter la logique interne d'une fonction de test.

def test_recherche_produit():
    with allure.step("Saisie du mot-clé 'Smartphone' dans la barre de recherche"):
        # Logique de saisie
        pass
    
    with allure.step("Validation et vérification des résultats"):
        # Logique d'assertion
        assert True

Ajout de pièces jointes

Il est possible d'attacher des fichiers (logs, JSON, images) au rapport, ce qui est crucial lors d'un échec.

def test_api_reponse():
    donnees_reçues = {"id": 101, "status": "success"}
    allure.attach(str(donnees_reçues), name="Reponse_JSON", attachment_type=allure.attachment_type.JSON)
    
    # Capture d'écran (exemple avec Selenium/Playwright)
    # allure.attach(driver.get_screenshot_as_png(), name="Erreur_Visuelle", attachment_type=allure.attachment_type.PNG)

Génération et visualisation du rapport

Une fois les tests terminés, les fichiers dans rapport_brut ne sont pas lisibles directement. Vous devez utiliser l'outil en ligne de commande Allure pour compiler le rapport HTML.

Visualisation temporaire :

allure serve rapport_brut

Cette commande lance un serveur local et ouvre automatiquement votre navigateur pour affichre les statistiques et les graphiques.

Génération d'un rapport statique :

allure generate rapport_brut -o rapport_final --clean

Le dossier rapport_final contiendra alors un site web statique consultable via n'importe quel navigateur (nécessite souvent un serveur web pour les accès fichiers locaux).

Fonctionnalités Supplémentaires

  • Liens externes : Liez vos tests à des tickets JIRA ou de la documentation avec @allure.link("http://jira.com/TICKET-1", name="TICKET-1").
  • Environnement : Créez un fichier environment.properties dans votre dossier de résultats pour inclure des informations sur l'OS, la version de l'application ou l'URL du serveur de test dans le rapport.
  • Historique : En conservant le dossier history des générations précédentes, Allure affiche automatiquement les tendances d'exécution (graphiques de succès/échec au fil du temps).

Étiquettes: Python allure-report pytest automated-testing quality-assurance

Publié le 28 juin à 20h57