Personnalisation dynamique des rapports Allure pour afficher les noms de modules et les titres des cas de test

Dans le contexte des tests automatisés pilotés par des fichiers Excel, il est essentiel d'afficher dyanmiquement les noms de modules et les titres des cas de test dans les rapports Allure pour améliorer la lisibilité. La bibliothèque Allure offre des méthodes flexibles pour personnaliser ces éléments en cours d'exécution.

Pour cela, on peut utiliser les fonctions dynamiques d'Allure telles que :

  • allure.dynamic.feature
  • allure.dynamic.story
  • allure.dynamic.title
  • allure.dynamic.description

Ces méthodes permettent de mettre à jour les métadonnées des tests de manière programmatique, ce qui est particulièrement utile lors de la lecture des données depuis des sources externes comme Excel.

Première méthode : utilisation de allure.dynamic pour la mise à jour dynamique

En utilisant la paramétrisation avec pytest, on peut ajuster les titres des cas de test en ajoutant une ligne de code. Par exemple, si les noms de feuilles Excel représentent les modules et les noms de cas les titres, on peut les récupérer et les appliquer dynamiquement.

Voici un exemple de code modifié, avec des noms de variables et une structure différents :

import allure
import pytest
from util import excel_reader

# Lire les données depuis un fichier Excel
test_data_list = excel_reader.read_from_excel(file_path='chemin/vers/fichier.xlsx', sheet_name='feuille1')

@allure.epic('Projet principal')
@allure.feature('Module de connexion')  # Défini statiquement pour le contexte
@pytest.mark.parametrize('test_case', test_data_list)
def test_connexion(test_case):
    # Récupérer le titre dynamique depuis les données
    dynamic_title = test_case.get('case_name', 'Titre par défaut')
    allure.dynamic.title(dynamic_title)
    
    with allure.step('Saisir le nom d\'utilisateur'):
        # Simulation de la saisie
        user = 'test_user'
    
    with allure.step('Saisir le mot de passe'):
        password = 'test_pass'
    
    with allure.step('Cliquer sur le bouton de connexion'):
        # Logique de clic simulée
        pass
    
    with allure.step('Vérifier la connexion'):
        assert user != password, 'L\'utilisateur et le mot de passe doivent différer'

Ici, la fonction allure.dynamic.title() met à jour le titre du test avec la valeur extraite des données Excel, améliorant ainsi la clarté du rapport.

De plus, allure.dynamic prend en charge d'autres attributs comme :

Méthode Effet Équivalent statique avec pytest
feature Nom du module de test @pytest.mark.feature
story Scénario fonctionnel testé @pytest.mark.story
title Titre du cas de test @allure.title
description Description détaillée du test @allure.description

Deuxième méthode : paramétrisation avec @allure.title

Lors de l'utilisation de la paramétrisation, on peut direcetment intégrer des variables dans les titres via des placeholders. Par exemple :

import pytest
import allure

@allure.title("Test paramétré : ajout de {premier_nombre} et {deuxieme_nombre}")
@pytest.mark.parametrize('premier_nombre,deuxieme_nombre,resultat_attendu', [
    (2, 2, 4),
    (1, 2, 3)
])
def test_addition(premier_nombre, deuxieme_nombre, resultat_attendu):
    assert premier_nombre + deuxieme_nombre == resultat_attendu

Alternativement, on peut utiliser allure.dynamic dans le corps du test pour personnaliser le titre en fonction des résultats ou des données, comme illustré dans l'exemple suivant avec des noms modifiés :

import pytest
import allure

def effectuer_connexion(identifiant, mot_de_passe):
    '''Simule une opération de connexion.'''
    print(f"Saisie de l'identifiant : {identifiant}")
    print(f"Saisie du mot de passe : {mot_de_passe}")
    return {"code": 0, "message": "succès!"}

# Jeux de données pour les tests
cas_de_test = [
    ({"identifiant": "utilisateur1", "mot_de_passe": "secret123"}, "succès!", "Connexion avec des identifiants valides"),
    ({"identifiant": "utilisateur2", "mot_de_passe": "incorrect"}, "échec!", "Connexion avec un mot de passe erroné"),
]

@allure.story("Scénarios de connexion")
@pytest.mark.parametrize("entree_test,attendu,titre_dynamique", cas_de_test)
def test_connexion_dynamique(entree_test, attendu, titre_dynamique):
    '''Teste la connexion avec des données paramétrées.'''
    resultat = effectuer_connexion(entree_test["identifiant"], entree_test["mot_de_passe"])
    assert resultat["message"] == attendu
    allure.dynamic.title(titre_dynamique)

Cette approche permet de générer des titres pertinents pour chaque cas de test, basés sur les données fournies.

Optimisation des rapports : masquer les détails de paramétrisation

Dans les rapports Allure, les paramètres de test sont affichés par défaut, ce qui peut encombrer l'affichage. Pour y remédier, on peut modifier le fichier listener.py du package allure-pytest. Il s'agit de localiser le fichier dans le répertoire d'installation de Python (par exemple, sous Linux : /usr/local/lib/python3.x/site-packages/allure_pytest/listener.py) et d'ajuster la ligne qui étend les paramètres du test en la définissant sur une liste vide. Cela supprime l'affichage des paramètres bruts dans le rapport, simplifiant ainsi la présentation.

En appliquant ces techniques, on obtient des rapports Allure plus lisibles et adoptés aux besoins spécifiques des projets de test automatisé.

Étiquettes: Allure pytest Python Excel test-automation

Publié le 10 juillet à 07h36