Comprendre Robot Framework en 5 minutes

par Eva Maciejko, développeuse Web Full-Stack et membre du collectif Gologic.

L’automatisation de tests est le processus par lequel un logiciel indépendant contrôle l’exécution de tests sur une application donnée. On automatise ainsi des tâches répétitives mais nécessaires pour assurer la qualité de l’application. L’automatisation des tests est absolument essentielle pour la livraison continue et les tests continus[1]. Au fur et à mesure que l’application est développée, les tests fonctionnels permettent de s’assurer que les fonctionnalités respectent les exigences du devis logiciel. Par ailleurs, ces tests peuvent être roulés à nouveau plus tard dans une suite de régression, lorsque du code est modifié et pourrait affecter certaines fonctionnalités.

Cet article présente les connaissances de base pour utiliser Robot Framework afin d’automatiser des tests sur une application web simple. Le site web officiel de Robot Framework est source d’une tonne d’information utile (http://robotframework.org/#documentation).

Pour installer Robot Framework sur Windows 10[2], suivre ces étapes :

  • Installer Python (à partir de python.org) : ceci devrait aussi installer pip[3]
  • Ajouter le répertoire bin de Python au Path
  • Vérifier l’installation en ouvrant un terminal de commande Windows (cmd) et taper les commandes suivantes pour faire afficher les versions :

python -V

pip -V

  • Ensuite installer le Robot Framework en utilisant pip :

pip install robotframework

  • Pour les tests de la web app, la librarie Selenium est requise :

pip install robotframework-seleniumlibrary

  • La librairie Selenium a besoin des pilotes web (webdrivers) qui doivent alors être installés séparément pour chaque fureteur que l’on souhaite utiliser en test. Pour le fureteur Chrome, télécharger le pilote ici : https://sites.google.com/a/chromium.org/chromedriver/downloads. Il s’agit simplement de décompresser le fichier.exe et le copier dans un répertoire qui est ajouté au Path.

Structure du fichier Robot

Les tests Robot sont scriptés dans un fichier avec l’extension .robot. On crée un répertoire de tests nommé robot et à l’intérieur, deux sous-répertoires : tests et results. Dans le répertoire tests nous allons mettre nos cas de tests, alors là nous créons un fichier nommé simpletest.robot. L’arborescence finale des fichiers est comme ci-dessous :

  • robot
    • tests
      • simpletest.robot
    • results

Dans n’importe que fichier test robot, il y a des sections obligatoires. Les sections sont identifiées par un motif de trois astérisques (***). Par exemple, notre fichier simpletest.robot aura les trois sections suivantes : Settings, Variables et Test Cases.

*** Settings ***

# Ici on inclut les librairies requises

Documentation Test exemple

*** Variables ***

# Ici on définit les variables au besoin

*** Test Cases ***

# Ici on va écrire le script de tests

Un fichier robot peut définir plusieurs cas de tests; on appelle cela une Suite de Tests. Le mot clé Documentation dans la section Settings est utilisé pour décrire brièvement la Suite de Tests.

Exécution démo et rapport de tests

Une des fonctionnalités géniales de Robot Framework est le rapport de résultats de tests auto-généré. Afin de le voir en action, nous définissons deux cas de tests élémentaires dans simpletest.robot:

*** Test Cases ***
# Ici on va écrire le script de tests

Log Hello World
[Documentation]
Simple test hello world
Log hello world!

Log Goodbye
[Documentation]
Simple log goodbye
Log goodbye!

Chacun des tests débute par un nom, qui peut être n’importe quelle séquence de mots séparés par un seul espace. Chaque ligne sous le nom de test doit être indentée pour être considérée comme une instruction. Chaque test peut avoir une métadonnée Description qui décrit le test. Les descriptions de cas de tests et de suite de tests apparaissent dans le rapport de résultats. Finalement, dans cet exemple, chaque script de tests a une seule instruction avec le mot clé Log. Log est un mot clé intégré à Robot Framework. Il est utilisé pour enregistrer un texte dans le rapport. Les mots clés qui composent un test peuvent consister en un ou plusieurs mots, tout comme le nom du test.

NOTE IMPORTANTE : Robot Framework utilise l’approche de script par mots clés, où les tests sont écrits avec des mots clés suivis d’argument(s) au besoin. La syntaxe exige qu’il y ait deux espaces ou plus entre un mot clé et son/ses argument(s). Par exemple, dans le test Log Hello World ci-dessus, il y a deux espaces entre le mot clé “Log” et le message “hello world!”, autrement le framework ne pourrait distinguer le mot clé du reste.

Pour exécuter le test, nous ouvrons un terminal de commande et naviguons jusqu’au répertoire robot.

Nous tapons la commande suivante et faisons Enter :

robot -d results tests\simpletest.robot

L’option -d nous indique dans quel répertoire sauvegarder les résultats. Les tests roulent et passent et les trois fichiers de résultats sont sauvegardés dans le répertoire results : output.xml, log.html et report.html. En ouvrant results\report.html dans un fureteur, nous pouvons visualiser le rapport de tests le plus général.

En cliquant sur un nom de test, on accède au fichier log.html, un suivi détaillé de l’exécution du test. On y remarque la documentation pour la Suite de Tests et chaque cas de test, aussi bien que le mot clé (Log).

Cas de test simple

Visualiser des rapports est amusant, si seulement nous avions vraiment testé quelque chose.

Dans ce cas de test simple, nous allons ouvrir le fureteur web Chrome et accéder un site web qui vend des noms de domaine, faire une recherche de domaine et vérifier les résultats de recherche. Les mots clés utilisés proviennent de la librairie Selenium, aussi nous l’ajoutons dans la section Settings.

*** Settings ***
Documentation
Example test
Library Selenium2Library

*** Test Cases ***
Search Domain
[Documentation]
Simple domain name search
# Open chrome browser at GoDaddy website
Open Browser https://ca.godaddy.com/ chrome
# Wait for the domain input box to appear on page
Wait Until Element Is Visible name=domainToCheck
# Write some wild domain name in input box
Input Text name=domainToCheck supercrocodile
# Click search button
Click Button xpath=//form[@name=”domainsearchform”]//button
# Check exact match found

Wait Until Page Contains Element css=div.exactMatchHeadline

# Close the browser
Close Browser

Notre nouveau cas de test est nommé “Search Domain”.

La plupart des mots clé ici méritent une explication.

  • Open Browser est simple, il ouvre un fureteur donné et accède un URL donné.
  • Wait Until Element Is Visible va faire une pause dans l’exécution jusqu’à ce qu’un élément donné soit visible sur la page. De telles pauses sont nécessaires à cause du temps de chargement de la page.
  • L’argument name=domainToCheck est connu sous le nom de locateur. Un locateur (locator) est l’identifiant d’un élément HTML sur la page web, semblable à un sélecteur CSS. Dans ce cas-ci, on se réfère à un élément <input> dont l’attribut HTML name est “domainToCheck”. La référence de la librairie Selenium[4] est un bon point de départ pour comprendre la syntaxe des locateurs ainsi que les mots clés Selenium.
  • Input Text insère le texte donné (ici “supercrocodile”) dans l’élément identifié par le locateur (ici la boîte de recherche).
  • Click Button va… cliquer sur le bouton identifié par un locateur (ici le bouton soumettre du formulaire de recherche). Cette fois, le locateur commence par xpath=. Plonger dans la syntaxe xpath est au-delà de la portée de cet article. Il suffit de dire que les locateurs peuvent être de différents types : attribute, css, xpath, etc. Ce sont toutes des façons différentes d’identifier des éléments HTML sur une page web. Dépendamment de l’élément, certains locateurs vont produire une notation plus compacte ou seront plus intuitifs à comprendre.
  • Wait Until Page Contains Element va faire une pause dans l’exécution jusqu’à ce qu’un élément HTML donné soit présent dans la page (ici le gros titre « exact match headline »). Ce mot clé est utile lorsque la présence d’un certain élément implique un certain état de l’application web. Dans notre cas, si la recherche de domaine a trouvé une correspondance exacte, un élément <div> de classe exactMatchHeadline va exister dans la page.

Pour exécuter le test, ouvrir le terminal de commande et taper ceci suivi de Enter :

robot -d results tests\simpletest.robot

Le fichier results\log.html montre le détail de chaque mot clé :

Cas de test qui échoue

À des fins de démonstration, tentons de faire échouer le test pour voir ce qu’il y aura dans le rapport. Cherchons un nom de domaine qui est évidemment non-disponible :

*** Test Cases ***
# Here we script the test cases
Search Domain
[Documentation]
Simple domain name search
Open Browser https://ca.godaddy.com/ chrome
Wait Until Element Is Visible name=domainToCheck
Input Text name=domainToCheck google.com
Click Button xpath=//form[@name=”domainsearchform”]//button
Wait Until Page Contains Element css=div.exactMatchHeadline

Close Browser

Les mots clés débutant par Wait utilisent un délai qui expire à un certain point quand l’information attendue ne se trouve pas sur la page. Voir la section[5] sur les délais dans la référence de la librairie Selenium. Dans notre exemple, la recherche pour le domaine “google.com” ne donnera aucun résultat disponible, le gros titre de correspondance exacte (« exactMatchHeadline ») n’existera pas sur la page, le délai du mot clé Wait Until Page Contains Element va expirer et le test va échouer.

Roulons le test :

robot -d results tests\simpletest.robot

En ouvrant le fichier results\log.html, l’échec du test est plutôt bien documenté. En haut du test, un message d’erreur explique ce qui s’est passé, alors que le mot clé en rouge pointe immédiatement vers la source du problème. Le Robot Framework a même pris une capture d’écran afin de montrer l’état de la page lors de l’échec. Super!

Conclusion

Nous n’avons fait qu’effleurer la surface de Robot Framework. Il peut interagir avec beaucoup d’autres interfaces qu’une page web, tel que les APIs http, iOS et Android, les bases de données, etc. Nous avons montré à quel point il est facile de s’initier et d’essayer Robot Framework afin d’obtenir ces magnifiques rapports de tests (gratuits!) qui feront l’envie des gestionnaires.

  1. https://en.wikipedia.org/wiki/Test_automation
  2. Ces étapes sont très similaires sur Linux
  3. pip est un outil pour installer et gérer les librairies Python
  4. http://robotframework.org/Selenium2Library/Selenium2Library.html#Locating%20elements
  5. http://robotframework.org/Selenium2Library/Selenium2Library.html#Timeout
Suivez-nous et partagez

Laisser un commentaire