Contactez-nous

Exemple 3 : Introduction à la création de vos propres keywords utilisateurs (User Keywords)

Découvrez comment créer et utiliser vos propres keywords utilisateurs (User Keywords) dans Robot Framework pour des tests plus lisibles, maintenables et réutilisables. Introduction pratique.

Au-delà des briques : construire avec vos propres keywords utilisateurs

Après avoir exploré les keywords intégrés (`BuiltIn`) et ceux fournis par des librairies externes comme `SeleniumLibrary`, il est temps de découvrir l'une des fonctionnalités les plus puissantes et structurantes de Robot Framework : la capacité de créer vos propres keywords, appelés "User Keywords" (ou keywords utilisateurs). Ces keywords personnalisés vous permettent de regrouper une séquence d'actions et de vérifications sous un nom unique et significatif, apportant abstraction, réutilisabilité et lisibilité à vos scripts de test.

Imaginez les User Keywords comme des fonctions ou des méthodes dans un langage de programmation traditionnel. Ils encapsulent une logique spécifique qui peut être appelée plusieurs fois, avec ou sans arguments, rendant vos cas de test plus concis et plus proches d'un langage métier. Au lieu de répéter de longues suites d'étapes techniques, vous appelez simplement votre keyword utilisateur qui se charge des détails.

Ce chapitre vous introduira aux bases de la création et de l'utilisation des User Keywords. Nous verrons comment les définir, comment leur passer des arguments, et comment ils peuvent transformer radicalement la manière dont vous écrivez et organisez vos tests automatisés.

Définition et structure d'un User Keyword

Les User Keywords sont définis dans la section `*** Keywords ***` d'un fichier de test (`.robot`) ou d'un fichier de ressources (`.resource`). La structure est simple :

1. Le nom du keyword utilisateur : Il doit être descriptif et suivre les conventions de nommage de Robot Framework (les espaces sont permis, la casse est ignorée mais une convention est recommandée, par exemple le Title Case : `Mon Premier Keyword Utilisateur`).

2. Les étapes du keyword : Sur les lignes suivantes, indentées (généralement de 2 ou 4 espaces), vous listez les keywords (BuiltIn, de librairie, ou même d'autres User Keywords) qui composent la logique de votre keyword personnalisé.

Optionnellement, un User Keyword peut avoir :

  • `[Documentation]` : Une description de ce que fait le keyword, ses arguments, etc. Très important pour la maintenabilité.
  • `[Arguments]` : Pour définir les paramètres que le keyword peut accepter. Chaque argument est déclaré avec la syntaxe `${nom_argument}`.
  • `[Return]` : Pour spécifier les valeurs que le keyword retourne à l'appelant (ex: `${valeur1}`, `@{liste_valeurs}`).
  • `[Teardown]` : Un keyword à exécuter à la fin du User Keyword, qu'il réussisse ou échoue (utile pour le nettoyage).
Exemple de définition simple :
*** Settings ***
Library    SeleniumLibrary

*** Variables ***
${URL_LOGIN}      https://the-internet.herokuapp.com/login
${BROWSER}        chrome

*** Test Cases ***
Test Avec Keyword Utilisateur Simple
    Ouvrir Navigateur Et Aller Sur Login Page
    Log    Le keyword utilisateur a été exécuté.
    [Teardown]    Close Browser

*** Keywords ***
Ouvrir Navigateur Et Aller Sur Login Page
    [Documentation]    Ouvre le navigateur spécifié et navigue vers la page de login.
    Open Browser    ${URL_LOGIN}    ${BROWSER}
    Maximize Browser Window
    Page Should Contain    Login Page

Dans cet exemple, `Ouvrir Navigateur Et Aller Sur Login Page` est un User Keyword. Le cas de test `Test Avec Keyword Utilisateur Simple` l'appelle simplement par son nom. La logique d'ouverture du navigateur et de vérification est encapsulée dans le User Keyword.

User Keywords avec arguments et valeurs de retour

La véritable flexibilité des User Keywords se manifeste lorsqu'ils acceptent des arguments et retournent des valeurs. Cela les rend dynamiques et adaptables à différents contextes.

User Keyword avec arguments :

Supposons que nous voulions un keyword pour se connecter à une application, où le nom d'utilisateur et le mot de passe peuvent varier.

*** Settings ***
Library    SeleniumLibrary

*** Variables ***
${URL_LOGIN}      https://the-internet.herokuapp.com/login
${BROWSER}        chrome

*** Test Cases ***
Test de Connexion Valide
    Effectuer Login    tomsmith    SuperSecretPassword!
    Page Should Contain    You logged into a secure area!
    [Teardown]    Close Browser

Test de Connexion Invalide
    Effectuer Login    baduser    badpassword
    Page Should Contain    Your username is invalid!
    [Teardown]    Close Browser

*** Keywords ***
Effectuer Login
    [Arguments]    ${username}    ${password}
    [Documentation]    Ouvre la page de login et tente de se connecter avec les identifiants fournis.
    Open Browser    ${URL_LOGIN}    ${BROWSER}
    Maximize Browser Window
    Page Should Contain Element    id:username    # S'assurer que la page est chargée
    
    Input Text    id:username    ${username}
    Input Text    id:password    ${password}
    Click Button    css:button[type='submit']

Ici, `Effectuer Login` prend deux arguments : `${username}` et `${password}`. Lors de l'appel dans les cas de test, les valeurs `tomsmith`, `SuperSecretPassword!`, etc., sont passées à ces arguments.

User Keyword avec valeur de retour :

Imaginons un keyword qui récupère un texte spécifique d'une page web.

*** Settings ***
Library    SeleniumLibrary

*** Test Cases ***
Récupérer et Vérifier un Message de Bienvenue
    Open Browser    https://the-internet.herokuapp.com/    chrome
    ${message}    Récupérer le Titre Principal de la Page
    Should Be Equal    ${message}    Welcome to the-internet
    Log    Le message récupéré est : "${message}"
    [Teardown]    Close Browser

*** Keywords ***
Récupérer le Titre Principal de la Page
    [Documentation]    Récupère le texte du titre H1 principal de la page.
    [Return]    ${texte_titre}
    Wait Until Page Contains Element    tag:h1    timeout=5s
    ${texte_titre}    Get Text    tag:h1
    RETURN    ${texte_titre}

Dans `Récupérer le Titre Principal de la Page`, nous utilisons `[Return] ${texte_titre}` dans la définition et `RETURN ${texte_titre}` à la fin pour effectivement retourner la valeur. Dans le cas de test, `${message} Récupérer le Titre Principal de la Page` capture cette valeur retournée dans la variable `${message}`.

Vous pouvez retourner plusieurs valeurs, qui seront alors affectées à une variable de liste (`@{ma_liste}`) ou à plusieurs variables scalaires (`${val1} ${val2} Mon Keyword Qui Retourne Deux Choses`).

En créant des User Keywords bien définis, avec des arguments pour la flexibilité et des valeurs de retour pour l'information, vous commencez à construire une librairie de test personnalisée, adaptée à votre application. Cela rend vos tests plus modulaires, plus faciles à lire pour les non-techniciens (si les noms des keywords sont bien choisis), et surtout beaucoup plus simples à maintenir et à faire évoluer.