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é.