Contactez-nous

Vers des tests plus robustes et organisés

Apprenez à structurer vos tests Robot Framework avec le Page Object Model (POM) simplifié, à utiliser les tags pour une meilleure gestion et à explorer des librairies comme RequestsLibrary pour les APIs.

Elever le niveau de vos tests : structure et maintenabilité

Maintenant que vous savez écrire et exécuter vos premiers tests automatisés avec Robot Framework, il est temps de réfléchir à la manière de les rendre plus robustes, maintenables et mieux organisés. A mesure que le nombre de vos tests augmentera et que les applications que vous testez évolueront, une bonne structure deviendra non pas un luxe, mais une nécessité absolue. Ce chapitre vous introduit à des concepts et techniques clés pour y parvenir.

Nous allons explorer le Page Object Model (POM), une approche de conception qui révolutionne la façon dont vous interagissez avec les interfaces utilisateur dans vos tests. Même dans une version simplifiée, le POM apporte une clarté et une facilité de maintenance considérables. Ensuite, nous nous pencherons sur l'utilisation stratégique des tags, un outil puissant de Robot Framework pour catégoriser, filtrer et gérer l'exécution de vos suites de tests. Enfin, nous ouvrirons la porte à l'exploration d'autres librairies, en prenant l'exemple de `RequestsLibrary` pour les tests d'API, afin d'élargir votre horizon d'automatisation au-delà des interfaces web.

L'objectif est de vous doter des outils méthodologiques pour construire des suites de tests qui non seulement fonctionnent aujourd'hui, mais qui resteront pertinentes et faciles à gérer demain. Ces pratiques sont fondamentales pour assurer la scalabilité de vos efforts d'automatisation et garantir leur valeur à long terme.

Introduction au Page Object Model (POM) simplifié : la clé de la maintenabilité

Le Page Object Model (POM) est un patron de conception largement adopté en automatisation de tests, particulièrement pour les tests d'interface utilisateur. Son principe fondamental est de créer une abstraction des pages de votre application. Chaque page (ou composant significatif) est représentée par un objet (dans Robot Framework, souvent un fichier de ressource contenant des keywords spécifiques à cette page). Ces objets encapsulent les sélecteurs des éléments de la page et les actions possibles sur ces éléments.

