Guide Utilisateur Robot Framework

Guide Utilisateur Robot Framework

Syntaxe étendue des variables

La syntaxe étendue des variables permet d’accéder aux attributs d’un objet assigné à une variable (par exemple, ${object.attribute}) et même d’appeler ses méthodes (par exemple, ${obj.getName()}). Elle fonctionne aussi bien avec les variables scalaires qu’avec les listes, mais elle est principalement utile avec les premières.

La syntaxe étendue des variables est une fonctionnalité puissante, mais elle doit être utilisée avec précaution. Accéder aux attributs n’est généralement pas un problème, au contraire, car il est souvent préférable d’avoir une variable contenant un objet avec plusieurs attributs plutôt que plusieurs variables distinctes. En revanche, appeler des méthodes, surtout lorsqu’elles sont utilisées avec des arguments, peut rendre les données de test assez compliquées à comprendre. Si cela se produit, il est recommandé de déplacer le code dans une bibliothèque de test.

Les cas d’utilisation les plus courants de la syntaxe étendue des variables sont illustrés dans l’exemple ci-dessous. Supposons tout d’abord que nous disposons du fichier de variables suivant et du cas de test :

*** Variables ***
${VAR}   Robot
@{LIST}  Robot eats Cucumber

Lorsque ces données de test sont exécutées, les mots-clés reçoivent les arguments comme expliqué ci-dessous :

  • KW 1 reçoit la chaîne “Robot”
  • KW 2 reçoit la chaîne “Robot eats Cucumber”
  • KW 3 reçoit la chaîne “two”

La syntaxe étendue des variables est évaluée dans l’ordre suivant :

  1. La variable est recherchée en utilisant le nom complet de la variable. La syntaxe étendue des variables n’est évaluée que si aucune variable correspondante n’est trouvée.
  2. Le nom de la variable de base est créé. Le corps du nom est constitué de tous les caractères après l’ouverture { jusqu’à la première occurrence d’un caractère qui n’est pas un caractère alphanumérique ou un espace. Par exemple, les variables de base ${OBJECT.name} et ${DICTIONARY[2]}) sont respectivement OBJECT et DICTIONARY.
  3. Une variable correspondant au corps est recherchée. S’il n’y a pas de correspondance, une exception est levée et le cas de test échoue.
  4. L’expression à l’intérieur des accolades est évaluée en tant qu’expression Python, de sorte que le nom de la variable de base est remplacé par sa valeur. Si l’évaluation échoue en raison d’une syntaxe incorrecte ou si l’attribut interrogé n’existe pas, une exception est levée et le test échoue.
  5. L’ensemble de la variable étendue est remplacé par la valeur renvoyée par l’évaluation.
À lire aussi  Les obligations des IOBSP envers leurs clients

De nombreux objets Python standard, y compris les chaînes de caractères et les nombres, ont des méthodes qui peuvent être utilisées avec la syntaxe étendue des variables, soit explicitement, soit implicitement. Parfois, cela peut être vraiment utile et réduire la nécessité de définir des variables temporaires, mais il est également facile de l’utiliser de manière excessive et de créer des données de test vraiment obscures. Les exemples suivants montrent quelques utilisations plutôt bonnes.

Notez que même si la fonction abs(nombre) est recommandée plutôt que nombre.abs() dans le code Python normal, l’utilisation de ${abs(nombr) ne fonctionne pas. Cela est dû au fait que le nom de la variable doit être au début de la syntaxe étendue. Utiliser des méthodes xxx dans les données de test de cette manière est déjà un peu discutable, et il est généralement préférable de déplacer ce genre de logique dans les bibliothèques de test.

La syntaxe étendue des variables fonctionne également dans le contexte des variables de liste. Si, par exemple, un objet assigné à une variable ${EXTENDED} possède un attribut attribute qui contient une liste comme valeur, il peut être utilisé comme variable de liste @{EXTENDED.attribute}.