Pourquoi adopter le POM ? Les avantages sont multiples :
Maintenabilité accrue : Si un sélecteur d'élément change sur une page, vous ne le modifiez qu'à un seul endroit : dans le fichier ressource correspondant à cette page. Vos cas de tests, qui appellent les keywords de cette page, n'ont pas besoin d'être modifiés.
Lisibilité améliorée : Vos cas de tests deviennent plus descriptifs, se concentrant sur le "quoi" (les actions métier) plutôt que sur le "comment" (les détails d'interaction avec le DOM). Un test pourrait ressembler à `Se connecter avec des identifiants valides` au lieu d'une suite d'appels à `Input Text` et `Click Button`.
Réutilisabilité : Les keywords définis pour une page peuvent être réutilisés dans de nombreux cas de tests.

Dans une approche simplifiée pour Robot Framework, vous pouvez commencer par créer des fichiers de ressources (`.resource`) pour chaque page principale de votre application. Ces fichiers contiendront des keywords utilisateurs qui décrivent les actions possibles sur la page. Par exemple, pour une page de connexion :

*** Settings ***
Library    SeleniumLibrary

*** Variables ***
${URL_LOGIN}    https://example.com/login
${USER_FIELD}   id=username
${PASS_FIELD}   id=password
${LOGIN_BUTTON} id=loginButton

*** Keywords ***
Remplir le champ utilisateur
    [Arguments]    ${username}
    Input Text    ${USER_FIELD}    ${username}

Remplir le champ mot de passe
    [Arguments]    ${password}
    Input Text    ${PASS_FIELD}    ${password}

Cliquer sur le bouton de connexion
    Click Button    ${LOGIN_BUTTON}

Ouvrir la page de connexion
    Go To    ${URL_LOGIN}

Se connecter à l'application
    [Arguments]    ${username}    ${password}
    Ouvrir la page de connexion
    Remplir le champ utilisateur    ${username}
    Remplir le champ mot de passe    ${password}
    Cliquer sur le bouton de connexion

Ensuite, dans votre fichier de test, vous importez cette ressource et utilisez les keywords de haut niveau :

*** Settings ***
Resource    ../Resources/page_login.resource

*** Test Cases ***
Connexion utilisateur valide
    Se connecter à l'application    monuser    monmotdepasse
    Page Should Contain    Bienvenue, monuser!

Cette organisation, même simple, marque un grand pas vers des tests plus professionnels.

Utilisation des tags : organisez et filtrez vos tests efficacement

Les tags dans Robot Framework sont des étiquettes que vous pouvez associer à vos suites de tests ou à des cas de tests individuels. Ils constituent un mécanisme simple mais extrêmement puissant pour organiser, catégoriser et sélectionner les tests à exécuter.

Vous pouvez définir des tags de plusieurs manières :
1. Au niveau de la suite de tests, dans la section `*** Settings ***` avec `Force Tags` (appliqué à tous les tests de la suite) ou `Default Tags` (appliqué si un test n'a pas de tags spécifiques).

*** Settings ***
Force Tags    Regression    FeatureX
Default Tags  Smoke

2. Au niveau d'un cas de test spécifique, en utilisant le paramètre `[Tags]` :
*** Test Cases ***
Mon premier test
    [Tags]    Sanity    P1
    Log    Ce test a les tags Sanity et P1.

Mon second test
    [Tags]    FeatureY
    Log    Ce test a le tag FeatureY et les tags de la suite.

L'intérêt principal des tags réside dans la capacité à filtrer l'exécution des tests. Lors du lancement de Robot Framework en ligne de commande, vous pouvez utiliser les options :
- `--include ` ou `-i ` : Exécute uniquement les tests ayant ce tag.
- `--exclude ` ou `-e ` : Exclut les tests ayant ce tag.
Vous pouvez combiner ces options et utiliser des motifs simples (AND, OR, NOT). Par exemple : `robot --include P1 --exclude Regression tests/` exécutera les tests tagués `P1` mais pas ceux tagués `Regression`.

Les tags sont également très utiles pour l'analyse des rapports. Les rapports HTML générés par Robot Framework permettent de visualiser les statistiques par tag, ce qui aide à identifier rapidement l'état des différentes fonctionnalités ou catégories de tests (par exemple, le pourcentage de tests `Smoke` réussis). Adopter une stratégie de taggage cohérente dès le début de vos projets d'automatisation facilitera grandement leur gestion à long terme.

Exploration d'autres librairies utiles : l'exemple de RequestsLibrary pour les APIs

Robot Framework brille par son extensibilité grâce à un vaste écosystème de librairies. Si `SeleniumLibrary` est incontournable pour les tests d'interfaces web, de nombreuses autres librairies peuvent enrichir vos capacités d'automatisation. Savoir les identifier et les utiliser est une compétence clé pour devenir un automaticien polyvalent.

Une librairie particulièrement utile est `RequestsLibrary`, conçue pour tester les APIs REST (et autres services HTTP). Dans le contexte moderne du développement logiciel, où les microservices et les APIs sont omniprésents, pouvoir automatiser les tests d'API est crucial. `RequestsLibrary` simplifie grandement cette tâche.

Pour l'utiliser, vous devez d'abord l'installer (`pip install robotframework-requests`) puis l'importer dans vos tests :

*** Settings ***
Library    RequestsLibrary
Library    Collections    # Utile pour manipuler les dictionnaires JSON

*** Variables ***
${BASE_URL}    https://jsonplaceholder.typicode.com

*** Test Cases ***
Vérifier la récupération d'un utilisateur
    Create Session    jsonplaceholder    ${BASE_URL}
    ${response}=    GET On Session    jsonplaceholder    /users/1
    Should Be Equal As Strings    ${response.status_code}    200
    ${json_response}=    To JSON    ${response.content}
    Dictionary Should Contain Item    ${json_response}    username    Bret

Créer un nouveau post
    Create Session    jsonplaceholder    ${BASE_URL}
    &{headers}=    Create Dictionary    Content-Type=application/json
    &{data}=       Create Dictionary    title=foo    body=bar    userId=1
    ${response}=    POST On Session    jsonplaceholder    /posts    json=${data}    headers=${headers}
    Should Be Equal As Strings    ${response.status_code}    201
    ${json_response}=    To JSON    ${response.content}
    Dictionary Should Contain Item    ${json_response}    title    foo

Cet exemple montre comment effectuer des requêtes GET et POST, et vérifier les codes de statut ainsi que le contenu des réponses. `RequestsLibrary` offre de nombreux autres keywords pour gérer les sessions, les headers, les cookies, l'authentification, etc.

Au-delà de `RequestsLibrary`, explorez d'autres librairies en fonction de vos besoins : `DatabaseLibrary` pour interagir avec des bases de données, `AppiumLibrary` pour les applications mobiles, `FlaUILibrary` (via un remote server) pour les applications de bureau Windows, et bien d'autres. La documentation de Robot Framework et les ressources communautaires sont d'excellents points de départ pour découvrir ces outils et étendre continuellement le périmètre de vos automatisations.