Beruflich Dokumente
Kultur Dokumente
l'utilisateur
Version 3.0.4
Copyright © 2008-2015 Nokia Networks
Copyright © 2016- Robot Framework Foundation
Sous licence Creative Commons Attribution 3.0 Unported licence
1 Pour commencer
o 1.1 Introduction
o 1.2 Copyright et licence
o 1.3 Instructions d'installation
o 1.4 Démonstrations
2 Création de données de test
o 2.1 Syntaxe des données de test
o 2.2 Création de cas de test
o 2.3 Création de suites de tests
o 2.4 Utilisation des bibliothèques de tests
o 2.5 Variables
o 2.6 Création de mots-clés utilisateur
o 2.7 Fichiers de ressources et variables
o 2.8 Fonctions avancées
3 Exécution des cas de test
o 3.1 Utilisation de base
o 3.2 Exécution du test
o 3.3 Résultats du post-traitement
o 3.4 Configuration de l'exécution
o 3.5 sorties créées
4 Extension du cadre du robot
o 4.1 Créer des bibliothèques de tests
o 4.2 Interface de bibliothèque distante
o 4.3 Interface auditeur
o 4.4 Extension du pot du cadre robot
5 outils de support
o 5.1 Outil de documentation de la bibliothèque (Libdoc)
o 5.2 Outil de documentation des données de test (Testdoc)
o 5.3 Outil de nettoyage des données de test (Tidy)
o 5.4 Outils externes
6 annexes
o 6.1 Tous les paramètres disponibles dans les données de test
o 6.2 Toutes les options de ligne de commande
o 6.3 Modèles de données de test
o 6.4 Formatage de la documentation
o 6.5 Format de l'heure
o 6.6 Arguments booléens
o 6.7 API interne
1 Pour commencer
1.1 Introduction
1.2 Copyright et licence
1.3 Instructions d'installation
1.4 Démonstrations
1.1 Introduction
Robot Framework est une infrastructure d'automatisation des tests basée sur des
mots clés et extensible, basée sur Python, destinée aux tests d'acceptation de bout
en bout et au développement basé sur les tests d'acceptation (ATDD). Il peut être
utilisé pour tester des applications distribuées et hétérogènes, où la vérification
nécessite de toucher plusieurs technologies et interfaces.
Robot Framework est un logiciel open source publié sous la licence Apache 2.0 . Son
développement est sponsorisé par la Robot Framework Foundation .
Les données de test sont dans un format tabulaire simple et facile à éditer. Lorsque
Robot Framework est démarré, il traite les données de test, exécute des scénarios de
test et génère des journaux et des rapports. L'infrastructure principale ne connaît
rien de la cible testée et l'interaction avec celle-ci est gérée par les bibliothèques de
tests . Les bibliothèques peuvent soit utiliser directement les interfaces
d’application, soit utiliser des outils de test de niveau inférieur en tant que pilotes.
1.1.3 Captures d'écran
Les captures d'écran suivantes montrent des exemples de données de test et
des rapports et journaux créés .
Dossier de test
Rapports et journaux
Listes de diffusion
Il existe plusieurs listes de diffusion Robot Framework où demander et rechercher
plus d'informations. Les archives de la liste de diffusion sont ouvertes à tous (y
compris aux moteurs de recherche) et tout le monde peut également rejoindre ces
listes librement. Cependant, seuls les membres de la liste peuvent envoyer des
messages et, pour éviter le spam, les nouveaux utilisateurs sont modérés, ce qui
signifie que le premier message peut prendre un peu de temps. N'ayez pas peur
d'envoyer des questions aux listes de diffusion, mais souvenez-vous de comment
poser des questions de manière intelligente .
robotsframework-users
Discussion générale sur tous les problèmes liés à Robot Framework. Des
questions et des problèmes peuvent être envoyés à cette liste. Utilisé aussi
pour le partage d'informations pour tous les utilisateurs.
robotframework-annonce
Une liste de diffusion réservée aux annonces où seuls les modérateurs
peuvent envoyer des messages. Toutes les annonces sont également
envoyées à la liste de diffusion robotframework-users, il n'est donc pas
nécessaire de joindre les deux listes.
robotframework-devel
Discussion sur le développement du cadre robotique.
http://www.apache.org/licenses/LICENSE-2.0
1.3.1 Introduction
Robot Framework est implémenté avec Python et prend également en
charge Jython (JVM), IronPython (.NET) et PyPy . Avant d'installer le framework,
une condition préalable évidente est d'installer au moins un de ces interprètes.
Les différentes manières d'installer Robot Framework lui-même sont énumérées ci-
dessous et expliquées plus en détail dans les sections suivantes.
Remarque
Avant Robot Framework 3.0, il existait également des programmes d'installation Windows
distincts pour les versions Python 32 bits et 64 bits. Étant donné que Python 2.7.9 et les
versions plus récentes contiennent pip sur Windows et que Python 3 aurait eu besoin de deux
programmes d’installation supplémentaires, il a été décidé que les programmes d’ installation
Windows ne seraient plus créés . L'approche d'installation recommandée également sous
Windows utilise pip .
Python 2 vs Python 3
Python 2 et Python 3 sont pour la plupart le même langage, mais ils ne sont pas
totalement compatibles les uns avec les autres. La principale différence est que
dans Python 3, toutes les chaînes sont en Unicode alors qu'en Python 2, les chaînes
sont des octets par défaut, mais il existe également plusieurs autres modifications
incompatibles avec les versions précédentes. La dernière version de Python 2 est
Python 2.7, sortie en 2010 et sera supportée jusqu'en 2020. Voir Est-ce que je dois
utiliser Python 2 ou 3? pour plus d'informations sur les différences, la version à
utiliser, comment écrire du code compatible avec les deux versions, etc.
Installation de Python
Sur la plupart des systèmes UNIX, tels que Linux et OS X, Python est installé par
défaut. Si vous êtes sous Windows ou si vous devez installer Python vous-même,
vous pouvez commencer par http://python.org . Vous pouvez y télécharger un
programme d'installation approprié et obtenir plus d'informations sur le processus
d'installation et sur Python en général.
Robot Framework 3.0 prend en charge Python 2.6, 2.7, 3.3 et versions ultérieures,
mais il est prévu de supprimer la prise en charge de Python 2.6 dans RF 3.1 . Si vous
devez utiliser d'anciennes versions, Robot Framework 2.5-2.8 prend en charge
Python 2.5 et Robot Framework 2.0-2.1 prennent en charge Python 2.3 et 2.4.
Pointe
Les derniers installateurs Windows Python permettent de définir PATH dans le cadre de
l'installation. Ceci est désactivé par défaut, mais Add python.exe to Pathpeut être activé à
l' Customize Pythonécran.
Installation de Jython
L'utilisation de bibliothèques de tests implémentées avec Java ou utilisant des outils
Java en interne nécessite l'exécution de Robot Framework sur Jython , qui nécessite
à son tour Java Runtime Environment (JRE) ou Java Development Kit
(JDK). L'installation de l'une de ces distributions Java est hors de portée de ces
instructions, mais vous pouvez trouver plus d'informations, par exemple,
sur http://java.com .
Robot Framework 3.0 prend en charge Jython 2.7 qui nécessite Java 7 ou version
ultérieure. Si des versions plus anciennes de Jython ou de Java sont nécessaires,
Robot Framework 2.5-2.8 prend en charge Jython 2.5 (requiert Java 5 ou version
ultérieure) et Robot Framework 2.0-2.1 prend en charge Jython 2.2.
Après avoir installé Jython, vous souhaiterez probablement configurer PATH pour
que Jython soit lui-même, ainsi que le robot et les scripts runner de rebot exécutables
sur la ligne de commande.
Installation d'IronPython
IronPython permet d'exécuter Robot Framework sur la plate - forme .NET et
d'interagir avec C # et d'autres langages et API .NET. Seul IronPython 2.7 est pris
en charge.
L'installation de PyPy est une procédure simple et vous pouvez trouver les deux
programmes d'installation et les instructions d'installation sur http://pypy.org . Après
l'installation, vous souhaiterez probablement configurer PATH pour rendre PyPy
lui-même, ainsi que le robot et les scripts runner de rebot exécutables sur la ligne de
commande.
Configuration de PATH
La variable d'environnement PATH répertorie les emplacements où sont recherchées
les commandes exécutées dans un système. Pour faciliter l'utilisation de Robot
Framework à partir de l'invite de commandes, il est recommandé d'ajouter les
emplacements où les scripts runner sont installés dans PATH . Il est également souvent
utile d’avoir l’interpréteur lui-même dans PATH pour le rendre facile à exécuter.
Lors de l'utilisation de Python sur des machines de type UNIX, Python lui-même et
les scripts installés devraient être automatiquement intégrés dans PATH et ne
nécessiter aucune action supplémentaire. Sous Windows et avec d'autres
interpréteurs, le PATH doit être configuré séparément.
Pointe
Les derniers installateurs Windows Python permettent de définir PATH dans le cadre de
l'installation. Ceci est désactivé par défaut, mais Add python.exe to Pathpeut être activé à
l' Customize Pythonécran. Il ajoutera le répertoire d'installation Python et
le répertoire Scripts au PATH .
Sous Windows, vous pouvez configurer PATH en suivant les étapes ci-
dessous. Notez que les noms de paramètres exacts peuvent être différents sur
différentes versions de Windows, mais l'approche de base doit toujours être la
même.
1. Ouvrir Control Panel > System > Advanced > Environment Variables. Il y
a User variableset System variables, et la différence entre eux, c'est que les
variables utilisateur n'affectent que les utilisateurs actuels, alors que les
variables système affectent tous les utilisateurs.
2. Pour éditer une valeur PATH existante , sélectionnez Editet
ajoutez ;<InstallationDir>;<ScriptsDir>à la fin de la valeur (par
exemple ;C:\Python27;C:\Python27\Scripts). Notez que les points-virgules
( ;) sont importants car ils séparent les différentes entrées. Pour ajouter une
nouvelle valeur PATH , sélectionnez Newet définissez le nom et la valeur, cette
fois sans le point-virgule en tête.
3. Quittez la boîte de dialogue Okpour enregistrer les modifications.
4. Démarrez une nouvelle invite de commande pour que les modifications
prennent effet.
Notez également que vous ne devez pas ajouter de guillemets autour des répertoires
que vous ajoutez dans PATH (par exemple "C:\Python27\Scripts"). Les
citations peuvent causer des problèmes avec les programmes Python et elles ne sont pas
nécessaires dans ce contexte même si le chemin du répertoire contient des espaces.
Sur les systèmes de type UNIX, vous devez généralement modifier un fichier de
configuration spécifique au système ou à l'utilisateur. Le fichier à modifier et la
manière dont il dépend, et vous devez consulter la documentation de votre système
d'exploitation pour plus de détails.
Définition de https_proxy
Si vous installez avec pip et êtes derrière un proxy, vous devez définir la variable
d'environnement https_proxy . Il est nécessaire à la fois lors de l'installation de pip
lui-même et lors de son utilisation pour installer Robot Framework et d'autres
packages Python.
Remarque
Seul Robot Framework 2.7 et plus récent peut être installé à l'aide de pip. Si vous avez besoin
d'une ancienne version, vous devez utiliser d'autres méthodes d'installation.
Si vous avez plusieurs versions de Python avec pip installé, la version utilisée
lorsque la commande pip est exécutée dépend du premier pip dans la variable
PATH . Une alternative consiste à exécuter directement le module pip en utilisant la
version Python sélectionnée:
python -m pip installe robotframework
python3 -m pip installe robotframework
Jython installe son pip dans le répertoire <JythonInstallation> / bin . Est-ce que
courir pip install robotframeworkréellement l'utilise ou peut-être une autre
version de pip dépend de quel pip est le premier dans le PATH . Une alternative
consiste à exécuter directement le module pip en utilisant Jython:
jython -m pip installe robotframework
Si vous avez plusieurs versions de Python avec pip installé, la version utilisée
lorsque la commande pip est exécutée dépend du premier pip dans la variable
PATH . Une autre solution consiste à exécuter directement le module pip
en utilisant PyPy:
pypy -m pip
pypy3-m pip
En utilisant pip
Une fois que vous avez installé pip et que vous avez défini https_proxy si vous êtes
derrière un proxy, l'utilisation de pip sur la ligne de commande est très simple. La
manière la plus simple d’utiliser pip est de le laisser rechercher et télécharger les
paquets qu’il installe à partir de l’ index Python Package Index (PyPI) , mais il peut
également installer les paquets téléchargés séparément à partir de PyPI. Les
utilisations les plus courantes sont indiquées ci-dessous et la documentation
de pip contient plus d'informations et d'exemples.
# Installer la dernière version (ne met pas à jour)
pip installer robotframework
# Désinstaller
pip désinstallation robotframework
Notez que pip 1.4 et versions ultérieures installent uniquement des versions stables
par défaut. Si vous souhaitez installer un candidat alpha, beta ou release, vous
devez soit spécifier la version explicitement, soit utiliser l' option --pre :
# Install 3.0 beta 1
install pip robotframework == 3 .0b1
# Mettre à jour vers la dernière version même s'il s'agit d'une pré-version
pip install --pre --upgrade robotframework
Notez que sous Windows, par défaut, ne recrée pas les scripts de
démarrage robot.bat et rebot.bat si la même version de Robot Framework est installée
plusieurs fois avec la même version de Python. Cela pose principalement des
problèmes lors de l' utilisation d'environnements virtuels , mais il faut également
prendre en compte les installations personnalisées à l'aide de pip. Une solution de
contournement si vous utilisez l' option --no-cache-dir comme pip install --no-
cache-dir robotframework . Il est également possible d'ignorer les scripts de
démarrage et d'utiliser plutôt les commandes python -m robot et python -
m robot.rebot .
Une autre approche pour obtenir le code source est le référentiel GitHub du projet de
clonage directement. Par défaut, vous obtiendrez le dernier code, mais vous pourrez
facilement passer à différentes versions publiées ou à d’autres balises.
Installation
Robot Framework est installé à partir du source en utilisant
le script standard setup.py de Python . Le script se trouve dans le répertoire
contenant les sources et vous pouvez l'exécuter à partir de la ligne de commande en
utilisant l'un des interpréteurs pris en charge:
python setup.py installer
jython setup.py installer
ipy setup.py installer
pypy setup.py installer
Si vous souhaitez post-traiter les sorties à l' aide de Rebot ou utiliser d'autres outils de
support intégrés , vous devez donner le nom de la
commande rebot , libdoc , testdoc ou tidy en premier argument du fichier JAR:
java -jar robotframework-3.0.jar rebot output.xml
java -jar robotframework-3.0.jar liste libdoc MyLibrary
Pour plus d'informations sur les différentes commandes, exécutez le JAR sans
arguments.
1. Obtenez le code source. Tout le code est dans un répertoire (un paquet en
Python) appelé robot . Si vous disposez d'une distribution source ou d'une
vérification du contrôle de version, vous pouvez la trouver dans
le répertoire src , mais vous pouvez également l'obtenir à partir d'une
installation antérieure.
2. Copiez le code source où vous voulez.
3. Décidez comment exécuter les tests .
$ rebot --version
Rebot 3 .0 ( Python 2 .7.10 sur Linux2 )
Si l'exécution des scripts runner échoue avec un message indiquant que la
commande n'est pas trouvée ou reconnue, une première étape est de vérifier
la configuration PATH . Si cela ne vous aide pas, il est conseillé de relire les sections
pertinentes de ces instructions avant de chercher de l'aide sur Internet ou de
demander de l'aide sur la liste de diffusion des utilisateurs de robotframework ou
ailleurs.
Les scripts runner de Robot Framework sont créés et copiés dans un autre
emplacement spécifique à la plate-forme. Lorsque vous utilisez Python sur des
systèmes de type UNIX, ils vont normalement dans / usr / bin ou / usr / local /
bin . Sous Windows et avec Jython et IronPython, les scripts se trouvent
généralement dans le répertoire Scripts ou bin du répertoire d'installation de
l'interpréteur.
1.3.8 Désinstallation
La méthode la plus simple pour désinstaller Robot Framework consiste à
utiliser pip :
pip désinstallation robotframework
Une fonctionnalité intéressante de pip est qu’il peut désinstaller des packages
même s’ils sont installés depuis la source. Si vous n'avez pas de pip disponible ou
si vous avez effectué une installation manuelle sur un emplacement personnalisé,
vous devez rechercher où les fichiers sont installés et les supprimer manuellement.
Si vous avez défini PATH ou configuré l'environnement, vous devez annuler ces
modifications séparément.
Ces deux scripts sont installés dans le cadre de l'installation normale et peuvent être
exécutés directement à partir de la ligne de commande si PATH est défini
correctement. Ils sont implémentés en utilisant Python sauf sur Windows où ils sont
des fichiers batch.
La prise en charge de l' approche robot python -m est une nouvelle fonctionnalité
de Robot Framework 3.0, mais les anciennes versions prennent en charge python -
m robot.run . Ce dernier doit également être utilisé avec Python 2.6.
1.4 Démonstrations
Plusieurs projets de démonstration introduisent Robot Framework et facilitent son
démarrage.
Les cas de test sont créés dans des fichiers de cas de test .
Un fichier de scénario de test crée automatiquement une suite de
tests contenant les scénarios de test dans ce fichier.
Un répertoire contenant des fichiers de cas de test forme une suite de tests de
niveau supérieur. Un tel répertoire de suites de tests comporte des suites
créées à partir de fichiers de scénarios de test en tant que suites de sous-tests.
Un répertoire de suites de tests peut également contenir d'autres répertoires
de suites de tests, et cette structure hiérarchique peut être aussi profondément
imbriquée que nécessaire.
Les répertoires de la suite de tests peuvent avoir un fichier
d’initialisation spécial .
En plus de cela, il y a:
Différents modèles de données de test sont disponibles pour les formats HTML et
TSV afin de faciliter la rédaction de tests.
Remarque
L' extension spéciale .robot avec des fichiers texte brut est prise en charge à partir de Robot
Framework 2.7.6.
Format HTML
Les fichiers HTML prennent en charge le formatage et le texte libre autour des
tables. Cela permet d'ajouter des informations supplémentaires dans les fichiers de
cas de test et de créer des fichiers de cas de test qui ressemblent à des spécifications
de test formelles. Le principal problème avec le format HTML est que l'édition de
ces fichiers à l'aide d'éditeurs de texte normaux n'est pas si simple. Un autre
problème est que HTML ne fonctionne pas aussi bien avec les systèmes de contrôle
de version car les diffs résultant des modifications contiennent de la syntaxe HTML
en plus des modifications apportées aux données de test réelles.
Dans les fichiers HTML, les données de test sont définies dans des tableaux
distincts (voir l'exemple ci-dessous). Robot Framework reconnaît ces tables de
données de test en fonction du texte de leur première cellule. Tout ce qui est en
dehors des tables reconnues est ignoré.
Bûche $ {MESSAGE}
Les données de test dans les fichiers HTML peuvent être éditées avec n'importe
quel éditeur, mais un éditeur graphique, où vous pouvez voir les tables, est
recommandé. RIDE peut lire et écrire des fichiers HTML, mais malheureusement il
perd tout le formatage HTML ainsi que les données possibles en dehors des tables
de tests.
Les références d'entité HTML (par exemple ä) sont prises en charge. De plus,
tout codage peut être utilisé, en supposant qu'il soit spécifié dans le fichier de
données. Les fichiers HTML normaux doivent utiliser l'élément META comme
dans l'exemple ci-dessous:
<meta http-equiv = "Content-Type" content = "text / html; charset =
UTF-8">
Les fichiers XHTML doivent utiliser le préambule XML comme dans cet exemple:
<? xml version = "1.0" encoding = "Big5"?>
Si aucun codage n'est spécifié, Robot Framework utilise ISO-8859-1 par défaut.
Format TSV
Les fichiers TSV peuvent être édités dans des tableurs et, comme la syntaxe est si
simple, ils sont faciles à générer par programmation. Ils sont également assez
faciles à éditer en utilisant des éditeurs de texte normaux et ils fonctionnent bien
dans le contrôle de version, mais le format de texte brut est encore mieux adapté à ces
fins.
Le format TSV peut être utilisé dans les données de test de Robot Framework aux
mêmes fins que HTML. Dans un fichier TSV, toutes les données sont dans une
grande table. Les tables de données de test sont reconnues à partir d'un ou plusieurs
astérisques ( *), suivis d'un nom de table normal et d'un astérisque de fermeture
facultatif. Tout ce qui précède la première table reconnue est ignoré de la même
manière que les données externes aux tables dans les données HTML.
Bûche $ {MESSAGE}
Vous pouvez créer et modifier des fichiers TSV dans n'importe quel tableur, tel que
Microsoft Excel. Sélectionnez le format séparé par des tabulations lorsque vous
enregistrez le fichier et n'oubliez pas de définir l'extension du fichier sur .tsv . Il est
également conseillé de désactiver toutes les corrections automatiques et de
configurer l’outil pour traiter toutes les valeurs du fichier en texte brut.
Les fichiers TSV sont relativement faciles à modifier avec n'importe quel éditeur de
texte, en particulier si l'éditeur prend en charge la séparation visuelle des onglets
des espaces. Le format TSV est également pris en charge par RIDE .
Robot Framework analyse les données TSV en divisant tout le contenu en lignes
puis en lignes en cellules sur la base des caractères tabulaires. Les tableurs
entourent parfois les cellules de guillemets (par exemple "my value") et Robot
Framework les supprime. Les guillemets possibles à l'intérieur des données sont
doublés (par exemple "my ""quoted"" value") et ceci est également géré
correctement. Si vous utilisez un tableur pour créer des données TSV, vous ne
devez pas faire attention à cela, mais si vous créez des données par programmation,
vous devez suivre les mêmes conventions que les feuilles de calcul.
Codage
Les fichiers TSV doivent toujours utiliser le codage UTF-8. Comme l'ASCII est un
sous-ensemble de UTF-8, le format ASCII simple est également supporté
naturellement.
Le format texte brut est techniquement similaire au format TSV, mais le séparateur
entre les cellules est différent. Le format TSV utilise des onglets, mais dans le
format texte brut, vous pouvez utiliser deux ou plusieurs espaces ou un caractère de
canal entouré d'espaces ( | ).
Les tables de données de test doivent comporter un ou plusieurs astérisques avant leur
nom, de la même manière qu'au format TSV. Sinon, les astérisques et les espaces
possibles dans l'en-tête de la table sont ignorés, par exemple, *** Settings
***et *Settingsfonctionnent de la même manière. De même que dans le format
TSV, tout ce qui précède la première table est ignoré.
Dans les fichiers texte, les onglets sont automatiquement convertis en deux
espaces. Cela permet d'utiliser un seul onglet comme séparateur de la même
manière qu'au format TSV. Notez cependant que, dans le format texte brut,
plusieurs onglets sont considérés comme un seul séparateur alors que dans le
format TSV, chaque onglet serait un séparateur.
Un autre test
Devrait être égal $ { MESSAGE } Bonjour tout le monde!
Parce que l'espace est utilisé comme séparateur, toutes les cellules vides doivent
être échappées avec une ${EMPTY}variable ou une barre oblique inverse
unique. Sinon, la gestion des espaces n'est pas différente de celle des autres données
de test, car les espaces de début, de fin et consécutifs doivent toujours être
échappés.
Pointe
Il est recommandé d'utiliser quatre espaces entre les mots-clés et les arguments.
Le plus gros problème du format délimité par des espaces est que la séparation
visuelle des mots-clés des arguments peut être délicate. C'est un problème en
particulier si les mots-clés prennent beaucoup d'arguments et / ou si les arguments
contiennent des espaces. Dans de tels cas, la variante délimitée par un tuyau ou un
espace peut mieux fonctionner car elle rend la limite de la cellule plus visible.
| * Réglage * | * Valeur * |
| Bibliothèque | Système d'exploitation |
| * Variable * | * Valeur * |
| $ { MESSAGE } | Bonjour le monde! |
Un fichier de texte brut peut contenir des données de test dans des formats séparés
uniquement dans l'espace et dans l'espace et dans le canal, mais une seule ligne doit
toujours utiliser le même séparateur. Les lignes séparées par des tuyaux et des
espaces sont reconnues par le tube de début obligatoire, mais le tuyau à la fin de la
ligne est facultatif. Il doit toujours y avoir au moins un espace des deux côtés du
tuyau (sauf au début et à la fin), mais il n'est pas nécessaire d'aligner les tuyaux
autrement que si les données sont plus claires.
Il n'est pas nécessaire d'échapper aux cellules vides (autres que les cellules vides à
la fin ) lorsque vous utilisez le format séparé par canal et espace. La seule chose à
prendre en compte est que les éventuels canaux entourés d'espaces dans les données
de test doivent être échappés avec une barre oblique inverse:
| *** Cas de test *** | | | |
| Tuyau d'échappement | $ { nombre de fichiers } = | Exécuter la
commande | ls -1 * .txt \ | wc -l |
| | Devrait être égal | $ { nombre de fichiers } | 42 |
Edition et encodage
L'un des principaux avantages du format texte brut par rapport à HTML et à TSV
est qu'il est très facile de le modifier à l'aide d'éditeurs de texte normaux. De
nombreux éditeurs et IDE (au moins Eclipse, Emacs, Vim et TextMate) disposent
également de plug-ins prenant en charge la syntaxe en soulignant les données de
test de la structure Robot, ainsi que d'autres fonctionnalités telles que l'achèvement
des mots clés. Le format texte brut est également pris en charge par RIDE .
De même que pour les données de test TSV, les fichiers en texte brut doivent
toujours utiliser le codage UTF-8. En conséquence, les fichiers ASCII sont
également pris en charge.
Extensions reconnues
format reStructuredText
reStructuredText (reST) est une syntaxe de balisage en texte clair facile à lire qui est
couramment utilisée pour la documentation des projets Python (y compris Python
lui-même, ainsi que ce Guide de l'utilisateur). Les documents reST sont le plus
souvent compilés en HTML, mais d'autres formats de sortie sont également pris en
charge.
Lorsque vous utilisez des fichiers reST avec Robot Framework, il existe deux
manières de définir les données de test. Vous pouvez soit utiliser des blocs de code et
définir des cas de test en utilisant le format texte brut ou bien vous pouvez utiliser
des tableaux exactement comme vous le feriez avec le format HTML .
Remarque
Les documents reStructuredText peuvent contenir des exemples de code dans des
blocs de code. Lorsque ces documents sont compilés en HTML ou dans d'autres
formats, les blocs de code sont syntaxiques mis en évidence à l'aide
de Pygments . Dans la norme, les blocs de code reST sont démarrés à l'aide de
la codedirective, mais Sphinx utilise code-block ou à la sourcecodeplace. Le nom du
langage de programmation dans le bloc de code est donné en argument à la
directive. Par exemple, les blocs de code suivants contiennent des exemples Python
et Robot Framework, respectivement:
.. code :: python
.. code :: robotframework
.. code :: robotframework
Un autre test
Devrait être égal $ { MESSAGE } Bonjour tout le monde!
Aussi ce texte est en dehors des blocs de code et ignoré. Bloc supérieur
utilisé
le format de texte brut séparé par des espaces et le bloc ci-dessous
utilise le tube
variante séparée
.. code :: robotframework
Remarque
Echapper à la barre oblique inverse fonctionne normalement dans ce format. Aucun double
échappement n'est nécessaire comme lors de l'utilisation de tables reST.
Remarque
La prise en charge des données de test dans les blocs de code est une nouvelle fonctionnalité
de Robot Framework 2.8.2.
============ ==============================
Définition de la valeur de la valeur
============ ==============================
Système d'exploitation de bibliothèque
============ ==============================
============ ==============================
Valeur de valeur Valeur de valeur
============ ==============================
$ {MESSAGE} Bonjour tout le monde!
============ ==============================
Aussi ce texte est en dehors des tables et ignoré. Les tableaux ci-dessus
sont créés
en utilisant la syntaxe de table simple et le tableau ci-dessous utilise la
table de grille
approche.
Remarque
Les cellules vides dans la première colonne des tables simples doivent être
échappées. L'exemple ci-dessus utilise \ mais ..pourrait également être utilisé.
Remarque
Parce que le caractère barre oblique inverse est un caractère d'échappement dans reST, en
spécifiant une barre oblique inverse afin que Robot Framework puisse voir qu'il doit
s'échapper avec une autre barre oblique inverse, par exemple \\. Par exemple, un nouveau
caractère de ligne doit être écrit comme \\n. Étant donné que la barre oblique inverse est
utilisée pour échapper également dans les données de la structure de robot, la spécification
d'une barre oblique inverse littérale lors de l'utilisation de tables reST nécessite une double
évasion c:\\\\temp.
Générer des fichiers HTML basés sur des fichiers reST chaque fois que les tests
sont exécutés ajoute évidemment un peu de temps. S'il s'agit d'un problème, il peut
être judicieux de convertir les fichiers reST en HTML en utilisant des outils
externes séparément, et de laisser Robot Framework utiliser uniquement les fichiers
générés.
Edition et encodage
Les données de test dans les fichiers reStructuredText peuvent être modifiées avec
n'importe quel éditeur de texte, et de nombreux éditeurs fournissent également une
mise en évidence de la syntaxe automatique. Le format reST n'est cependant pas
pris en charge par RIDE .
Robot Framework nécessite que les fichiers reST contenant des caractères non-
ASCII soient enregistrés en utilisant le codage UTF-8.
À partir de Robot Framework 2.9.2, les erreurs sous le niveau SEVEREsont ignorées
lors de l'exécution de tests pour éviter le bruit sur les directives non standard et
autres balises de ce type. Cela peut également cacher des erreurs réelles, mais elles
peuvent être vues lors du traitement normal des fichiers.
Les Définir des variables pouvant être utilisées ailleurs dans les données de test.
variables
Cas de test Création de scénarios de test à partir des mots clés disponibles.
Mots clés Création de mots-clés utilisateur à partir de mots -clés de niveau inférieur existants
Toutes les tables qui ne commencent pas par un nom de table reconnu dans la
première cellule.
Tout le reste sur la première rangée d'une table en dehors de la première
cellule.
Toutes les données avant le premier tableau. Si le format de données autorise
les données entre les tables, cela est également ignoré.
Toutes les lignes vides, ce qui signifie que ces types de lignes peuvent être
utilisés pour rendre les tableaux plus lisibles.
Toutes les cellules vides à la fin des lignes, sauf si elles sont échappées .
Toutes les barres obliques inverses simples ( \ ) si elles ne sont pas utilisées
pour s'échapper .
Tous les caractères suivant le caractère dièse ( #), lorsqu'il s'agit du premier
caractère d'une cellule. Cela signifie que des marques de hachage peuvent
être utilisées pour saisir des commentaires dans les données de test.
Tout le formatage dans les données de test HTML / reST.
Lorsque Robot Framework ignore certaines données, ces données ne sont pas
disponibles dans les rapports résultants et, de plus, la plupart des outils utilisés avec
Robot Framework les ignorent également. Pour ajouter des informations visibles
dans les sorties de la structure de robot, placez-les dans la documentation ou d'autres
métadonnées de scénarios de test ou de suites, ou connectez-les avec les mots-
clés BuiltIn Log ou Comment .
Manipulation d'espaces
Robot Framework gère les espaces comme ils le sont dans le code source HTML:
Les nouvelles lignes, les retours chariot et les onglets sont convertis en
espaces.
Les espaces de début et de fin dans toutes les cellules sont ignorés.
Plusieurs espaces consécutifs sont regroupés dans un seul espace.
En plus de cela, les espaces insécables sont remplacés par des espaces
normaux. Ceci est fait pour éviter les erreurs difficiles à déboguer lorsqu'un espace
insécable est utilisé accidentellement au lieu d'un espace normal.
Si des espaces de début, de fin ou consécutifs sont nécessaires, ils doivent être
échappés . Les nouvelles lignes, retours chariot, des onglets et des espaces non-
rupture peuvent être créés en utilisant des séquences d'échappement \n , \r, \t, et
, \xA0respectivement.
Échapper
Le caractère d'échappement dans les données de test de Robot Framework est la
barre oblique inverse ( \ ) et les variables
intégrées supplémentaires ${EMPTY}et ${SPACE} peuvent souvent être utilisés pour
s'échapper. Différents mécanismes de fuite sont discutés dans les sections ci-
dessous.
Le caractère barre oblique inverse peut être utilisé pour échapper des caractères
spéciaux afin que leurs valeurs littérales soient utilisées.
Séquences d'échappement
\xhh Caractère avec valeur hexadécimale hh. null byte: \x00, ä: \xE4
Remarque
Toutes les chaînes créées dans les données de test, y compris des caractères tels que \x02,
sont Unicode et doivent être explicitement converties en chaînes d'octets si nécessaire. Cela
peut être fait, par exemple, en utilisant les mots-clés Convertir en octets ou Encoder les
chaînes en octets dans les bibliothèques BuiltIn et String , respectivement, ou avec
un code similaire à Python str(value)ou value.encode('UTF-8')en code.
Remarque
Si des valeurs hexadécimales invalides sont utilisées avec \x, \u ou \Us'échappent, le résultat
final est la valeur d'origine sans le caractère barre oblique inverse. Par exemple, \xAX(pas
hex) et \U00110000(trop grande valeur) résultent avec xAX et U00110000, respectivement. Ce
comportement peut changer à l'avenir, cependant.
Remarque
La variable intégrée ${\n} peut être utilisée si une terminaison de ligne dépendante du
système d'exploitation est nécessaire ( \r\nsous Windows et \nailleurs).
Remarque
Caractère d'espacement éventuel non échappé après le \nest ignoré. Cela signifie que two
lines\nhereet two lines\n heresont équivalents. La raison à cela est de permettre
l'encapsulation de lignes longues contenant des lignes nouvelles lors de l'utilisation du format
HTML, mais la même logique est également utilisée avec d'autres formats. Une exception à
cette règle est que le caractère d'espacement n'est pas ignoré dans la syntaxe de la variable
étendue .
Remarque
\x, \uet les \Uséquences d'échappement sont nouvelles dans Robot Framework 2.8.2.
Si des valeurs vides sont nécessaires comme arguments pour des mots-clés ou
autres, elles doivent souvent être échappées pour les empêcher d'être ignorées . Les
cellules de fin vide doivent être échappées quel que soit le format des données de
test, et lors de l'utilisation du format à espace séparé, toutes les valeurs vides doivent
être échappées.
Les cellules vides peuvent être échappées avec le caractère barre oblique inverse ou
avec la variable intégrée ${EMPTY} . Ce dernier est généralement recommandé car il
est plus facile à comprendre. Une exception à cette recommandation consiste à
échapper les cellules en retrait dans les boucles for avec une barre oblique inverse
lors de l'utilisation du format séparé par des espaces . Tous ces cas sont illustrés dans
les exemples suivants d'abord en HTML, puis dans le format de texte en clair:
Étant donné que les espaces de début, de fin et consécutifs dans les cellules
sont ignorés , ils doivent être échappés s'ils sont nécessaires en tant qu'arguments de
mots-clés ou autres. De la même manière qu'en empêchant d'ignorer les cellules
vides, il est possible de le faire en utilisant le caractère barre oblique inverse ou en
utilisant une variable intégrée ${SPACE} .
De plus, les valeurs des paramètres qui ne prennent qu'une valeur (principalement
des documentations) peuvent être divisées en plusieurs colonnes. Ces valeurs seront
ensuite regroupées avec les espaces lors de l'analyse des données de test. À partir
de Robot Framework 2.7, les métadonnées de documentation et de suite de tests
divisées en plusieurs lignes seront regroupées avec les nouvelles lignes .
Toute la syntaxe décrite ci-dessus est illustrée dans les exemples suivants. Dans les
trois premières tables, les données de test n'ont pas été divisées et les trois suivantes
illustrent le nombre moins élevé de colonnes nécessaires après la division des
données en plusieurs lignes.
$ {var} = Obtenez X 1 2 3 4 5 6
@{LISTE} ce liste a
$ {var} = Obtenez X 1 2
... 3 4
... 5 6
La première colonne de la table de cas de test contient des noms de cas de test. Un
scénario de test commence à partir de la ligne contenant quelque chose dans cette
colonne et continue jusqu'au nom du scénario de test suivant ou à la fin de la
table. C'est une erreur d'avoir quelque chose entre les en-têtes de table et le premier
test.
Remarque
Bien que les noms de cas de test puissent contenir n'importe quel caractère, l'utilisation ?et
surtout *ne sont généralement pas recommandés car ils sont considérés comme des caractères
génériques lors de la sélection des cas de test . Par exemple, si vous essayez d'exécuter
uniquement un test avec le nom Example * like --test 'Example *', vous exécuterez un
test commençant par Example .
[Documentation]
Utilisé pour spécifier une documentation de scénario de test .
[Mots clés]
Utilisé pour le marquage des cas de test .
[Setup] , [Teardown]
Spécifiez la configuration du test et le démontage .
[Modèle]
Spécifie le mot-clé du modèle à utiliser. Le test lui-même ne contiendra que
des données à utiliser comme arguments pour ce mot clé.
[Temps libre]
Utilisé pour définir un délai de test élémentaire .Les délais d'attente sont discutés
dans leur propre section.
Arguments obligatoires
La plupart des mots-clés ont un certain nombre d'arguments qui doivent toujours
être donnés. Dans la documentation du mot-clé, ceci est noté en spécifiant les noms
d'argument séparés par une virgule comme first, second, third. Les noms
d'argument n'ont en fait aucune importance dans ce cas, sauf qu'ils doivent
expliquer ce que fait l'argument, mais il est important d'avoir exactement le même
nombre d'arguments que ceux spécifiés dans la documentation. Utiliser trop peu ou
trop d'arguments entraînera une erreur.
L'utilisation des valeurs par défaut est illustrée par l'exemple ci-dessous qui utilise
le mot clé Create File qui contient des arguments path, content=, encoding=UTF-
8. Essayer de l'utiliser sans aucun argument ou plus de trois arguments ne
fonctionnerait pas.
*** Cas de test ***
Exemple
Créer le fichier $ { TEMPDIR } /empty.txt
Créer le fichier $ { TEMPDIR } /utf-8.txt Hyvä esimerkki
Créer le fichier $ { TEMPDIR } /iso-8859-1.txt Hyvä esimerkki ISO-
8859-1
Nombre variable d'arguments
Il est également possible qu'un mot clé accepte un nombre quelconque
d'arguments. Ces soi-disant varargs peuvent être combinés avec des arguments et
des arguments obligatoires avec des valeurs par défaut, mais ils sont toujours
donnés après eux. Dans la documentation, ils ont un astérisque avant le nom de
l'argument comme *varargs.
Arguments nommés
La syntaxe de l'argument nommé rend l'utilisation des arguments avec des valeurs
par défaut plus flexibles, et permet d'étiqueter explicitement ce que signifie une
valeur d'argument donnée. Les arguments nommés techniquement fonctionnent
exactement comme les arguments des mots-clés en Python.
Syntaxe de base
Lorsque la syntaxe de l'argument nommé est utilisée avec des mots - clés utilisateur ,
les noms d'argument doivent être donnés sans la ${}décoration. Par exemple, le
mot-clé utilisateur avec des arguments ${arg1}=first, ${arg2}=seconddoit être
utilisé comme arg2=override.
Remarque
Avant Robot Framework 2.8, il était impossible de nommer des arguments sans valeur par
défaut.
Il est possible d'utiliser des variables dans les deux noms d'argument nommés et les
valeurs. Si la valeur est une variable scalaire unique , elle est transmise au mot clé tel
quel. Cela permet d'utiliser des objets, et pas seulement des chaînes, comme valeurs
également lors de l'utilisation de la syntaxe de l'argument nommé. Par exemple,
l'appel d'un mot-clé comme arg=${object} , passera la variable ${object}au mot-
clé sans la convertir en chaîne.
Si des variables sont utilisées dans des noms d'argument nommés, les variables sont
résolues avant d'être comparées aux noms d'argument. Ceci est une nouvelle
fonctionnalité de Robot Framework 2.8.6.
La syntaxe de l'argument nommé nécessite que le signe égal soit écrit littéralement
dans l'appel du mot clé. Cela signifie que la variable seule ne peut jamais
déclencher la syntaxe de l'argument nommé, même si elle a une valeur
similaire foo=bar. Il est important de se rappeler, en particulier lors de l’enrobage
de mots-clés dans d’autres mots-clés. Si, par exemple, un mot - clé prend un nombre
variable d'arguments tels que @{args}et passe tous à un autre mot - clé en utilisant la
même @{args} syntaxe possible named=argsyntaxe utilisée dans le côté appelant
n'est pas reconnu. Ceci est illustré par l'exemple ci-dessous.
*** Cas de test ***
Exemple
Exécuter le shell du programme = True # Cela ne viendra pas comme
argument nommé pour exécuter le processus
Si un mot clé doit accepter et transmettre des arguments nommés, il doit être
modifié pour accepter les arguments de mots clés gratuits . Voir les exemples de
kwargs pour une version de mot-clé wrapper pouvant transmettre à la fois les
arguments positionnels et nommés.
Comme déjà expliqué, la syntaxe de l'argument nommé fonctionne avec des mots-
clés. En plus de cela, il fonctionne également lors de l' importation de bibliothèques .
Les arguments de dénomination sont pris en charge par les mots - clés utilisateur et
par la plupart des bibliothèques de tests . La seule exception concerne les
bibliothèques basées sur Java qui utilisent l' API de bibliothèque statique . La
documentation de la bibliothèque générée avec Libdoc a une note: la bibliothèque
prend-elle en charge les arguments nommés ou non.
Remarque
Avant Robot Framework 2.8, la syntaxe des arguments nommés ne fonctionnait pas avec les
bibliothèques de tests utilisant l' API de bibliothèque dynamique .
Les arguments de mots clés gratuits prennent en charge les variables de la même
manière que les arguments nommés . En pratique, cela signifie que les variables
peuvent être utilisées à la fois dans les noms et les valeurs, mais que le signe
d'échappement doit toujours être visible littéralement. Par exemple,
les deux foo=${bar}et ${foo}=${bar}sont valides, tant que les variables qui sont
utilisées existent. Une limitation supplémentaire est que les noms d'argument de
mots clés gratuits doivent toujours être des chaînes. La prise en charge des
variables dans les noms est une nouvelle fonctionnalité de Robot Framework 2.8.6,
avant que les variables possibles ne soient pas résolues.
Kwargs exemples
En tant que premier exemple d'utilisation de kwargs, jetons un coup d'œil au mot
clé Run Process dans la bibliothèque Process . Il a une signature command,
*arguments, **configuration, ce qui signifie qu'il faut la commande pour exécuter
( command), ses arguments en tant que nombre variable d'arguments ( *arguments) et
enfin les paramètres de configuration facultatifs en tant qu'arguments de mots clés
libres ( **configuration). L'exemple ci-dessous montre également que les variables
fonctionnent avec des arguments de mots clés libres exactement comme lorsque
vous utilisez la syntaxe de l'argument nommé .
*** Cas de test ***
Utiliser Kwargs
Exécuter le programme program.py arg1 arg2 cwd = / home / user
Exécuter le processus program.py argument shell = True env = $ {
ENVIRON }
Voir la section Arguments relatifs aux mots clés gratuits (** kwargs) sous Création de
bibliothèques de tests pour plus d'informations sur l'utilisation de la syntaxe kwargs
dans vos bibliothèques de tests personnalisées.
2.2.3 Défaillances
Lorsque le test échoue
Un cas de test échoue si l'un des mots clés qu'il utilise échoue. Normalement, cela
signifie que l'exécution de ce test est arrêtée, qu'un éventuel démontage de test est
exécuté et que l'exécution continue à partir du prochain test. Il est également
possible d'utiliser des échecs continus spéciaux si l'arrêt de l'exécution du test n'est
pas souhaité.
Messages d'erreur
Le message d'erreur affecté à un test élémentaire ayant échoué est obtenu
directement à partir du mot clé en échec. Le message d'erreur est souvent créé par
le mot-clé lui-même, mais certains mots-clés permettent de les configurer.
Erreur HTML
$ { number } = obtenir le numéro
Devrait être égal à $ { number } 42 * HTML * Le numéro n'est
pas mon numéro <b> MAGIC </ b>.
Si la documentation est divisée en plusieurs colonnes, les cellules d'une ligne sont
concaténées avec les espaces. Ceci est principalement utile lorsque vous utilisez
le format HTML et que les colonnes sont étroites. Si la documentation est divisée en
plusieurs lignes , les lignes de documentation créées elles-mêmes sont concaténées à
l'aide de nouvelles lignes . Les nouvelles lignes ne sont pas ajoutées si une ligne se
termine déjà par une nouvelle ligne ou une barre oblique inverse .
*** Cas de test ***
Simple
[ Documentation ] Documentation simple
Pas d'opération
Mise en forme
[ Documentation ] * Ceci est en gras *, c'est italique_ et voici un
lien: http://robotframework.org
Pas d'opération
Les variables
[ Documentation ] Exécutée à $ { HOST } par $ { USER }
Aucune opération
Scission
[ Documentation ] Cette documentation est divisée en plusieurs
colonnes
Pas d'opération
Beaucoup de lignes
[ Documentation ] Nous avons ici
... une nouvelle ligne automatique
Pas d'opération
Il est important que les scénarios de test aient des noms clairs et descriptifs et, dans
ce cas, ils n’ont normalement pas besoin de documentation. Si la logique du
scénario de test nécessite une documentation, cela signifie souvent que les mots-
clés du scénario de test nécessitent de meilleurs noms et qu’ils doivent être
améliorés, au lieu d’ajouter de la documentation supplémentaire. Enfin, les
métadonnées, telles que l'environnement et les informations utilisateur dans le
dernier exemple ci-dessus, sont souvent mieux spécifiées à l'aide de balises .
Les balises sont affichées dans les rapports de test , les journaux et, bien
entendu, dans les données de test. Elles fournissent donc des métadonnées
aux cas de test.
Les statistiques sur les scénarios de test (total, réussi, échoué sont
automatiquement collectées en fonction des balises).
Avec les tags, vous pouvez inclure ou exclure des cas de test à exécuter.
Avec les tags, vous pouvez spécifier quels cas de test sont considérés
comme critiques .
Dans cette section, il est uniquement expliqué comment définir des balises pour les
scénarios de test, et différentes manières de le faire sont répertoriées ci-
dessous. Ces approches peuvent naturellement être utilisées ensemble.
Les balises sont du texte libre, mais elles sont normalisées pour être converties en
minuscules et tous les espaces sont supprimés. Si un scénario de test reçoit la même
balise plusieurs fois, d'autres occurrences que la première sont supprimées. Les
balises peuvent être créées à l'aide de variables, en supposant que ces variables
existent.
*** Paramètres ***
Balises de force req-42
Default Tags propriétaire-john smoke
Tags réservés
Les utilisateurs sont généralement libres d'utiliser les balises qui fonctionnent dans
leur contexte. Il existe toutefois certaines balises qui ont une signification
prédéfinie pour Robot Framework lui-même, et leur utilisation à d'autres fins peut
avoir des résultats inattendus. Toutes les balises spéciales que Robot Framework a
et auront à l’avenir robot-ou bien un robot:préfixe. Pour éviter les problèmes, les
utilisateurs ne doivent donc utiliser aucune balise avec ces préfixes, à moins
d'activer la fonctionnalité spéciale.
Au moment de l'écriture, les seules balises spéciales sont celles robot-exitqui sont
automatiquement ajoutées aux tests lors de l' arrêt normal de l'exécution des tests ,
et robot:no-dry-runqui peuvent être utilisées pour désactiver le mode
de fonctionnement à sec . D'autres utilisations seront probablement ajoutées dans le
futur.
Remarque
Le plan consiste à unifier les préfixes réservés à l'avenir. Très probablement, le robot:préfixe
sera utilisé avec toutes les balises réservées, mais il est préférable d'éviter ces deux préfixes
pour le moment. Voir le numéro 2539 pour plus de détails.
L'installation et le démontage sont toujours un seul mot clé. S'ils doivent prendre en
charge plusieurs tâches distinctes, il est possible de créer des mots - clés utilisateur
de niveau supérieur à cette fin. Une autre solution consiste à exécuter plusieurs
mots-clés à l'aide du mot-clé BuiltIn Run Mots-clés .
Le démontage de test est spécial de deux manières. Tout d'abord, il est également
exécuté lorsqu'un cas de test échoue. Il peut donc être utilisé pour des activités de
nettoyage à effectuer, quel que soit le statut du test élémentaire. De plus, tous les
mots-clés du démontage sont également exécutés même si l'un d'eux échoue. Cette
fonctionnalité continue sur défaillance peut également être utilisée avec des mots-clés
normaux, mais les démoulages internes sont activés par défaut.
Le moyen le plus simple de spécifier une configuration ou une suppression pour les
scénarios de test dans un fichier de scénario de test consiste à utiliser
les paramètres Test Setup et Test Teardowndu tableau Setting. Les cas de test
individuels peuvent également avoir leur propre configuration ou suppression. Ils
sont définis avec les paramètres [Setup] ou [Teardown] dans la table des cas de
test et ils remplacent les paramètres possibles de la configuration du test et du test
Teardown . Ne pas avoir de mot-clé après
un réglage [Setup] ou [Teardown] signifie ne pas avoir de configuration ou de
démontage. Il est également possible d'utiliser une valeur NONEpour indiquer qu'un
test n'a pas de configuration / suppression.
*** Paramètres ***
Configuration du test Ouvrir l'application App A
Test Teardown Close Application
Configuration surchargée
[ Documentation ] Configuration propre, démontage du tableau de
réglage
[ Configuration ] Ouvrez l'application App B
Faire quelque chose
Pas de démontage
[ Documentation ] Configuration par défaut, pas de démontage du
tout
Faire quelque chose
[ Teardown ]
Pas de démontage 2
[ Documentation ] La configuration et le démontage peuvent
également être désactivés avec une valeur spéciale NONE
Faire quelque chose
[ Teardown ] AUCUN
Remarque
Les suites de tests peuvent être configurées et démontées . Une installation de suite est
exécutée avant tout test élémentaire ou suite de sous-test dans cette suite de tests. De même,
une suppression de suite est exécutée après celle-ci.
Les mots clés de modèle peuvent accepter à la fois des arguments positionnels et
nommés normaux, ainsi que des arguments incorporés au nom du mot
clé. Contrairement à d'autres paramètres, il n'est pas possible de définir un modèle à
l'aide d'une variable.
Utilisation de base
La façon dont un mot clé acceptant des arguments de position normaux peut être
utilisé comme modèle est illustrée par les exemples de cas de test suivants. Ces
deux tests sont fonctionnellement totalement identiques.
*** Cas de test **
Cas de test normal
Exemple de mot clé premier argument second argument
Si un scénario de test basé sur un modèle contient plusieurs lignes de données dans
son corps, le modèle est appliqué à toutes les lignes une par une. Cela signifie que
le même mot-clé est exécuté plusieurs fois, une fois avec des données sur chaque
ligne. Les tests basés sur des modèles sont également spéciaux, de sorte que tous
les tours sont exécutés même si un ou plusieurs d'entre eux échouent. Il est possible
d'utiliser ce type de mode continu sur échec avec des tests normaux également, mais
avec les tests basés sur des modèles, le mode est activé automatiquement.
*** Paramètres ***
Exemple de mot-clé de modèle de test
L'utilisation d'arguments avec des valeurs par défaut ou varargs , ainsi que l'utilisation
d' arguments nommés et d'arguments de mots clés gratuits , fonctionnent avec les
modèles exactement comme ils fonctionnent. L'utilisation de variables dans les
arguments est également prise en charge normalement.
Lorsque des arguments incorporés sont utilisés avec des modèles, le nombre
d'arguments dans le nom du mot clé du modèle doit correspondre au nombre
d'arguments utilisés. Les noms d'argument n'ont pas besoin de correspondre aux
arguments du mot clé d'origine, cependant, et il est également possible d'utiliser des
arguments différents:
*** Cas de test ***
Noms d'argument différents
[ Template ] Le résultat de $ { foo } devrait être $ { bar }
1 + 1 2
1 + 2 3
Seuls quelques arguments
[ Template ] Le résultat de $ { measurement } devrait être 3
1 + 2
4 - 1
Nouveaux arguments
[ Template ] Le $ { signifie } de $ { life } devrait être 42
résultat 21 * 2
Pointe
Nommer des colonnes comme dans l'exemple ci-dessus facilite la compréhension des
tests. Ceci est possible car sur la ligne d'en-tête, les autres cellules sauf la première sont
ignorées .
Une façon d'écrire ces exigences / tests est le style Given-When-Then popularisé
par BDHD ( Behavior Driven Development ). Lors de l' écriture des cas de test dans ce
style, l'état initial est généralement exprimée avec un mot - clé commençant par
mot donné , les actions sont décrites avec mot - clé à partir de quand et les attentes
avec un mot - clé à partir de puis . Le mot-clé commençant par And ou But peut être
utilisé si une étape comporte plusieurs actions.
*** Cas de test ***
Login valide
La page de connexion donnée est ouverte
Lorsque le nom d'utilisateur et le mot de passe sont insérés
et les informations d'identification sont soumises
Alors la page d'accueil devrait être ouverte
Les préfixes donnés , When , Then , And et But sont supprimés lorsque des mots-
clés correspondants sont recherchés, si aucune correspondance avec le nom
complet n'est trouvée. Cela fonctionne pour les mots-clés d'utilisateur et de
bibliothèque. Par exemple, la page de connexion donnée est ouverte dans l'exemple
ci-dessus et peut être implémentée en tant que mot-clé utilisateur avec ou sans le
mot donné . Ignorer les préfixes permet également d'utiliser le même mot clé avec
des préfixes différents. Par exemple, la page d'accueil devrait être ouverte pourrait
également être utilisée comme Et la page d'accueil devrait être ouverte .
Remarque
Documentation
Utilisé pour spécifier une documentation de suite de tests
Métadonnées
Utilisé pour définir des métadonnées de suite de tests gratuites en tant que paires
nom-valeur.
Configuration Suite , Teardown Suite
Spécifiez la configuration et le démontage de la suite .
Remarque
Tous les noms des paramètres peuvent éventuellement inclure deux points à la fin, par
exemple Documentation: . Cela peut faciliter la lecture des paramètres, en particulier lorsque
vous utilisez le format texte brut.
Lorsqu'un répertoire de test est exécuté, les fichiers et répertoires qu'il contient sont
traités récursivement comme suit:
Les fichiers et répertoires dont le nom commence par un point ( . ) Ou un
trait de soulignement ( _ ) sont ignorés.
Les répertoires avec le nom CVS sont ignorés (sensibles à la casse).
Fichiers n'ayant pas l'une des extensions
reconnues ( .html , .xhtml , .htm , .tsv , .txt , .rst , .rest ou .robot ) sont ignorés
(insensible à la casse).
D'autres fichiers et répertoires sont traités.
Fichiers d'initialisation
Une suite de tests créée à partir d'un répertoire peut avoir des paramètres similaires
à ceux d'une suite créée à partir d'un fichier de scénario de test. Un répertoire seul
ne pouvant pas contenir ce type d'informations, il doit être placé dans un fichier
d'initialisation de la suite de tests spéciale. Un nom de fichier d'initialisation doit
toujours être au format __init __. Ext , où l'extension doit être l'un des formats de
fichiers pris en charge (par exemple, __init __. Robot ou __init __. Html ). Le format
de nom est emprunté à Python, où les fichiers nommés de cette manière indiquent
qu'un répertoire est un module.
Les fichiers d'initialisation ont la même structure et la même syntaxe que les
fichiers de cas de test, sauf qu'ils ne peuvent pas contenir de tables de scénarios de
test et que tous les paramètres ne sont pas pris en charge. Variables et mots-clés
créés ou importés dans les fichiers d'initialisation sont pas disponibles dans les
suites de tests de niveau inférieur. Si vous devez partager des variables ou des
mots-clés, vous pouvez les placer dans des fichiers de ressources pouvant être
importés à la fois par des fichiers d'initialisation et de test.
Le nom du fichier ou du répertoire peut contenir un préfixe pour contrôler l' ordre
d'exécution des suites. Le préfixe est séparé du nom de base par deux traits de
soulignement et, lors de la construction du nom de la suite de tests, le préfixe et les
traits de soulignement sont supprimés. Par exemple, les
fichiers 01__some_tests.txt et 02__more_tests.txt créent des suites de tests.
Quelques tests et plusieurs tests , respectivement, et le premier est exécuté avant ce
dernier.
La documentation d'une suite de tests est définie à l'aide
du paramètre Documentation dans le tableau Paramètres. Il peut être utilisé dans les
fichiers de cas de test ou, avec les suites de niveau supérieur, dans les fichiers
d'initialisation de la suite de tests. La documentation de la suite de tests a
exactement les mêmes caractéristiques quant à son affichage et à sa création en tant
que documentation de cas de test .
*** Paramètres ***
Documentation Exemple de documentation de la suite de tests avec * some *
_formatting_.
... Voir la documentation de test pour plus d'exemples de
documentation.
Le nom et la valeur des métadonnées se trouvent dans les colonnes qui suivent
les métadonnées . La valeur est gérée de la même manière que la documentation, ce
qui signifie qu'elle peut être divisée en plusieurs cellules (jointes par des espaces)
ou en plusieurs lignes (réunies par des nouvelles lignes), de simples mises en forme
HTML et même des variables .
Pour les suites de tests de niveau supérieur, il est également possible de définir des
métadonnées avec l' option de ligne de commande --metadata . Ceci est discuté
plus en détail dans la section Définition des métadonnées .
Si la configuration d'une suite échoue, tous les scénarios de test et ses suites de tests
enfants reçoivent immédiatement un statut d'échec et ne sont pas exécutés. Cela
rend les configurations de la suite idéales pour vérifier les conditions préalables qui
doivent être remplies avant de pouvoir exécuter des cas de test.
Un démontage de la suite est normalement utilisé pour le nettoyage une fois que
tous les cas de test ont été exécutés. Il est exécuté même si la configuration de la
même suite échoue. Si le démontage de la suite échoue, tous les scénarios de test de
la suite ont été marqués comme ayant échoué, quel que soit leur statut d'exécution
d'origine. Notez que tous les mots-clés dans les démontages de la suite sont
exécutés même si l'un d'eux échoue.
En utilisant le Libraryréglage
Les bibliothèques de test sont normalement importées à l'aide
du paramètre Library dans la table Setting et portant le nom de la bibliothèque dans
la colonne suivante. Contrairement à la plupart des autres données, le nom de la
bibliothèque est sensible à la fois à la casse et à l’espace. Si une bibliothèque est
dans un package, le nom complet, y compris le nom du package, doit être utilisé.
Dans les cas où la bibliothèque a besoin d'arguments, ils sont répertoriés dans les
colonnes après le nom de la bibliothèque. Il est possible d'utiliser les valeurs par
défaut, le nombre variable d'arguments et les arguments nommés dans les
importations de bibliothèques de tests de la même manière qu'avec les arguments des
mots clés . Le nom de la bibliothèque et les arguments peuvent être définis à l'aide
de variables.
*** Paramètres ***
Système d' exploitation de bibliothèque
Bibliothèque my.package.TestLibrary
Bibliothèque MyLibrary arg1 arg2
Bibliothèque $ { LIBRARY }
Il est possible d'importer des bibliothèques de tests dans des fichiers de scénarios
de test , des fichiers de ressources et des fichiers d'initialisation de suites de tests . Dans
tous ces cas, tous les mots-clés de la bibliothèque importée sont disponibles dans ce
fichier. Avec les fichiers de ressources, ces mots-clés sont également disponibles
dans d'autres fichiers les utilisant.
Le plus grand avantage de cette approche est que lorsque le chemin de recherche du
module a été configuré, souvent à l'aide d'un script de démarrage personnalisé , les
utilisateurs normaux n'ont pas besoin de penser où les bibliothèques sont réellement
installées. L'inconvénient est que la création de vos propres bibliothèques, très
simples dans le chemin de recherche, peut nécessiter une configuration
supplémentaire.
Si la bibliothèque est un fichier, le chemin d'accès doit contenir une extension. Pour
les bibliothèques Python, l'extension est naturellement .py et pour les bibliothèques
Java, elle peut être soit .classou .java , mais le fichier de classe doit toujours être
disponible. Si la bibliothèque Python est implémentée en tant que répertoire, son
chemin doit comporter une barre oblique ( /). Les exemples suivants démontrent
ces différents usages.
*** Paramètres ***
Bibliothèque PythonLibrary.py
Bibliothèque /absolute/path/JavaLibrary.java
Bibliothèque relative / chemin / PythonDirLib / arguments possibles
Bibliothèque $ { RESOURCES } /Example.class
Une limitation de cette approche est que les bibliothèques implémentées en tant que
classes Python doivent se trouver dans un module du même nom que la classe . De plus,
l'importation de bibliothèques distribuées dans des packages JAR ou ZIP n'est pas
possible avec ce mécanisme.
La syntaxe de base pour spécifier le nouveau nom est d'avoir le texte WITH
NAME(sensible à la casse) après le nom de la bibliothèque, puis d'avoir le nouveau
nom dans la cellule suivante. Le nom spécifié est affiché dans les journaux et doit
être utilisé dans les données de test lors de l'utilisation du nom complet des mots-
clés ( LibraryName.Keyword Name ).
*** Paramètres ***
Bibliothèque com.company.TestLib AVEC NAME TestLib
Bibliothèque $ { LIBRARY } WITH NAME MyName
Les arguments possibles à la bibliothèque sont placés dans des cellules entre le nom
de la bibliothèque d'origine et le WITH NAMEtexte. L'exemple suivant illustre
comment la même bibliothèque peut être importée plusieurs fois avec des
arguments différents:
*** Paramètres ***
Bibliothèque SomeLibrary localhost 1234 WITH NAME LocalLib
Bibliothèque SomeLibrary server.domain 8080 AVEC NOM RemoteLib
La définition d'un nom personnalisé sur une bibliothèque de test fonctionne à la fois
lors de l'importation d'une bibliothèque dans la table Setting et lors de l'utilisation
du mot clé Import Library .
BuiltIn
Collections
DateTime
Dialogues
Système opérateur
Processus
Capture d'écran
Chaîne
Telnet
XML
Bibliothèque à distance
Outre les bibliothèques standard standard répertoriées ci-dessus, il existe également
une bibliothèque distante totalement différente des autres bibliothèques standard. Il
ne possède pas de mot-clé mais fonctionne comme un proxy entre Robot
Framework et les implémentations réelles des bibliothèques de tests. Ces
bibliothèques peuvent être exécutées sur d'autres machines que le framework
principal et peuvent même être implémentées en utilisant des langages non pris en
charge par Robot Framework de manière native.
2.5 Variables
2.5.1 Introduction
2.5.2 Types de variables
o Variables scalaires
o Variables de liste
o Variables du dictionnaire
o Variables d'environnement
o Propriétés du système Java
2.5.3 Création de variables
o Table variable
o Fichier variable
o Définition des variables en ligne de commande
o Valeurs de retour des mots-clés
o Utilisation des mots-clés Set Test / Suite / Global Variable
2.5.4 Variables intégrées
o Variables du système d'exploitation
o Les variables numériques
o Variables booléennes et aucune / null
o Espace et variables vides
o Variables automatiques
2.5.5 Priorités variables et portées
o Priorités variables
o Étendues variables
2.5.6 Fonctions de variables avancées
o Syntaxe de variable étendue
o Affectation de variables étendue
o Variables à l'intérieur des variables
2.5.1 Introduction
Les variables font partie intégrante de Robot Framework et peuvent être utilisées
dans la plupart des endroits dans les données de test. Le plus souvent, ils sont
utilisés dans les arguments des mots-clés dans les tables de scénarios et les tables
de mots-clés, mais tous les paramètres autorisent également les variables dans leurs
valeurs. Un nom de mot clé normal ne peut pas être spécifié avec une variable,
mais le mot clé BuiltIn Run Keyword peut être utilisé pour obtenir le même effet.
Robot Framework a ses propres variables qui peuvent être utilisées comme
des scalaires , des listes ou des dictionnaires en utilisant
la syntaxe ${SCALAR}, @{LIST}et &{DICT}, respectivement. De plus, les variables
d'environnement peuvent être utilisées directement avec la syntaxe %{ENV_VAR}.
Lorsque les chaînes changent souvent dans les données de test. Avec les
variables, il vous suffit d'apporter ces modifications au même endroit.
Lors de la création de données de test indépendantes du système et du
système d'exploitation. L'utilisation de variables au lieu de chaînes codées en
dur simplifie considérablement cette tâche (par exemple, ${RESOURCES}au
lieu de c:\resourcesou ${HOST} au lieu de 10.0.0.1:8080). Comme les
variables peuvent être définies à partir de la ligne de commande au démarrage des
tests, il est facile de modifier des variables spécifiques au système (par
exemple --variable HOST:10.0.0.2:1234 --variable
RESOURCES:/opt/resources). Cela facilite également les tests de localisation,
qui consistent souvent à exécuter les mêmes tests avec différentes chaînes.
Lorsqu'il est nécessaire d'avoir des objets autres que des chaînes comme
arguments pour les mots-clés. Ceci n'est pas possible sans variables.
Lorsque différents mots-clés, même dans des bibliothèques de test
différentes, doivent communiquer. Vous pouvez affecter une valeur de retour
d'un mot-clé à une variable et la transmettre comme argument à un autre.
Lorsque les valeurs dans les données de test sont longues ou
compliquées. Par exemple, ${URL}est plus court
que http://long.domain.name:8080/path/to/service?foo=1&bar=2&zap=42.
Si une variable inexistante est utilisée dans les données de test, le mot clé qui
l'utilise échoue. Si la même syntaxe que celle utilisée pour les variables est requise
en tant que chaîne littérale, elle doit être précédée d'une barre oblique inverse comme
dans \${NAME}.
Les variables de la structure de robot, de même que les mots-clés, ne sont pas
sensibles à la casse, et les espaces et les traits de soulignement sont également
ignorés. Cependant, il est recommandé d'utiliser des majuscules avec des variables
globales (par exemple, ${PATH}ou ${TWO WORDS}) et des lettres minuscules avec des
variables uniquement disponibles dans certains cas de test ou mots-clés utilisateur
(par exemple ${my var}ou ${myVar}). Plus important encore, les cas doivent être
utilisés de manière cohérente.
Variables scalaires
Lorsque des variables scalaires sont utilisées dans les données de test, elles sont
remplacées par la valeur à laquelle elles sont affectées. Bien que les variables
scalaires soient le plus souvent utilisées pour les chaînes simples, vous pouvez leur
affecter des objets, y compris des listes. La syntaxe de la variable scalaire, par
exemple ${NAME}, devrait être familière à la plupart des utilisateurs, car elle est
également utilisée, par exemple, dans les scripts shell et le langage de
programmation Perl.
Les variables
Log $ { GREET }
Log $ { GREET } , $ { NAME } !!
Lorsqu'une variable scalaire est utilisée comme valeur unique dans une cellule de
données de test, la variable scalaire est remplacée par la valeur dont elle dispose. La
valeur peut être n'importe quel objet. Lorsqu'une variable scalaire est utilisée dans
une cellule de test avec autre chose (chaînes constantes ou autres variables), sa
valeur est d'abord convertie en une chaîne Unicode, puis caténatée à celle qui se
trouve dans cette cellule. Convertir la valeur en chaîne signifie que la méthode de
l'objet __unicode__(en Python, avec __str__comme solution de secours)
ou toString(en Java) est appelée.
Remarque
Les valeurs de variables sont utilisées telles quelles sans conversions, également lors de la
transmission d’arguments à des mots-clés utilisant la syntaxe des arguments
nommés comme argname=${var}.
L'exemple ci-dessous montre la différence entre avoir une variable dans une cellule
seule ou avec un autre contenu. Tout d'abord, supposons que nous avons une
variable ${STR}définie sur une chaîne Hello, world!et ${OBJ}définie sur une
instance de l'objet Java suivant:
classe publique MyObj {
Avec ces deux variables définies, nous disposons alors des données de test
suivantes:
*** Cas de test ***
Objets
KW 1 $ { STR }
KW 2 $ { OBJ } KW 3 J'ai dit " $ { STR } "
Enfin, lorsque ces données de test sont exécutées, différents mots-clés reçoivent les
arguments comme expliqué ci-dessous:
Remarque
Variables de liste
Lorsqu'une variable est utilisée comme un scalaire ${EXAMPLE}, sa valeur sera
utilisée telle quelle. Si une valeur de variable est une liste ou une liste, il est
également possible d'utiliser une variable de liste comme @{EXAMPLE}. Dans ce cas,
des éléments de liste individuels sont passés en tant qu'arguments séparément. C'est
plus facile à expliquer avec un exemple. En supposant qu'une variable @{USER}a une
valeur ['robot', 'secret'], les deux cas de test suivants sont équivalents:
*** Cas de test ***
Les constantes
Login robot secret
Variable de liste
Login @ { USER }
Robot Framework stocke ses propres variables dans un stockage interne et permet
de les utiliser en tant que scalaires, listes ou dictionnaires. L'utilisation d'une
variable en tant que liste nécessite que sa valeur soit une liste Python ou un objet de
type liste. Robot Framework n'autorise pas l'utilisation de chaînes en tant que listes,
mais d'autres objets itérables tels que des tuples ou des dictionnaires sont acceptés.
Avant Robot Framework 2.9, les variables scalaires et de liste étaient stockées
séparément, mais il était possible d'utiliser des variables de liste sous forme de
scalaires et de variables scalaires sous forme de listes. Cela a causé beaucoup de
confusion quand il y avait accidentellement une variable scalaire et une variable de
liste avec le même nom mais une valeur différente.
Il est possible d'utiliser des variables de liste avec d'autres arguments, y compris
d'autres variables de liste.
*** Cas de test ***
Exemple
Mot clé @ { LIST } plus d’ args
Mot clé $ { SCALAR } @ { LIST } constant
Mot clé @ { LISTE } @ { ANOTHER } @ { ONE MORE }
Si une variable de liste est utilisée dans une cellule avec d'autres données (chaînes
constantes ou autres variables), la valeur finale contiendra une représentation sous
forme de chaîne de la valeur de la variable. Le résultat final est donc exactement le
même que lorsque vous utilisez la variable comme un scalaire avec d'autres
données dans la même cellule.
Index négatif
Log @ { LIST } [ -1 ]
Les variables de liste ne peuvent être utilisées qu'avec certains paramètres . Ils
peuvent être utilisés dans les arguments des bibliothèques importées et des fichiers
de variables, mais les noms de fichiers de bibliothèque et de variable ne peuvent
pas être des variables de liste. De même, avec les configurations et les démontages,
la variable de liste ne peut pas être utilisée comme nom du mot-clé, mais peut être
utilisée dans les arguments. Avec les paramètres liés aux balises, ils peuvent être
utilisés librement. L'utilisation de variables scalaires est possible dans les endroits
où les variables de liste ne sont pas prises en charge.
*** Paramètres ***
Library ExampleLibrary @ { LIB ARGS } # Cela fonctionne
Bibliothèque $ { LIBRARY } @ { LIB ARGS } # Cela fonctionne
Bibliothèque @ { NAME AND ARGS } # Cela ne
fonctionne pas Suite Setup Some Keyword @ { KW ARGS } # Cela
fonctionne
Variables du dictionnaire
Comme indiqué ci-dessus, une variable contenant une liste peut être utilisée
comme variable de liste pour transmettre des éléments de liste à un mot-clé en tant
qu'arguments individuels. De même, une variable contenant un dictionnaire Python
ou un objet de type dictionnaire peut être utilisée comme variable de dictionnaire
comme &{EXAMPLE}. En pratique, cela signifie que des éléments individuels du
dictionnaire sont transmis en tant qu'arguments nommés au mot-clé. En supposant
qu'une variable &{USER}a une valeur {'name': 'robot', 'password': 'secret'}, les
deux cas de test suivants sont équivalents.
*** Cas de test ***
Les constantes
Nom de connexion = mot de passe du robot = secret
Variable Dict
Login & { USER }
Si une variable de dictionnaire est utilisée dans une cellule avec d'autres données
(chaînes constantes ou autres variables), la valeur finale contiendra une
représentation sous forme de chaîne de la valeur de la variable. Le résultat final est
donc exactement le même que lorsque vous utilisez la variable comme un scalaire
avec d'autres données dans la même cellule.
Il est possible d'accéder à une certaine valeur d'une variable de dictionnaire avec la
syntaxe &{NAME}[key], où keyest le nom de la valeur sélectionnée. Les clés sont
considérées comme des chaînes, mais les clés non-chaînes peuvent être utilisées
comme variables. Les valeurs de dictionnaire accessibles de cette manière peuvent
être utilisées de la même manière que les variables scalaires.
Si une clé est une chaîne, il est possible d'accéder à sa valeur en utilisant également
la syntaxe d'accès aux attributs ${NAME.key}. Voir Création de variables de
dictionnaire pour plus de détails sur cette syntaxe.
Les variables du dictionnaire ne peuvent généralement pas être utilisées avec les
paramètres. Les seules exceptions sont les importations, les configurations et les
démontages où les dictionnaires peuvent être utilisés comme arguments.
*** Paramètres ***
Library ExempleLibrary & { LIB ARGS } Suite Setup Quelques mots clés
& { KW ARGS } named = arg
Variables d'environnement
Robot Framework permet d'utiliser des variables d'environnement dans les données
de test en utilisant la syntaxe %{ENV_VAR_NAME}. Ils sont limités aux valeurs de
chaîne.
Table variable
Les sources de variables les plus courantes sont les tables de variables dans les
fichiers de scénarios de test et les fichiers de ressources . Les tables de variables sont
pratiques car elles permettent de créer des variables au même endroit que le reste
des données de test, et la syntaxe nécessaire est très simple. Leurs principaux
inconvénients sont que les valeurs sont toujours des chaînes et qu’elles ne peuvent
pas être créées dynamiquement. Si l'un de ces problèmes est un problème, les
fichiers variables peuvent être utilisés à la place.
L'attribution de variable la plus simple possible consiste à définir une chaîne dans
une variable scalaire. Cela se fait en donnant le nom de la variable (y compris ${})
dans la première colonne de la table Variable et la valeur dans la seconde. Si la
deuxième colonne est vide, une chaîne vide est définie comme valeur. Une variable
déjà définie peut également être utilisée dans la valeur.
*** Variables ***
$ { NAME } Framework Robot
$ { VERSION } 2.0
$ { ROBOT } $ { NAME } $ { VERSION }
Il est également possible, mais pas obligatoire, d'utiliser le signe égal =après le nom
de la variable pour rendre l'attribution des variables légèrement plus explicite.
*** Variables ***
$ { NAME } = Robot Framework
$ { VERSION } = 2.0
Si une variable scalaire a une valeur longue, elle peut être divisée en plusieurs
colonnes et lignes . Par défaut, les cellules sont regroupées en utilisant un espace,
mais cela peut être changé en ayant SEPARATOR=<sep>dans la première cellule.
*** Variables ***
$ { EXAMPLE } Cette valeur est jointe à un espace
$ { MULTILINE } SEPARATOR = \ n Première ligne
... Deuxième ligne Troisième ligne
Rejoindre des valeurs longues comme ci-dessus est une nouvelle fonctionnalité de
Robot Framework 2.9. Créer une variable scalaire avec plusieurs valeurs était une
erreur de syntaxe dans Robot Framework 2.8 et avec les versions antérieures, elle
créait une variable avec une valeur de liste.
Les variables du dictionnaire ont deux propriétés supplémentaires par rapport aux
dictionnaires Python normaux. Tout d'abord, les valeurs de ces dictionnaires sont
accessibles comme des attributs, ce qui signifie qu'il est possible d'utiliser une
syntaxe de variable étendue comme ${VAR.key}. Cela ne fonctionne que si la clé est un
nom d'attribut valide et ne correspond à aucun attribut Python. Par exemple, la
valeur individuelle &{USER}[name]peut également être accédée
comme ${USER.name}(remarque $nécessaire dans ce contexte), mais
l'utilisation ${MANY.3}n'est pas possible.
Remarque
À partir de Robot Framework 3.0.3, les clés de variable du dictionnaire sont accessibles de
manière récursive ${VAR.nested.key}. Cela facilite l'utilisation des structures de données
imbriquées.
Une autre propriété spéciale des variables de dictionnaire est qu'elles sont
ordonnées. Cela signifie que si ces dictionnaires sont itérés, leurs éléments sont
toujours dans l’ordre dans lequel ils sont définis. Cela peut être utile si les
dictionnaires sont utilisés comme variables de liste avec des boucles for ou
autres. Lorsqu'un dictionnaire est utilisé comme variable de liste, la valeur réelle
contient des clés de dictionnaire. Par exemple, la @{MANY}variable aurait une
valeur ['first', 'second', 3].
Fichier variable
Les fichiers de variables constituent le mécanisme le plus puissant pour créer
différents types de variables. Il est possible d'affecter des variables à n'importe quel
objet les utilisant, et elles permettent également de créer des variables de manière
dynamique. La syntaxe du fichier de variables et l'utilisation de fichiers variables
sont expliquées dans la section Fichiers de ressources et de ressources .
Dans les exemples ci-dessus, les variables sont définies pour que
Si les fichiers de variables et les variables individuelles sont tous deux fournis par
la ligne de commande, ces derniers ont une priorité plus élevée .
Les variables définies de cette manière sont similaires aux autres variables, mais
elles ne sont disponibles que dans la portée locale où elles sont créées. Ainsi, il n'est
pas possible, par exemple, de définir une variable comme celle-ci dans un cas de
test et de l'utiliser dans une autre. En effet, en général, les scénarios de test
automatisés ne doivent pas dépendre les uns des autres, et la définition accidentelle
d’une variable utilisée ailleurs peut provoquer des erreurs de débogage
difficiles. S'il existe un réel besoin de définir une variable dans un scénario de test et
de l'utiliser dans un autre, il est possible d'utiliser les mots-clés intégrés, comme
expliqué dans la section suivante.
Toute valeur renvoyée par un mot clé peut être affectée à une variable
scalaire . Comme illustré par l'exemple ci-dessous, la syntaxe requise est très
simple:
*** Cas de test ***
De retour
$ { x } = Récupère un argument
Journal Nous avons $ { x } !
Dans l'exemple ci-dessus, la valeur renvoyée par le mot clé Get X est d'abord
définie dans la variable ${x}, puis utilisée par le mot clé Log . Avoir le signe
égal =après le nom de la variable n'est pas obligatoire, mais cela rend l'affectation
plus explicite. La création de variables locales comme celle-ci fonctionne à la fois
dans un scénario de test et au niveau du mot-clé utilisateur.
Notez que, bien qu'une valeur soit affectée à une variable scalaire, elle peut être
utilisée comme variable de liste si elle a une valeur de type liste et comme variable de
dictionnaire si elle a une valeur de type dictionnaire.
Si un mot clé renvoie une liste ou un objet de type liste, il est possible de l’affecter
à une variable de liste :
*** Cas de test ***
Exemple
@ { list } = Créer la liste premier deuxième tiers
Longueur doit être $ { list } 3
Log Many @ { list }
Toutes les variables de la structure de robot étant stockées dans le même espace de
noms, il n'y a pas beaucoup de différence entre l'affectation d'une valeur à une
variable scalaire ou à une variable de liste. Cela peut être vu en comparant les deux
derniers exemples ci-dessus. Les principales différences sont les suivantes: lors de
la création d'une variable de liste, Robot Framework vérifie automatiquement que
la valeur est une liste ou une liste, et la valeur de la variable stockée sera une
nouvelle liste créée à partir de la valeur de retour. Lors de l'attribution d'une
variable scalaire, la valeur renvoyée n'est pas vérifiée et la valeur stockée sera
exactement le même objet que celui renvoyé.
Étant donné que toutes les variables de la structure de robot sont stockées dans le
même espace de noms, il serait également possible d'affecter un dictionnaire à une
variable scalaire et de l'utiliser ultérieurement comme dictionnaire si nécessaire. Il
y a cependant certains avantages à créer une variable de dictionnaire de manière
explicite. Tout d'abord, Robot Framework vérifie que la valeur renvoyée est
similaire à un dictionnaire ou à un dictionnaire, car elle vérifie que les variables de
liste ne peuvent obtenir qu'une valeur de type liste.
Si un mot clé renvoie une liste ou un objet de type liste, il est possible d'affecter des
valeurs individuelles à plusieurs variables scalaires ou à des variables scalaires et à
une variable de liste.
*** Cas de test ***
Assigner plusieurs
$ { a } $ { b } $ { c } = Obtenir trois
$ { first } @ { rest } = Obtenir trois
@ { avant } $ { dernier } = obtenir trois
$ { begin } @ { middle } $ { end } = Obtenir trois
En supposant que le mot clé Get Three renvoie une liste [1, 2, 3], les variables
suivantes sont créées:
C'est une erreur si la liste renvoyée contient plus ou moins de valeurs qu'il y a de
variables scalaires à affecter. De plus, une seule variable de liste est autorisée et les
variables de dictionnaire ne peuvent être affectées que seules.
Les variables définies avec le mot-clé Set Test Variable sont disponibles partout
dans la portée du scénario de test en cours d'exécution. Par exemple, si vous
définissez une variable dans un mot-clé utilisateur, elle est disponible au niveau du
scénario de test et dans tous les autres mots-clés utilisateur utilisés dans le test en
cours. Les autres cas de test ne verront pas les variables définies avec ce mot-clé.
Les variables définies avec le mot-clé Set Suite Variable sont disponibles partout
dans la portée de la suite de tests actuellement exécutée. Définir des variables avec
ce mot clé a donc le même effet que de les créer à l'aide de la table Variable du
fichier de données de test ou de les importer depuis des fichiers variables . Les autres
suites de tests, y compris les suites de tests enfants possibles, ne verront pas les
variables définies avec ce mot-clé.
Les variables définies avec le mot clé Set Global Variable sont globalement
disponibles dans tous les scénarios de test et suites exécutés après leur
définition. Définir des variables avec ce mot clé a donc le même effet que la création
à partir de la ligne de commande en utilisant les options --variable ou --
variablefile . Comme ce mot clé peut changer les variables partout, il doit
être utilisé avec précaution.
Remarque
Définissez les mots-clés Test / Suite / Global Variable définissez les variables nommées
directement dans la portée de la variable test, de la suite ou de la variable globale et ne
retournez rien. Par ailleurs, un autre mot-clé BuiltIn Set Variable définit des variables locales
à l'aide de valeurs de retour .
Variable Explication
Variable Explication
$ {/} Le séparateur de chemin de répertoire système. /dans les systèmes de type UNIX
et \ dans Windows.
$ {:} Le séparateur d'éléments du chemin système. :dans des systèmes de type UNIX
et ;dans Windows.
Exemple 1B
Connect example.com $ { 80 } # Connect obtient une chaîne et un
entier
Exemple 2
Do X $ { 3.14 } $ { -1e-4 } # Do X obtient des nombres à
virgule flottante de 3,14 à -0,0001
Il est possible de créer des entiers également à partir de valeurs binaires, octales et
hexadécimales en utilisant 0b, 0oet des 0xpréfixes, respectivement. La syntaxe n'est
pas sensible à la casse.
*** Cas de test ***
Exemple
Devrait être égal à $ { 0b1011 } $ { 11 }
devrait être égal à $ { 0o10 } $ { 8 } devrait être égal à $ { 0xff
} $ { 255 } devrait être égal à $ { 0B1010 } $ { 0XA }
Aucun
Do XYZ $ { None } # Est-ce que XYZ obtient
Python None en argument
Nul
$ { ret } = Valeur obtenue arg # Vérification que Get Value renvoie
Java null Devrait être égal à $ { ret } $ { null }
Quatre espaces
Devrait être égal $ { ESPACE * 4 } \ \ \ \ \
Dix espaces
Devrait être égal $ { ESPACE * 10 } \ \ \ \ \ \ \ \ \ \
Espace coté
Devrait être égal " $ { SPACE } " ""
Espaces cotés
Devrait être égal " $ { SPACE * 2 } " "\"
Vide
Devrait être égal $ { EMPTY } \
Il existe également une variable de liste vide @{EMPTY}et une variable de
dictionnaire vide &{EMPTY}. Comme ils n'ont pas de contenu, ils disparaissent
lorsqu'ils sont utilisés quelque part dans les données de test. Ils sont utiles, par
exemple, avec les modèles de test lorsque le mot-clé template est utilisé sans
arguments ou lors du remplacement de variables de liste ou de dictionnaire dans
différentes étendues. Modifier la valeur de @{EMPTY}ou &{EMPTY}n'est pas possible.
*** Cas de test ***
Modèle
[ Template ] Un mot clé
@ { EMPTY }
Passer outre
Définissez la variable globale @ { LIST } @ { EMPTY }
Définissez la variable Suite & { DICT } & { EMPTY }
Remarque
@{EMPTY}est nouveau dans Robot Framework 2.7.4 et &{EMPTY}dans Robot Framework 2.9.
Variables automatiques
Certaines variables automatiques peuvent également être utilisées dans les données
de test. Ces variables peuvent avoir des valeurs différentes lors de l'exécution du
test et certaines d'entre elles ne sont même pas disponibles tout le temps. La
modification de la valeur de ces variables n'affecte pas les valeurs d'origine, mais
certaines valeurs peuvent être modifiées dynamiquement à l'aide de mots-clés de
la bibliothèque BuiltIn .
@ {TAG TEST} Contient les balises du test élémentaire actuel dans Cas de test
l'ordre alphabétique. Peut être modifié
dynamiquement à l'aide des mots clés Définir des
balises et Supprimer des balises .
Priorités variables
Variables depuis la ligne de commande
Les variables définies dans la ligne de commande ont la priorité la plus élevée de toutes
les variables pouvant être définies avant le démarrage de l'exécution du test. Ils
remplacent les variables possibles créées dans les tables de variables dans les
fichiers de scénarios de test, ainsi que dans les fichiers de ressources et de variables
importés dans les données de test.
Les variables créées à l'aide de la table Variable dans un fichier de scénario de test
sont disponibles pour tous les scénarios de test dans ce fichier. Ces variables
remplacent les variables possibles avec les mêmes noms dans les fichiers de
ressources et de variables importés.
Les variables créées dans les tables de variables sont disponibles dans toutes les
autres tables du fichier où elles ont été créées. Cela signifie qu'ils peuvent
également être utilisés dans la table Setting, par exemple, pour importer plus de
variables à partir de fichiers de ressources et de variables.
Les variables importées à partir des fichiers de ressources et de variables ont la priorité
la plus faible de toutes les variables créées dans les données de test. Les variables
des fichiers de ressources et des fichiers de variables ont la même priorité. Si
plusieurs fichiers de ressources et / ou variables ont les mêmes variables, celles du
fichier importé en premier sont utilisées.
Notez que les variables importées à partir des fichiers de ressources et de variables
ne sont pas disponibles dans la table Variable du fichier qui les importe. Cela est dû
au traitement de la table Variable avant la table Setting où les fichiers de ressources
et les fichiers de variables sont importés.
Les variables définies lors de l'exécution du test à l'aide de valeurs renvoyées par des
mots clés ou à l' aide des mots clés Définir test / Suite / Variable globale remplacent
toujours les variables existantes possibles dans la portée où elles sont définies. En
un sens, ils ont donc la plus haute priorité, mais en revanche ils n'affectent pas les
variables en dehors du champ d'application défini.
Variables intégrées
Les variables intégrées aiment ${TEMPDIR}et ${TEST_NAME} ont la plus haute priorité de
toutes les variables. Ils ne peuvent pas être remplacés à l'aide de la table Variable
ou de la ligne de commande, mais ils peuvent même être réinitialisés pendant
l'exécution du test. Une exception à cette règle sont les variables numériques , qui
sont résolues dynamiquement si aucune variable n’est trouvée autrement. Ils
peuvent donc être ignorés, mais c'est généralement une mauvaise idée. En outre,
il ${CURDIR} est spécial car il est déjà remplacé pendant le temps de traitement des
données de test.
Étendues variables
Selon où et comment ils sont créés, les variables peuvent avoir une suite de tests
globale, un scénario de test ou une portée locale.
Portée globale
Les variables globales sont disponibles partout dans les données de test. Ces
variables sont normalement définies à partir de la ligne de commande avec les options -
-variable et --variablefile , mais il est également possible de créer de
nouvelles variables globales ou de changer celles existantes avec le mot-
clé BuiltIn Définir une variable globale dans les données de test. De plus,
les variables intégrées sont également globales.
Il est recommandé d'utiliser des majuscules avec toutes les variables globales.
Les variables avec la portée de la suite de tests sont disponibles partout dans la
suite de tests où elles sont définies ou importées. Ils peuvent être créés dans des
tables de variables, importés à partir de fichiers de ressources et de variables , ou
définis lors de l'exécution du test à l'aide du mot-clé BuiltIn Définir une variable de
suite .
La portée de la suite de tests n'est pas récursive , ce qui signifie que les variables
disponibles dans une suite de tests de niveau supérieur ne sont pas disponibles dans
les suites de niveau inférieur. Si nécessaire, des fichiers de ressources et de
variables peuvent être utilisés pour partager des variables.
Comme ces variables peuvent être considérées comme globales dans la suite de
tests où elles sont utilisées, il est recommandé d’utiliser également des lettres
majuscules.
Les variables avec la portée du scénario de test sont visibles dans un scénario de
test et dans tous les mots-clés utilisateur utilisés par le test. Au départ, il n'y a pas
de variables dans cette étendue, mais il est possible de les créer en utilisant le mot-
clé BuiltIn Définir la variable de test n'importe où dans un scénario de test.
Les variables de la portée du test élémentaire sont également globales. Il est donc
généralement recommandé d'utiliser des lettres majuscules avec eux.
Portée locale
Les scénarios de test et les mots-clés utilisateur ont une portée de variable locale
qui n'est pas vue par d'autres tests ou mots-clés. Les variables locales peuvent être
créées en utilisant les valeurs de retour des mots-clés exécutés et les mots-clés des
utilisateurs les utilisent également comme arguments .
Il est recommandé d'utiliser des lettres minuscules avec des variables locales.
Remarque
Avant Robot Framework 2.9, les variables de la portée locale étaient divisées en mots-clés
utilisateur de niveau inférieur . Cela n'a jamais été une fonctionnalité prévue et les variables
doivent être définies ou transmises explicitement également avec les versions antérieures.
2.5.6 Fonctions de variables avancées
Syntaxe de variable étendue
La syntaxe des variables étendues permet d'accéder aux attributs d'un objet affecté
à une variable (par exemple ${object.attribute}) et même d'appeler ses méthodes
(par exemple ${obj.getName()}). Il fonctionne à la fois avec les variables scalaires
et les variables de liste, mais est principalement utile avec les anciennes
La syntaxe des variables étendues est une fonctionnalité puissante, mais elle doit
être utilisée avec précaution. L'accès aux attributs n'est normalement pas un
problème, au contraire, car une variable contenant un objet avec plusieurs attributs
est souvent préférable à plusieurs variables. D'autre part, les méthodes d'appel, en
particulier lorsqu'elles sont utilisées avec des arguments, peuvent 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 utilisations les plus courantes de la syntaxe des variables étendues sont
illustrées dans l'exemple ci-dessous. Supposons d'abord que nous avons le fichier de
variables et le cas de test suivants:
classe MyObject :
Lorsque ces données de test sont exécutées, les mots-clés reçoivent les arguments
suivants:
KW 1 obtient la chaîneRobot
KW 2 obtient la chaîneRobot eats Cucumber
KW 3 obtient la chaînetwo
Si l'objet utilisé est implémenté avec Java, la syntaxe de la variable étendue vous
permet d'accéder aux attributs en utilisant les propriétés de bean. Essentiellement,
cela signifie que si vous avez un objet avec la getName méthode définie dans une
variable ${OBJ}, la syntaxe ${OBJ.name}est équivalente mais plus claire
que ${OBJ.getName()}. L'objet Python utilisé dans l'exemple précédent pourrait
donc être remplacé par l'implémentation Java suivante:
classe publique MyObject :
De nombreux objets Python standard, y compris les chaînes et les nombres, ont des
méthodes qui peuvent être utilisées avec la syntaxe de la variable étendue de
manière explicite ou explicite. Parfois, cela peut s'avérer très utile et réduire le
besoin de définir des variables temporaires, mais il est également facile de les
utiliser de manière excessive et de créer des données de test vraiment cryptées. Les
exemples suivants montrent quelques très bons usages.
*** Cas de test ***
Chaîne
$ { string } = Définir la variable abc
Log $ { string.upper () } # Logs 'ABC'
Log $ { string * 2 } # Logs 'abcabc'
Nombre
$ { number } = Définir la variable $ { -2 }
Log $ { number * 10 } # Logs -20 Log $ { number .__ abs __
() } # Logs 2
La syntaxe d'attribution des variables étendues est évaluée à l'aide des règles
suivantes:
Remarque
Les mots-clés utilisateur peuvent être créés dans des fichiers de scénarios de test , des
fichiers de ressources et des fichiers d'initialisation de suites de tests . Les mots-clés créés
dans les fichiers de ressources sont disponibles pour les fichiers qui les utilisent,
tandis que les autres mots-clés ne sont disponibles que dans les fichiers où ils sont
créés.
[Documentation]
Utilisé pour définir une documentation de mot-clé utilisateur .
[Mots clés]
Définit les balises pour le mot clé.
[Arguments]
Spécifie les arguments de mot-clé utilisateur .
[Revenir]
Spécifie les valeurs de retour du mot clé utilisateur .
[Abattre]
Spécifiez le démontage du mot-clé utilisateur .
[Temps libre]
Définit le délai d'expiration du mot clé utilisateur . Les délais d'attente sont discutés
dans une section qui leur est propre.
De même que pour les balises de test élémentaire , les étiquettes de mots-clés
utilisateur robot-et les robot:préfixes sont réservés aux fonctions spéciales par
Robot Framework lui-même. Les utilisateurs ne doivent donc utiliser aucune balise
avec ces préfixes, à moins d'activer la fonctionnalité spéciale.
Arguments positionnels
La manière la plus simple de spécifier des arguments (à part de ne pas les avoir du
tout) consiste à utiliser uniquement des arguments de position. Dans la plupart des
cas, c'est tout ce dont vous avez besoin.
La syntaxe est telle que le paramètre [Arguments] est indiqué en premier et que les
noms d’argument sont définis dans les cellules suivantes. Chaque argument est
dans sa propre cellule, en utilisant la même syntaxe qu'avec les variables. Le mot-
clé doit être utilisé avec autant d'arguments qu'il y a de noms d'argument dans sa
signature. Les noms d'argument réels n'ont pas d'importance pour le cadre, mais du
point de vue des utilisateurs, ils devraient être aussi descriptifs que possible. Il est
recommandé d'utiliser des lettres minuscules dans les noms de variables, soit sous
forme ${my_arg}, ${my arg}soit ${myArg}.
*** Mots clés ***
Un argument
[ Arguments ] $ { arg_name }
Log Argument obtenu $ { arg_name }
Trois arguments
[ Arguments ] $ { arg1 } $ { arg2 } $ { arg3 }
Log 1er argument: $ { arg1 } Log 2ème argument: $ { arg2 } Log 3ème
argument: $ { arg3 }
Valeurs par défaut avec les mots-clés de l'utilisateur
Lors de la création de mots-clés utilisateur, les arguments positionnels sont
suffisants dans la plupart des situations. Il est cependant parfois utile que les mots-
clés contiennent des valeurs par défautpour certains ou tous leurs arguments. Les
mots-clés utilisateur prennent également en charge les valeurs par défaut, et la
nouvelle syntaxe nécessaire n’ajoute pas beaucoup à la syntaxe de base déjà
décrite.
En bref, les valeurs par défaut sont ajoutées aux arguments, de sorte qu’il ya
d’abord le signe égal ( =), puis la valeur, par exemple ${arg}=default. Il peut y
avoir beaucoup d’arguments avec des paramètres par défaut, mais ils doivent tous
être donnés après les arguments positionnels normaux. La valeur par défaut peut
contenir une variable créée sur test, suite ou portée globale , mais les variables locales
du mot clé exécuteur ne peuvent pas être utilisées. À partir de Robot Framework
3.0, la valeur par défaut peut également être définie en fonction des arguments
antérieurs acceptés par le mot clé.
Remarque
La syntaxe des valeurs par défaut est sensible à l'espace. Les espaces avant le =signe ne sont
pas autorisés et les espaces possibles après lui sont considérés comme faisant partie de la
valeur par défaut elle-même.
Lorsqu'un mot clé accepte plusieurs arguments avec des valeurs par défaut et que
seuls certains d'entre eux doivent être remplacés, il est souvent utile d'utiliser
la syntaxe des arguments nommés . Lorsque cette syntaxe est utilisée avec des mots-
clés utilisateur, les arguments sont spécifiés sans la ${} décoration. Par exemple, le
deuxième mot-clé ci-dessus pourrait être utilisé comme ci-dessous
et ${arg1}obtiendrait toujours sa valeur par défaut.
*** Cas de test ***
Exemple
Deux arguments avec valeurs par défaut arg2 = nouvelle valeur
Un ou plusieurs arguments
[ Arguments ] $ { required } @ { rest }
Log Many $ { required } @ { rest }
Notez que si le dernier mot-clé ci-dessus est utilisé avec plusieurs arguments, le
second argument ${opt}obtient toujours la valeur donnée au lieu de la valeur par
défaut. Cela se produit même si la valeur donnée est vide. Le dernier exemple
illustre également comment un nombre variable d'arguments acceptés par un mot-
clé utilisateur peut être utilisé dans une boucle for . Cette combinaison de deux
fonctions plutôt avancées peut parfois être très utile.
Les mots-clés dans les exemples ci-dessus pourraient être utilisés, par exemple,
comme ceci:
*** Cas de test ***
Varargs avec des mots-clés utilisateur
N'importe quel nombre d'arguments
Tout nombre d'arguments arg
N'importe quel nombre d'arguments arg1 arg2 arg3 arg4
Un ou plusieurs arguments requis
Un ou plusieurs arguments arg1 arg2 arg3 arg4
Obligatoire, par défaut, Varargs requis
Obligatoire, par défaut, Varargs requis facultatif
Obligatoire, valeur par défaut, Varargs arg1 arg2 arg3 arg4 arg5
Positionnel et kwargs
[ Arguments ] $ { required } & { extra }
Log Many $ { required } @ { extra }
Exécuter de programme
[ Arguments ] @ { varargs } & { kwargs }
Exécuter le processus program.py @ { varargs } & { kwargs }
Ces types de mots-clés sont également utilisés de la même manière que les autres
mots-clés, sauf que les espaces et les traits de soulignement ne sont pas ignorés
dans leurs noms. Ils sont cependant insensibles à la casse comme les autres mots-
clés. Par exemple, le mot-clé dans l'exemple ci-dessus pourrait être utilisé
comme select x from list , mais pas comme Select x fromlist .
Les arguments incorporés ne prennent pas en charge les valeurs par défaut ou le
nombre variable d'arguments, contrairement aux arguments normaux. L'utilisation
de variables lors de l'appel de ces mots clés est possible, mais cela peut réduire la
lisibilité. Notez également que les arguments incorporés ne fonctionnent qu'avec
des mots-clés utilisateur.
Dans le mot - clé exemple ci - dessus , j'execute "ls" avec "-lh" correspond
seulement j'execute "$ {cmd}" avec "$ {} opts" . Cela est garanti parce que
l'expression régulière personnalisée [^"]+dans j'exécuter « $ {cmd: [^ »]} » signifie
qu'un argument correspondant ne peut pas contenir de guillemets Dans ce cas , il
n'y a pas besoin d'ajouter regexps personnalisés à l'autre. J'exécute la variante.
Pointe
Si vous citez des arguments, l'utilisation d'une expression régulière [^"]+ garantit que
l'argument ne correspond qu'à la première citation finale.
Certains caractères spéciaux doivent être échappés lorsqu'ils sont utilisés dans les
arguments intégrés personnalisés regexp. Tout d'abord, les accolades éventuelles de
fermeture ( }) dans le motif doivent être échappées avec une seule barre oblique
inverse ( \}), sinon l'argument se terminerait déjà par là. Ceci est illustré dans
l'exemple précédent avec le mot clé Today est $ {date: \ d {4 \} - \ d {2 \} - \ d {2
\}} .
La barre oblique inverse ( \ ) est un caractère spécial dans la syntaxe des
expressions régulières Python et doit donc être échappée si vous souhaitez avoir un
caractère de barre oblique inverse littérale. La séquence d'échappement la plus sûre
dans ce cas est quatre barres obliques inverses ( \\\\) mais, selon le caractère
suivant, deux barres obliques inverses peuvent suffire.
Notez également que les noms de mots-clés et les éventuels arguments incorporés
ne doivent pas être échappés en utilisant les règles d'échappement standard des
données de test . Cela signifie que, par exemple, les barres obliques inverses dans des
expressions telles ${name:\w+}que ne doivent pas être échappées.
Chaque fois que des expressions régulières d'argument incorporé personnalisé sont
utilisées, Robot Framework améliore automatiquement les expressions rationnelles
spécifiées afin qu'elles correspondent aux variables en plus du texte correspondant
au modèle. Cela signifie qu'il est toujours possible d'utiliser des variables avec des
mots-clés contenant des arguments incorporés. Par exemple, le scénario de test
suivant passerait en utilisant les mots-clés de l'exemple précédent.
*** Variables ***
$ { DATE } 2011-06-27
Remarque
Les mots-clés utilisateur peuvent également renvoyer plusieurs valeurs, qui peuvent
ensuite être affectées à plusieurs variables scalaires à la fois, à une variable de liste
ou à des variables scalaires et à une variable de liste. Plusieurs valeurs peuvent être
renvoyées simplement en spécifiant ces valeurs dans des cellules différentes après
le paramètre [Return] .
*** Cas de test ***
Une valeur de retour
$ { ret } = Renvoie l' argument One Value
Quelques mots-clés $ { ret }
Valeurs multiples
$ { a } $ { b } $ { c } = Retourne trois valeurs
@ { list } = Renvoyer trois valeurs
$ { scalar } @ { rest } = Retourne trois valeurs
[ Retour ] $ { valeur }
Avancée
@ { list } = Créer la liste foo baz
$ { index } = Trouver l'index baz @ { list } Devrait être égal
à $ { index } $ { 1 } $ { index } = Rechercher l'index non
existant @ { list } Devrait être égal à $ { index } $ { -1 }
Trouver l'index
[ Arguments ] $ { element } @ { items }
$ { index } = Définissez la variable $ { 0 }
: FOR $ { item } IN @ { items }
\ Retour du mot-clé si ' $ { item } ' == ' $ { element } ' $ {
index } \ $ { index } = Définir la variable $ { index + 1 }
Renvoyer le mot clé $ { -1 }
Remarque
Les deux valeurs renvoyées par le mot - clé et Retour de mot-clé sont disponibles depuis
Robot Framework 2.8.
Si le chemin est donné dans un format absolu, il est utilisé directement. Dans
d'autres cas, le fichier de ressources est d'abord recherché par rapport au répertoire
dans lequel se trouve le fichier d'importation. Si le fichier n'y est pas trouvé, il est
ensuite recherché dans les répertoires du chemin de recherche du module Python . Le
chemin peut contenir des variables et il est recommandé de les utiliser pour rendre
les chemins indépendants du système (par exemple, $ {RESOURCES}
/login_resources.html ou $ {RESOURCE_PATH} ). En outre, les barres obliques
( /) dans le chemin d'accès sont automatiquement remplacées par des barres
obliques inverses ( \ ) sous Windows.
*** Paramètres ***
Ressource myresources.html
Ressource ../data/resources.html
Ressource $ { RESSOURCES } /common.tsv
Les mots-clés utilisateur et les variables définis dans un fichier de ressources sont
disponibles dans le fichier qui utilise ce fichier de ressources. De même, tous les
mots-clés et variables des bibliothèques, fichiers de ressources et fichiers de
variables importés par ledit fichier de ressources sont également disponibles.
Les deux Libdoc et RIDE utilisent ces documentations, et ils sont naturellement
disponibles pour les fichiers de ressources d' ouverture de la personne. La première
ligne de la documentation d'un mot clé est consignée lors de son exécution, sinon
les documentations de fichier de ressources sont ignorées lors de l'exécution du test.
Nom d'entrée
[ Arguments ] $ { name }
Texte d'entrée username_field $ { name }
Alternativement, des fichiers variables peuvent être implémentés en tant que classes
Python ou Java que le framework instanciera. Dans ce cas également, il est possible
de créer des variables en tant qu’attributs ou de les extraire d’une méthode spéciale.
Tous les fichiers de données de test peuvent importer des variables à l'aide
du paramètre Variables de la table Setting, de la même manière que les fichiers de
ressources sont importés à l'aide du paramètre Resource . De même que pour les
fichiers de ressources, le chemin d'accès au fichier de variables importé est
considéré par rapport au répertoire dans lequel se trouve le fichier d'importation et,
s'il n'est pas trouvé, il est recherché dans les répertoires du chemin de
recherche du module . Le chemin peut également contenir des variables et les barres
obliques sont converties en barres obliques inverses sous Windows. Si un fichier
d'argument prend des arguments , ils sont spécifiés dans les cellules après le chemin et
peuvent également contenir des variables.
*** Paramètres ***
Variables myvariables.py
Variables ../data/variables.py
Variables $ { RESOURCES } /common.py
Variables Taking_arguments.py arg1 $ { ARG2 }
Toutes les variables d'un fichier de variables sont disponibles dans le fichier de
données de test qui les importe. Si plusieurs fichiers de variables sont importés et
qu'ils contiennent une variable portant le même nom, celle du fichier importé le
plus ancien est utilisée. De plus, les variables créées dans les tables de variables et
définies à partir de la ligne de commande remplacent les variables des fichiers de
variables.
Ligne de commande
Une autre façon d'utiliser des fichiers variables consiste à utiliser l'option de ligne
de commande --variablefile . Les fichiers de variables sont référencés en
utilisant un chemin vers eux et les arguments possibles sont joints au chemin avec
un signe deux-points ( :):
--variablefile myvariables.py
--variablefile path / variables.py
--variablefile /absolute/path/common.py
--variablefile taking_arguments.py:arg1:arg2
À partir de Robot Framework 2.8.2, les fichiers de variables utilisés depuis la ligne
de commande sont également recherchés à partir du chemin de recherche du module,
de la même manière que les fichiers de variables importés dans le tableau Setting.
Si un fichier de variables est fourni sous la forme d'un chemin d'accès Windows
absolu, les deux points après la lettre du lecteur ne sont pas considérés comme un
séparateur:
--variablefile C: \ path \ variables.py
Les variables de ces fichiers de variables sont globalement disponibles dans tous
les fichiers de données de test, de même que les variables individuelles définies avec
l' option --variable . Si les deux options --variablefile et --
variable sont utilisées et qu'il existe des variables avec les mêmes noms, celles
qui sont définies individuellement avec l' option --variable sont prioritaires.
Lorsque des fichiers de variables sont utilisés, ils sont importés en tant que modules
Python et tous leurs attributs globaux qui ne commencent pas par un trait de
soulignement ( _) sont considérés comme des variables. Comme les noms de
variable ne sont pas sensibles à la casse, les noms de majuscules et de minuscules
sont possibles, mais en général, les majuscules sont recommandées pour les
variables et les attributs globaux.
VARIABLE = "Un exemple de chaîne"
ANOTHER_VARIABLE = "C'est assez simple!"
INTEGER = 42
STRINGS = [ "un" , "deux" , "kolme" , "quatre" ]
NUMBERS = [ 1 , ENTIER , 3.14 ]
MAPPING = { "un" : 1 , "deux" : 2 , "trois" : 3 }
Pour rendre la création d'une variable de liste ou d'une variable de dictionnaire plus
explicite, il est possible de préfixer le nom de la variable avec LIST__ou DICT__,
respectivement:
à partir de collections import OrderedDict
Ces préfixes ne feront pas partie du nom de la variable finale, mais ils permettront à
Robot Framework de valider que la valeur est réellement similaire à une liste ou à
un dictionnaire. Avec les dictionnaires, la valeur stockée réelle est également
transformée en un dictionnaire spécial utilisé également lors de la création de
variables de dictionnaire dans la table Variable. Les valeurs de ces dictionnaires sont
accessibles en tant qu'attributs comme ${FINNISH.cat}. Ces dictionnaires sont
également classés, mais la conservation de l’ordre source nécessite également la
commande du dictionnaire d’origine.
Les variables dans les deux exemples ci-dessus pourraient être créées en utilisant
également le tableau Variable ci-dessous.
*** Variables ***
$ { VARIABLE } Un exemple de chaîne
$ { UNE AUTRE VARIABLE } C'est assez facile!
$ { INTEGER } $ { 42 }
@ { STRINGS } un deux kolme quatre
@ { NUMBERS } $ { 1 } $ { INTEGER } $ { 3.14 }
& { MAPPING } one = $ { 1 } deux = $ { 2 } trois =
$ { 3 }
@ { ANIMALS } chat chien
& { FINNISH } cat = kissa dog = koira
Remarque
Les variables ne sont pas remplacées dans les chaînes issues de fichiers variables. Par
exemple, VAR = "an ${example}"créerait une variable ${VAR}avec une valeur de chaîne
littérale, an ${example}indépendamment du fait que la variable ${example} existe ou non.
Les variables dans les fichiers de variables ne sont pas limitées à avoir uniquement
des chaînes ou d'autres types de base en tant que valeurs telles que les tables de
variables. Au lieu de cela, leurs variables peuvent contenir des objets. Dans
l'exemple ci-dessous, la variable ${MAPPING}contient une table de hachage Java avec
deux valeurs (cet exemple ne fonctionne que lors de l'exécution de tests sur
Jython).
à partir de java.util import Hashtable
MAPPING = Hashtable ()
MAPPING . mettre ( "un" , 1 )
MAPPING . mettre ( "deux" , 2 )
class MyObject :
def __init__ ( self , name ):
self . nom = nom
Comme les fichiers de variables sont créés à l'aide d'un langage de programmation
réel, ils peuvent être dotés d'une logique dynamique pour définir les variables.
importation os
importation aléatoire
import temps
AREA1 = get_area ( 1 )
AREA2 = get_area ( 2 )
Lorsque Robot Framework traite des fichiers de variables, tous les attributs qui ne
commencent pas par un trait de soulignement doivent être des variables. Cela
signifie que même les fonctions ou les classes créées dans le fichier de variables ou
importées d’ailleurs sont considérées comme des variables. Par exemple, le dernier
exemple contiendrait les variables ${math} et ${get_area}en plus
de ${AREA1}et ${AREA2}.
AREA1 = _get_area ( 1 )
AREA2 = _get_area ( 2 )
S'il existe un grand nombre d'autres attributs, au lieu de les préfixer, il est souvent
plus facile d'utiliser un attribut spécial __all__et de lui donner une liste de noms
d'attributs à traiter en tant que variables.
importer des maths
AREA1 = get_area ( 1 )
AREA2 = get_area ( 2 )
Remarque
L' __all__attribut est également et à l'origine utilisé par Python pour déterminer les attributs
à importer lors de l'utilisation de la syntaxe from modulename import *.
L'exemple factice ci-dessous montre comment utiliser des arguments avec des
fichiers de variables. Dans un exemple plus réaliste, l'argument peut être un chemin
d'accès à un fichier texte externe ou à une base de données à partir duquel lire les
variables.
variables1 = { 'scalar' : 'Variable scalaire' ,
'LIST__list' : [ 'List' , 'variable' ]}
variables2 = { 'scalar' : 'Une autre valeur' ,
'LIST__list' : [ 'Some' , 'other ' , ' value ' ],
' extra ' : ' variables1 n'a pas du tout ' }
la mise en oeuvre
Les classes Python doivent avoir le même nom que le module dans
lequel elles se trouvent.
Les classes Java doivent vivre dans le package par défaut.
Les chemins d' accès aux classes Java doivent se terminer
par .java ou .class . Le fichier de classe doit exister dans les deux cas.
Lorsque des variables sont définies directement dans une instance, tous les attributs
contenant des valeurs appelables sont ignorés pour éviter de créer des variables à
partir des méthodes possibles de l'instance. Si vous avez réellement besoin de
variables appelables, vous devez utiliser d'autres approches pour créer des fichiers
variables.
Exemples
Les premiers exemples créent des variables à partir d'attributs utilisant Python et
Java. Les deux créent des variables ${VARIABLE}et @{LIST}des attributs de classe
et ${ANOTHER VARIABLE}d'un attribut d'instance.
class StaticPythonExample ( object ):
variable = 'value'
LIST__list = [ 1 , 2 , 3 ]
_not_variable = 'commence par un trait de soulignement'
public Map < String , String > getVariables ( String arg1 , String
arg2 ) {
HashMap < String , String > variables = new HashMap < String ,
String > ();
variables . put ( "variable dynamique" , arg1 + "" + arg2 );
les variables de retour ;
}
}
Remarque
Le support YAML est nouveau dans Robot Framework 2.9. À partir de la version 2.9.2,
la distribution JAR autonome contient PyYAML par défaut.
Les fichiers de variables YAML peuvent être utilisés exactement comme les
fichiers de variables normaux à partir de la ligne de commande en utilisant
l' option --variablefile , dans le tableau de paramètres utilisant le
paramètre Variables , et dynamiquement à l'aide du mot clé Import Variables . La
seule chose à retenir est que les chemins d'accès aux fichiers YAML doivent
toujours se terminer par l' extension .yaml .
Si le fichier YAML ci-dessus est importé, il créera exactement les mêmes variables
que la table de variables suivante:
*** Variables ***
$ { STRING } Bonjour tout le monde!
$ { INTEGER } $ { 42 }
@ { LIST } un deux
& { DICT } one = yksi two = kaksi
Les fichiers YAML utilisés comme fichiers de variables doivent toujours être des
mappages au niveau supérieur. Comme le montre l'exemple ci-dessus, les clés et les
valeurs du mappage deviennent respectivement des noms de variables et des
valeurs. Les valeurs de variable peuvent être tout type de données pris en charge
par la syntaxe YAML. Si les noms ou les valeurs contiennent des caractères non-
ASCII, les fichiers de variables YAML doivent être codés en UTF-8.
1. Créé en tant que mot-clé utilisateur dans le même fichier où il est utilisé. Ces
mots-clés ont la plus haute priorité et sont toujours utilisés, même s’il existe
d’autres mots-clés portant le même nom.
2. Créé dans un fichier de ressources et importé directement ou indirectement à
partir d'un autre fichier de ressources. C'est la deuxième priorité.
3. Créé dans une bibliothèque de test externe. Ces mots-clés sont utilisés s'il n'y
a pas de mots-clés d'utilisateur portant le même nom. Toutefois, s'il existe un
mot-clé portant le même nom dans la bibliothèque standard, un
avertissement s'affiche.
4. Créé dans une bibliothèque standard. Ces mots clés ont la plus faible
priorité.
Les fichiers de ressources sont spécifiés dans le nom complet du mot clé, tout
comme les noms de bibliothèque. Le nom de la ressource est dérivé du nom de base
du fichier de ressources sans l'extension de fichier. Par exemple, le mot-
clé Exemple dans un fichier de ressources myresources.html peut être utilisé
comme mes ressources.Exemple . Notez que cette syntaxe ne fonctionne pas si
plusieurs fichiers de ressources ont le même nom de base. Dans ce cas, les fichiers
ou les mots-clés doivent être renommés. Le nom complet du mot-clé est insensible
à la casse, à l'espace et au trait de soulignement, de même que les noms de mots-
clés normaux.
Remarque
Bien que le mot-clé ait la bibliothèque de mots dans son nom, il fonctionne également avec
les fichiers de ressources. Comme mentionné ci-dessus, les mots-clés dans les ressources ont
toujours une priorité plus élevée que les mots-clés dans les bibliothèques.
L' ordre de recherche Set Library accepte une liste ordonnée ou des bibliothèques
et des ressources en tant qu'arguments. Lorsqu'un nom de mot clé dans les données
de test correspond à plusieurs mots clés, la première bibliothèque ou ressource
contenant le mot clé est sélectionnée et cette implémentation de mot clé est
utilisée. Si le mot clé n'est trouvé dans aucune des bibliothèques ou ressources
spécifiées, l'exécution échoue en cas de conflit de la même manière que lorsque
l'ordre de recherche n'est pas défini.
Pour plus d'informations et d'exemples, consultez la documentation du mot clé.
2.8.2 Temporisation
Les mots-clés peuvent être problématiques dans des situations où ils sont
extrêmement longs à exécuter ou simplement suspendus sans fin. Robot
Framework vous permet de définir des délais d'attente à la fois pour les scénarios
de test et les mots - clés utilisateur . Si un test ou un mot-clé n'est pas terminé dans le
délai imparti, le mot-clé en cours d'exécution est stoppé. Arrêter les mots-clés de
cette manière peut laisser la bibliothèque ou le système testé dans un état instable,
et les délais d'attente ne sont recommandés que si aucune option plus sûre n'est
disponible. En général, les bibliothèques doivent être implémentées de sorte que les
mots-clés ne puissent pas se bloquer ou qu'ils disposent de leur propre mécanisme
de temporisation, si nécessaire.
L'utilisation d'un [Timeout] vide signifie que le test n'a pas de délai d'attente, même
lorsque le Délai de test est utilisé. Il est également possible d'utiliser de la
valeur NONEà cette fin.
Le message d'erreur par défaut affiché lorsqu'un délai d'attente de test se produit
est Test timeout <time> exceeded. Il est également possible d'utiliser des messages
d'erreur personnalisés et ces messages sont écrits dans les cellules après le délai
d'expiration. Le message peut être divisé en plusieurs cellules, de même que les
documentations. La valeur du délai d'attente et le message d'erreur peuvent contenir
des variables.
Passer outre
[ Documentation ] Remplacer par défaut, utiliser 10 secondes
[ Timeout ] 10
Certains arguments mot-clé
Message personnalisé
[ Documentation ] Remplacez par défaut et utilisez un message
personnalisé
[ Timeout ] 1min 10s Ceci est mon erreur personnalisée
Certains arguments mot-clé
Les variables
[ Documentation ] Il est possible d'utiliser des variables aussi
[ Timeout ] $ { TIMEOUT }
Un argument de mot clé
Pas de timeout
[ Documentation ] Le délai d'expiration vide signifie qu'il n'y a
pas de délai d'attente, même si le délai d'expiration du test a été
utilisé.
[ Timeout ]
Un argument mot clé
À partir de Robot Framework 3.0, le délai d'attente peut être spécifié en tant que
variable afin que la valeur de la variable soit donnée en tant
qu'argument. L'utilisation de variables globales fonctionne déjà avec les versions
précédentes.
*** Mots clés ***
Mot-clé chronométré
[ Documentation ] Définissez uniquement la valeur du délai
d'attente et non le message personnalisé.
[ Temporisation ] 1 minute 42 secondes
Faire quelque chose
Faire autre chose
Les boucles for peuvent être utilisées avec les scénarios de test et les mots-clés
utilisateur. Sauf pour les cas vraiment simples, les mots-clés utilisateur sont
meilleurs, car ils masquent la complexité introduite par les boucles for. La syntaxe
de base pour les boucles FOR item IN sequenceest dérivée de Python, mais une
syntaxe similaire est également possible dans les scripts shell ou Perl.
Les mots-clés utilisés dans la boucle for se trouvent sur les lignes suivantes et
doivent être indentés une cellule à droite. Lorsque vous utilisez le format texte brut ,
les cellules en retrait doivent être échappées avec une barre oblique inverse , mais avec
d'autres formats de données, les cellules peuvent être laissées vides. La boucle for
se termine lorsque l'indentation revient à la normale ou que la table se termine.
*** Cas de test ***
Exemple 1
: POUR $ { animal } EN chien chat
\ Log $ { animal }
\ Log 2nd mot clé
Journal en dehors de la boucle
Exemple 2
: FOR $ { var } IN one two
... $ { 3 } quatre $ { last }
\ Log $ { var }
La boucle for de l' exemple 1 ci-dessus est exécutée deux fois, de sorte que la
variable de boucle ${animal}a d'abord la valeur catet ensuite dog. La boucle est
composée de deux mots-clés Log . Dans le deuxième exemple, les valeurs de
boucle sont divisées en deux lignes et la boucle est exécutée cinq fois.
Il est souvent pratique d'utiliser des boucles avec des variables de liste . Ceci est
illustré par l'exemple ci-dessous, où @{ELEMENTS}contient une liste d'éléments
arbitrairement longue et le mot-clé Elément de départ est utilisé avec chacun d'eux
un par un.
*** Cas de test ***
Exemple
: POUR $ { element } IN @ { ELEMENTS }
\ Start Element $ { element }
S'il y a beaucoup de valeurs à itérer, il est souvent pratique de les organiser sous les
variables de boucle, comme dans la première boucle de l'exemple ci-dessous:
*** Cas de test ***
Trois variables de boucle
: POUR $ { index } $ { english } $ { finnois } IN
... 1 chat kissa
... 2 koira de chien
... 3 chevaux hevonen
\ Ajouter au dictionnaire $ { english } $ { finnois } $ { index
}
: FOR $ { name } $ { id } IN @ { EMPLOYERS }
\ Créer $ { name } $ { id }
De même que pour les autres boucles, la boucle for-in-range commence par :FORet
la variable loop se trouve dans la cellule suivante. Dans ce format, il ne peut y avoir
qu’une seule variable de boucle et il contient l’indice de boucle en cours. La cellule
suivante doit contenir IN RANGEet les cellules suivantes limites de boucle.
À partir de Robot Framework 2.8.7, il est possible d'utiliser des valeurs flottantes
pour la limite inférieure, la limite supérieure et l'étape.
*** Cas de test ***
Seule la limite supérieure
[ Documentation ] Boucles sur les valeurs de 0 à 9
: POUR $ { index } DANS LA GAMME 10
\ Log $ { index }
Début et fin
[ Documentation ] Boucles sur des valeurs de 1 à 10
: POUR $ { index } DANS LA GAMME 1 11
\ Log $ { index }
Pas négatif
[ Documentation ] Boucles sur les valeurs 13, 3 et -7
: POUR $ { index } DANS LA GAMME 13 -13 -10
\ Log $ { index }
Arithmétique
[ Documentation ] Arithmétique avec variable
: FOR $ { index } IN RANGE $ { var } +1
\ Log $ { index }
Paramètres de flottement
[ Documentation ] Boucles sur les valeurs 3.14, 4.34 et 5.54
: POUR $ { index } DANS LA GAMME 3.14 6.09 1.2
\ Log $ { index }
Par exemple, les deux cas de test suivants font la même chose:
*** Variables ***
@ { LISTE } a b c
Pour en énumérer
: FOR $ { index } $ { item } IN ENUMERATE @ { LIST }
\ Mon mot clé $ { index } $ { item }
Tout comme pour les boucles régulières, vous pouvez effectuer une boucle sur
plusieurs valeurs par itération de boucle tant que le nombre de valeurs de votre liste
est divisible par le nombre de variables de boucle (à l'exclusion de la première
variable d'index).
*** Cas de test ***
Pour-en-énumérer avec deux valeurs par itération
: POUR $ { index } $ { english } $ { finlandais } IN ENUMERATE
... cat kissa
... chien koira
... cheval hevonen
\ Ajouter au dictionnaire $ { english } $ { finlandais } $ {
index }
Les boucles pour énumération sont nouvelles dans Robot Framework 2.9.
For-in-zip
: POUR $ { number } $ { name } IN ZIP $ { NUMBERS } $ { NAMES }
\ Number doit être nommé $ { number } $ { name }
De même que pour les boucles for-in-range et for-in-enumerate, les boucles for-in-
zip nécessitent que la cellule après les variables de boucle soit lue IN ZIP.
Les valeurs utilisées avec les boucles for-in-zip doivent être des listes ou des objets
de type liste, et le nombre de variables de boucle et de listes doit être le même. Le
bouclage s'arrêtera lorsque la liste la plus courte sera épuisée.
Notez que toutes les listes utilisées avec pour en-zip devrait généralement être
donné comme variables scalaires aiment ${list}. Une variable de liste ne fonctionne
que si ses éléments sont eux-mêmes des listes.
Exit For Loop et Exit For Loop Si les mots-clés peuvent être utilisés directement
dans une boucle for ou dans un mot-clé utilisé par la boucle. Dans les deux cas,
l'exécution du test se poursuit après la boucle. C'est une erreur d'utiliser ces mots-
clés en dehors d'une boucle for.
*** Cas de test ***
Exemple de sortie
$ { text } = Définir la variable $ { EMPTY }
: FOR $ { var } IN one two
\ Run Keyword Si ' $ { var } ' == 'deux' Quittez For Loop
\ $ { text } = Définir la variable $ { text } $ { var }
doit être égale à $ { text } one
Dans l'exemple ci-dessus, il serait possible d'utiliser Exit For Loop If au lieu
d'utiliser Exit For Loop avec Run Keyword If . Pour plus d'informations sur ces
mots clés, y compris d'autres exemples d'utilisation, consultez leur documentation
dans la bibliothèque BuiltIn .
Remarque
Exit For Loop Si un mot clé a été ajouté dans Robot Framework 2.8.
Continuer pour la boucle et continuer pour la boucle Si les mots-clés peuvent être
utilisés directement dans une boucle for ou dans un mot-clé utilisé par la
boucle. Dans les deux cas, le reste des mots-clés dans cette itération est ignoré et
l'exécution continue à partir de l'itération suivante. Si ces mots-clés sont utilisés
lors de la dernière itération, l'exécution se poursuit après la boucle. C'est une erreur
d'utiliser ces mots-clés en dehors d'une boucle for.
*** Cas de test ***
Continuer Exemple
$ { text } = Définir la variable $ { EMPTY }
: FOR $ { var } IN un deux trois
\ Continue For Loop Si ' $ { var } ' == 'two'
\ $ { text } = Définir la variable $ { text } $ { var }
Devrait être égale $ { text } onethree
Pour plus d'informations sur ces mots clés, y compris des exemples d'utilisation,
consultez leur documentation dans la bibliothèque BuiltIn .
Remarque
Les deux Continuer boucle For et Continuer boucle For Si ont été ajoutés dans le cadre Robot
2.8.
Remarque
Les versions antérieures à Robot Framework 3.0 n'avaient pas le script du robot . Au lieu de
cela, ils avaient pybot , jybot et ipybot qui exécutaient les tests avec Python, Jython et
IronPython, respectivement. Ces scripts sont toujours installés, mais il est prévu de les
déprécier et de les supprimer ultérieurement.
Quelle que soit l'approche d'exécution, le ou les chemins d'accès aux données de
test à exécuter sont donnés en tant qu'argument après la commande. De plus,
différentes options de ligne de commande peuvent être utilisées pour modifier
l'exécution du test ou générer des sorties de plusieurs manières.
Le format d'option longue est insensible à la casse, ce qui facilite l'écriture des
noms d'options dans un format facile à lire. Par exemple, --
SuiteStatLevel est équivalent à, mais plus facile à lire que --
suitestatlevel .
Certaines options peuvent être spécifiées plusieurs fois. Par exemple, --variable
VAR1:value --variable VAR2:anotherdéfinit deux variables. Si les options qui ne
prennent qu'une valeur sont utilisées plusieurs fois, la dernière valeur est effective.
Désactiver les options en acceptant aucune valeur
Les options n'acceptant aucune valeur peuvent être désactivées en utilisant à
nouveau la même option avec le nopréfixe ajouté ou supprimé. La dernière option a
la priorité quel que soit le nombre de fois où les options sont utilisées. Par
exemple, --dryrun --dryrun --nodryrun --nostatusrc --statusrcn'activerait pas
le mode de fonctionnement à sec et renverrait un statut normal rc.
Remarque
Motifs simples
De nombreuses options de ligne de commande prennent des arguments en tant
que modèles simples . Ces modèles globaux correspondent aux règles suivantes:
Exemples:
--test Exemple * # Correspond aux tests avec le nom commençant par
'Exemple', sans tenir compte de la casse.
--incluez f ?? # Correspond aux tests avec un tag qui commence par 'f'
ou 'F' et comporte trois caractères.
Motifs d'étiquette
La plupart des options associées aux balises acceptent les arguments
comme modèles de balises . Ils ont toutes les mêmes caractéristiques que
les modèles simples , mais ils soutiennent également AND, ORet les NOTopérateurs
expliqués ci - dessous. Ces opérateurs peuvent être utilisés pour combiner plusieurs
balises ou motifs individuels.
AND ou &
Le motif entier correspond si le motif sur le côté gauche correspond mais pas
sur le côté droit. S'il est utilisé plusieurs fois, aucun des motifs après le
premier NOTne doit correspondre:
--include fooNOTbar # Correspond aux tests contenant la balise
'foo' mais pas la balise 'bar'.
--exclude xxNOTyyNOTzz # Correspond aux tests contenant le tag
'xx' mais pas au tag 'yy' ou au tag 'zz'.
Bien que la correspondance des balises soit insensible à la casse, tous les opérateurs
sont sensibles à la casse et doivent être écrits avec des majuscules. Si les balises
elles-mêmes contiennent des majuscules AND, ORou NOT, elles doivent être spécifiées
en utilisant des lettres minuscules pour éviter une utilisation accidentelle par
l'opérateur:
--include port # Correspond aux tests contenant la balise 'port', sans
tenir compte de la casse
--include PORT # Correspond aux tests contenant la balise 'P' ou 'T',
sans tenir compte de la casse
--exclure handoverORportNOTnotification
Remarque
OR L'opérateur est nouveau dans Robot Framework 2.8.4.
Remarque
La possibilité d'avoir des espaces dans des valeurs en les entourant entre guillemets est
nouvelle dans Robot Framework 2.9.2.
Codes retour
Les scripts runner communiquent l'état d'exécution du test au système les exécutant
à l'aide des codes retour. Lorsque l'exécution démarre avec succès et qu'aucun test
critique échoue, le code retour est zéro. Tous les codes de retour possibles sont
expliqués dans le tableau ci-dessous.
RC Explication
Les codes de retour doivent toujours être facilement disponibles après l'exécution,
ce qui facilite la détermination automatique du statut d'exécution global. Par
exemple, dans le shell bash, le code retour est dans une variable spéciale $?et dans
Windows, il est %ERRORLEVEL% variable. Si vous utilisez un outil externe pour
exécuter des tests, consultez sa documentation pour savoir comment obtenir le code
de retour.
Le code de retour peut être défini sur 0 même s'il existe des défaillances critiques à
l'aide de l' option de ligne de commande --NoStatusRC . Cela peut être utile,
par exemple, dans les serveurs d'intégration continue où le post-traitement des
résultats est nécessaire avant que l'état général de l'exécution du test puisse être
déterminé.
Remarque
Escapades disponibles
Et ampli ( paren1
@ à % pour cent
\ bslash | tuyau
: côlon ? quête
{ bouclé1 ; sémic
} bouclé2 / sabrer
$ dollar espace
! exclam [ square1
> gt ] square2
# hacher * étoile
< lt
Les exemples suivants rendent la syntaxe plus claire. Dans le premier exemple, les
métadonnées Xobtiennent la valeur Value with spaceset dans le second exemple, la
variable ${VAR}est affectée à"Hello, world!" :
--escape space: _ --metadata X: Value_with_spaces
-E espace: SP -E quot: QU -E virgule: CO -E exclam: EX -v VAR:
QUHelloCOSPworldEXQU
Notez que tous les arguments de ligne de commande donnés, y compris les chemins
d'accès aux données de test, sont échappés. Les séquences de caractères
d'échappement doivent donc être sélectionnées avec soin.
Remarque
Dans l'exemple ci-dessus, le séparateur entre les options et leurs valeurs est un
espace unique. Dans Robot Framework 2.7.6 et versions ultérieures, il est possible
d'utiliser un signe égal (=) ou un nombre quelconque d'espaces. Par exemple, les
trois lignes suivantes sont identiques:
--name Un exemple
--name = un exemple
--name Un exemple
Si les fichiers d'argument contiennent des caractères non-ASCII, ils doivent être
enregistrés en utilisant le codage UTF-8.
Dans les environnements de type UNIX, les scripts shell constituent un mécanisme
simple mais puissant pour créer des scripts de démarrage personnalisés. Les
fichiers batch Windows peuvent également être utilisés, mais ils sont plus limités et
souvent plus compliqués. Une alternative indépendante de la plate-forme utilise
Python ou un autre langage de programmation de haut niveau. Indépendamment de
la langue, il est recommandé d'utiliser des noms d'option longs, car ils sont plus
faciles à comprendre que les noms abrégés.
Dans les premiers exemples, les mêmes tests Web sont exécutés avec différents
navigateurs et les résultats sont ensuite combinés. C'est facile avec les scripts shell,
car pratiquement vous ne listez que les commandes nécessaires:
#! / bin / bash
robot --variable BROWSER: Firefox --name Firefox --log none --report none -
-output out / fx.xml login
robot --variable BROWSER: IE --name IE --log none --report none --output
out / ie.xml login
rebot --name Login --outputdir --output login.xml out / fx.xml out / ie.xml
L'implémentation de l'exemple ci-dessus avec des fichiers batch Windows n'est pas
très compliqué non plus. La chose la plus importante à retenir est que, comme
les scripts de robot et de rebot sont implémentés en tant que fichiers de
commandes sous Windows, l' appel doit être utilisé lors de leur exécution à partir
d'un autre fichier de commandes. Sinon, l'exécution se terminerait lorsque le
premier fichier de commandes est terminé.
@ echo off
call robot --variable BROWSER: Firefox --name Firefox --log none --report
none --output out \ fx.xml connexion
robot d' appel - variable BROWSER: IE --name IE --log none - signaler
aucun --output out \ ie.xml appel de connexion
rebot --name Login --outputdir --output login.xml out \ fx.xml out \
ie.xml
Dans les exemples suivants, les fichiers jar sous le répertoire lib sont placés
dans CLASSPATH avant de lancer l'exécution du test. Dans ces exemples, les scripts
de démarrage exigent que les chemins vers les données de test exécutées soient
fournis en tant qu’arguments. Il est également possible d'utiliser les options de ligne
de commande librement, même si certaines options ont déjà été définies dans le
script. Tout cela est relativement simple en utilisant bash:
#! / bin / bash
cp = .
pour pot dans lib / *. jar ; faire
cp = $ cp : pot $
fait
export CLASSPATH = $ cp
définir CP = .
pour %% jar dans ( lib \ *. jar ) do (
appel : set_cp %% jar
)
set CLASSPATH = % CP%
goto : eof
Les échecs causés par les cas de test eux-mêmes ou par les mots-clés qu'ils utilisent
peuvent parfois être difficiles à déboguer. Si le message d'erreur, par exemple,
indique qu'un mot clé est utilisé avec un nombre incorrect d'arguments, le problème
est évidemment facile, mais si un mot clé est manquant ou échoue de manière
inattendue, trouver la cause peut être plus difficile. Le premier endroit pour
rechercher plus d'informations est la section des erreurs d'exécution dans le fichier
journal. Par exemple, une erreur concernant une importation de bibliothèque de test
ayant échoué peut bien expliquer pourquoi un test a échoué en raison d'un mot clé
manquant.
Configurations et démontages
Et démontages setups peuvent être utilisés sur la suite de tests , cas de test et mot - clé
utilisateur niveaux.
Configuration de la suite
Si une suite de tests a une configuration, elle est exécutée avant ses tests et ses
suites enfants. Si la configuration de la suite est réussie, l'exécution du test se
poursuit normalement. En cas d'échec, tous les scénarios de test contenus dans la
suite et ses suites enfants sont marqués comme ayant échoué. Les tests et les
configurations et démontages de suites possibles dans les suites de tests enfants ne
sont pas exécutés.
Démontage de la suite
Si une suite de tests a un démontage, elle est exécutée après tous les cas de test et
suites enfants. Les démontages de suites sont exécutés quel que soit l'état du test et
même si l'installation de la suite correspondante échoue. Si le démontage de la suite
échoue, tous les tests de la suite sont marqués comme ayant échoué par la suite
dans les rapports et les journaux.
Configuration du test
Test de démontage
De même que le démontage des suites, les démontages de tests sont principalement
utilisés pour les activités de nettoyage. Ils sont également exécutés complètement
même si certains de leurs mots-clés échouent.
Les mots-clés utilisateur ne peuvent pas avoir de configuration, mais ils peuvent
comporter des démontages qui fonctionnent exactement comme les autres
démontages. Les démontages de mots-clés sont exécutés après l'exécution du mot-
clé, quel que soit son état, et ils sont exécutés complètement même si certains de
leurs mots-clés échouent.
Ordre d'exécution
Les scénarios de test dans une suite de tests sont exécutés dans le même ordre qu'ils
sont définis dans le fichier de scénario de test. Les suites de tests à l'intérieur d'une
suite de tests de niveau supérieur sont exécutées dans un ordre alphabétique non
sensible à la casse basé sur le nom du fichier ou du répertoire. Si plusieurs fichiers
et / ou répertoires sont donnés à partir de la ligne de commande, ils sont exécutés
dans l'ordre indiqué.
S'il est nécessaire d'utiliser certains ordres d'exécution de suites de tests dans un
répertoire, il est possible d'ajouter des préfixes tels que 01 et 02 dans les noms de
fichiers et de répertoires. Ces préfixes ne sont pas inclus dans le nom de la suite de
tests générée s'ils sont séparés du nom de base de la suite par deux traits de
soulignement:
01__my_suite.html -> Ma suite
02__another_suite.html -> Une autre suite
Si l'ordre alphabétique des suites de tests à l'intérieur des suites pose problème, une
bonne solution consiste à les donner séparément dans l'ordre requis. Cela conduit
facilement à des commandes de démarrage trop longues, mais les fichiers
d'argument permettent de classer les fichiers de manière agréable sur un fichier par
ligne.
Passer l'exécution
Généralement, les cas de test, les configurations et les démontages sont considérés
comme réussis si tous les mots-clés qu'ils contiennent sont exécutés et qu'aucun
d'entre eux n'échoue. À partir de Robot Framework 2.8, il est également possible
d'utiliser les mots-clés intégrés dans la section Exécution et exécution du passage pour
arrêter l'exécution avec le statut PASS et ignorer les mots-clés restants.
Lorsqu'ils sont utilisés dans une configuration ou une suppression (suite, test ou
mot-clé), ces mots-clés réussissent cette configuration ou cette
suppression. Les démontages possibles des mots-clés démarrés sont
exécutés. L'exécution du test ou les statuts ne sont pas affectés autrement.
Lorsqu'ils sont utilisés dans un scénario de test en dehors de la configuration
ou du démontage, les mots-clés réussissent ce cas de test particulier. Les
tests possibles et les démontages de mots-clés sont exécutés.
Les défaillances possibles pouvant survenir avant que ces mots-clés ne soient
utilisés, ainsi que les défaillances lors des démontages exécutés par la suite,
échoueront à l'exécution.
Il est obligatoire de donner un message expliquant pourquoi l'exécution a été
interrompue et il est également possible de modifier les balises de test
élémentaire. Pour plus de détails et des exemples d'utilisation, consultez
la documentation de ces mots clés .
Passer l’exécution au milieu d’un test, d’une configuration ou d’un démontage doit
être utilisé avec précaution. Dans le pire des cas, cela conduit à des tests qui
ignorent toutes les pièces susceptibles de révéler des problèmes dans l’application
testée. Dans les cas où l'exécution ne peut pas continuer sur des facteurs externes, il
est souvent plus sûr d'échouer le test élémentaire et de le rendre non critique .
Exécuter des mots clés et ignorer les erreurs et exécuter les mots clés
et les erreurs attendues
Mots clés intégrés Exécuter le mot clé et ignorer les erreurs et exécuter le mot clé et
les erreurs attendues gèrent les échecs afin que l'exécution du test ne soit pas
terminée immédiatement. Bien que l'utilisation de ces mots clés à cette fin ajoute
souvent une complexité supplémentaire aux cas de test, les fonctionnalités
suivantes méritent d'être prises en compte pour faciliter la poursuite des échecs.
La valeur de retour des mots clés en échec, éventuellement attribués à une variable,
est toujours le Python None.
Exécuter les mots - clés et continuer en cas d' échec mot - clé
Mot- clé intégré Exécuter un mot- clé et continuer en cas d'échec permet de
convertir toute défaillance en une défaillance continue. Ces échecs sont traités par
le framework de la même manière que les échecs continus provenant des mots-clés
de la bibliothèque.
Remarque
Le préfixe utilisé avec les balises réservées est susceptible d'être modifié à robot:l'avenir, ce
qui signifie que la robot-exitbalise sera renommée. Voir le numéro 2539 pour plus de
détails.
Pressage Ctrl-C
L'exécution est arrêtée lorsque vous Ctrl-Cappuyez sur la console où les tests sont
en cours d'exécution. Lors de l'exécution des tests sur Python, l'exécution est
arrêtée immédiatement, mais avec Jython, elle ne se termine qu'après la fin du mot
clé en cours d'exécution.
Les signaux ont la même limitation sur Jython que sur appuyer Ctrl-C. De même,
le deuxième signal arrête l'exécution avec force.
Remarque
Remarque
--exitonerror est nouveau dans Robot Framework 2.8.6.
Il est également possible d'ignorer les démontages lorsque l'exécution est arrêtée à
l'aide de l' option --skipteardownonexit . Cela peut être utile si, par
exemple, les tâches de nettoyage prennent beaucoup de temps.
Remarque
Les versions antérieures à Robot Framework 3.0 n'installaient le script rebot qu'avec
Python et utilisaient respectivement des scripts jyrebot et ipyrebot avec Jython et
IronPython. Ces scripts sont toujours installés, mais il est prévu de les déprécier et de les
supprimer ultérieurement.
Une autre utilisation courante est la création du fichier de sortie uniquement lors de
l'exécution de tests (la --log NONE --report NONEgénération de journaux et de
rapports peut être désactivée avec ) et la génération de journaux et de rapports
ultérieurement. Les tests peuvent, par exemple, être exécutés sur des
environnements différents, des fichiers de sortie collectés dans un emplacement
central, des rapports et des journaux créés à cet endroit. Cette approche peut
également fonctionner très bien si la génération de rapports et de journaux prend
beaucoup de temps lors de l'exécution de tests sur Jython. La désactivation de la
génération de rapports et de rapports et leur génération ultérieure avec Rebot
permettent de gagner beaucoup de temps et d'utiliser moins de mémoire.
Lorsque les sorties sont combinées, une nouvelle suite de tests de niveau supérieur
est créée afin que les suites de tests des fichiers de sortie donnés soient ses suites
enfants. Cela fonctionne de la même manière lorsque plusieurs fichiers ou répertoires
de données de test sont exécutés , et dans ce cas également, le nom de la suite de tests
de niveau supérieur est créé en joignant des noms de suites enfants avec une
perluète (&) et des espaces. Ces noms générés automatiquement ne sont pas très
bons et c'est souvent une bonne idée d'utiliser --name pour donner un nom plus
significatif:
rebot --name Browser_Compatibility firefox.xml opera.xml safari.xml
ie.xml
rebot --include smoke --name Smoke_Tests c: \ results \ *. xml
La façon dont la fusion fonctionne dans la pratique est expliquée dans les sections
suivantes traitant de ses deux principaux cas d'utilisation.
Le message des tests fusionnés contient une note indiquant que les résultats ont été
remplacés. Le message indique également l’ancien statut et le message du test.
Les résultats fusionnés doivent toujours avoir la même suite de tests de niveau
supérieur. Les tests et les suites dans les sorties fusionnées qui ne sont pas trouvées
dans la sortie d'origine sont ajoutés dans la sortie résultante. Comment cela
fonctionne-t-il dans la section suivante.
Remarque
La fusion des résultats ré-exécutés est une nouvelle fonctionnalité de Robot Framework
2.8.4. Avant Robot Framework 2.8.6, de nouveaux tests ou suites dans les sorties fusionnées
ont été ignorés et la fusion a été effectuée à l'aide de l' option --rerunmerge .
Lors de la fusion de sorties comme celle-ci, la sortie résultante contient tous les
tests et suites trouvés dans tous les fichiers de sortie donnés. Si un test est trouvé à
partir de plusieurs sorties, les derniers résultats remplacent les précédents, comme
expliqué dans la section précédente. Cette stratégie de fusion exige également que
les suites de tests de niveau supérieur soient identiques dans toutes les sorties.
L' option --extension prend une extension de fichier comme argument et seuls
les fichiers portant cette extension sont analysés. Cela n'a toutefois d'effet que lors
de l'exécution de répertoires, pas lors de l'exécution de fichiers individuels spécifiés
explicitement. Cela n'affecte pas non plus les fichiers pouvant être utilisés
comme fichiers de ressources . S'il est nécessaire d'analyser plusieurs types de
fichiers, il est possible d'utiliser deux points :pour séparer les extensions. Les
extensions correspondantes ne sont pas sensibles à la casse.
robot --extension chemin du robot / à / tests
robot --extension ROBOT: chemin TXT / to / tests
Remarque
La sélection de fichiers à analyser est une nouvelle fonctionnalité de Robot Framework 3.0.1.
Utiliser l' option --suite est plus ou moins la même chose que d'exécuter
uniquement le fichier ou le répertoire du scénario de test approprié. Un
avantage majeur est la possibilité de sélectionner la suite en fonction de sa suite
parentale. La syntaxe de ce paramètre spécifie les noms de suite parent et enfant
séparés par un point. Dans ce cas, la configuration et le démontage possibles de la
suite parent sont exécutés.
--suite parent.child
--suite myhouse.myhousemusic --test jack *
La sélection de scénarios de test individuels avec l' option --test est très
pratique lors de la création de scénarios de test, mais assez limitée lors de
l'exécution automatique de tests. L' option --suite peut être utile dans ce cas,
mais en général, la sélection de cas de test par nom de tag est plus flexible.
La sélection de cas de test par balises est un mécanisme très flexible et offre de
nombreuses possibilités intéressantes:
Dans les coulisses, cette option sélectionne les tests ayant échoué car ils auraient
été sélectionnés individuellement avec l' option --test . Il est possible d'affiner la
liste des tests sélectionnés en utilisant les options --test , --suite , --
include et --exclude .
L'utilisation d'une sortie ne provenant pas de l'exécution des mêmes tests exécutés
entraîne désormais des résultats indéfinis. En outre, il s'agit d'une erreur si la sortie
ne contient aucun test échoué. Utiliser une valeur spéciale NONEcomme sortie
revient à ne pas spécifier cette option du tout.
Pointe
Les résultats de ré-exécution et les résultats originaux peuvent être fusionnés à l'aide de
l' option de ligne de commande --merge .
Remarque
Ré-exécuter les tests ayant échoué est une nouvelle fonctionnalité de Robot Framework
2.8. Avant Robot Framework 2.8.4, l'option était nommée --runfailed .
Dans les coulisses, cette option sélectionne les suites ayant échoué car elles
auraient été sélectionnées individuellement avec l' option --suite . Il est possible
d'affiner la liste des tests sélectionnés en utilisant les options --test , --
suite , --include et --exclude .
Remarque
Une situation similaire peut se produire lors du traitement des fichiers de sortie
avec Rebot . Il est possible qu'aucun test ne corresponde aux critères de filtrage
utilisés ou que le fichier de sortie ne contienne aucun test pour commencer. Par
défaut, l'exécution de Rebot échoue dans ces cas, mais elle comporte une option --
ProcessEmptySuite distincte qui peut être utilisée pour modifier le
comportement. En pratique, cette option fonctionne de la même manière que --
RunEmptySuite lors de l'exécution de tests.
Remarque
Tous les cas de test sont considérés comme critiques par défaut, mais cela peut être
modifié avec les options --critical (-c) et --noncritical (-
n) . Ces options spécifient quels tests sont critiques en fonction des balises , de la
même manière que --include et --exclude sont utilisés pour sélectionner des
tests par balises . Si seul --critical est utilisé, les cas de test avec une balise
correspondante sont critiques. Si seulement - non critique est utilisé, les tests
sans balise correspondante sont critiques. Enfin, si les deux sont utilisés, seuls les
tests avec une balise critique mais sans balise non critique sont critiques.
Le cas d'utilisation le plus courant pour la définition de la criticité est d'avoir des
cas de test qui ne sont pas prêts ou de tester des fonctionnalités encore en cours
d'exécution dans l'exécution du test. Ces tests peuvent également être exclus de
l'exécution du test avec l' option --exclude , mais leur inclusion en tant que tests
non critiques vous permet de voir quand ils commencent à passer.
La criticité définie lors de l'exécution des tests n'est stockée nulle part. Si vous
souhaitez conserver la même criticité lors du post-traitement des sorties avec Rebot,
vous devez utiliser --critical et / ou --noncritical également avec:
# Utilisez rebot pour créer un nouveau journal et créer un rapport à
partir de la sortie créée lors de l'exécution
robot --régression critique --outputdir tous tests.robot
rebot --name Smoke --include smoke --critique regression --outputdir
smoke all / output.xml
Remarque
Plusieurs emplacements peuvent être donnés en les séparant par un signe deux-
points, quel que soit le système d'exploitation, ou en utilisant cette option plusieurs
fois. Le chemin donné peut également être un motif de globalisation correspondant
à plusieurs chemins, mais il doit généralement être échappé .
Exemples:
--pythonpath libs
--pythonpath /opt/testlibs:mylibs.zip:yourlibs
--pythonpath mylib.jar --pythonpath lib / STAR.jar --escape star: STAR
Java classpath
Lorsque les bibliothèques implémentées en Java sont importées avec Jython, elles
peuvent se trouver soit dans le chemin de recherche de module normal de Jython,
soit dans classpath Java . La manière la plus courante de modifier le chemin d'accès
aux classes est de définir la variable d' environnement CLASSPATH de la même
manière que PYTHONPATH , JYTHONPATH ou IRONPYTHONPATH . Il est également possible
d'utiliser l' option de ligne de commande -cp de Java . Cette option n'est pas
exposée au script runner du robot , mais il est possible de l'utiliser avec Jython en
ajoutant le préfixe -J comme .jython -J-cp example.jar -m robot.run
tests.robot
Lorsque vous utilisez la distribution JAR autonome, le chemin de classe doit être
défini un peu différemment, car cette java -jarcommande prend en charge
la variable d' environnement CLASSPATHet l' option -cp . Il existe deux manières
différentes de configurer le chemin de classe:
java -cp lib / testlibrary.jar: lib / app.jar: robotframework-2.9.jar
org.robotframework.RobotFramework tests.robot
java -Xbootclasspath / a: lib / testlibrary.jar: lib / app.jar -jar
robotframework-2.9.jar tests.robot
En plus de ces échecs, les erreurs d'exécution normales sont affichées, par exemple,
lorsque les importations de la bibliothèque de tests ou des fichiers de ressources ne
peuvent pas être résolues.
Remarque
Exemples:
robot - tests de randomisation my_test.robot
robot - tous les codes: 12345 path / to / tests
Commence par le premier test par défaut. Les tests sont sélectionnés par
suite.
"" "
Exemples:
robot --console calme tests.robot
robot --dotted tests.robot
Remarque
Largeur de la console
La largeur de la sortie d'exécution du test dans la console peut être définie à l'aide
de l'option --consolewidth (-W) . La largeur par défaut est de 78 caractères.
Pointe
Sur de nombreuses machines de type UNIX, vous pouvez utiliser $COLUMNS une variable
d'environnement pratique comme --consolewidth $COLUMNS.
Remarque
Avant Robot Framework 2.9, cette fonctionnalité était activée avec l' option --
monitorwidth qui était la première fois obsolète et qui est aujourd'hui supprimée. L'option
courte -W fonctionne de la même manière dans toutes les versions.
Couleurs de la console
L' option --consolecolors (-C) permet de contrôler si les couleurs
doivent être utilisées dans la sortie de la console. Les couleurs sont implémentées à
l'aide des couleurs ANSI sauf sous Windows où, par défaut, les API Windows sont
utilisées à la place. L'accès à ces API à partir de Jython n'est pas possible et, par
conséquent, les couleurs ne fonctionnent pas avec Jython sous Windows.
Remarque
Avant Robot Framework 2.9, cette fonctionnalité était activée avec l' option --
monitorcolors qui était la première fois obsolète et qui est aujourd'hui
supprimée. L'option courte -C fonctionne de la même manière dans toutes les versions.
Marqueurs de console
À partir de Robot Framework 2.7, des marqueurs spéciaux .(succès) et F(échec)
sont affichés sur la console lors de l'utilisation de la sortie détaillée et des mots clés
de niveau supérieur à la fin des tests élémentaires. Les marqueurs permettent de
suivre l'exécution du test en haut niveau et ils sont effacés à la fin des tests.
À partir de Robot Framework 2.7.4, il est possible de configurer le moment où les
marqueurs sont utilisés avec l' option --consolemarkers (-K) . Il prend
en charge les valeurs insensibles à la casse suivantes:
auto
Les marqueurs sont activés lorsque la sortie standard est écrite dans la
console, mais pas lorsqu'elle est redirigée dans un fichier ou ailleurs. Ceci est
la valeur par défaut.
on
Les marqueurs sont toujours utilisés.
off
Les marqueurs sont désactivés.
Remarque
Avant Robot Framework 2.9, cette fonctionnalité était activée avec l' option --
monitormarkers qui était la première fois obsolète et qui est aujourd'hui
supprimée. L'option courte -K fonctionne de la même manière dans toutes les versions.
Répertoire de sortie
Tous les fichiers de sortie peuvent être définis à l'aide d'un chemin absolu, auquel
cas ils sont créés à l'emplacement spécifié, mais dans d'autres cas, le chemin est
considéré par rapport au répertoire de sortie. Le répertoire de sortie par défaut est le
répertoire à partir duquel l'exécution est lancée, mais il peut être modifié avec
l' option --outputdir (-d) . Le chemin défini avec cette option est, encore
une fois, relatif au répertoire d'exécution, mais peut naturellement être donné
également comme chemin absolu. Indépendamment de la manière dont le chemin
d'accès à un fichier de sortie individuel est obtenu, son répertoire parent est créé
automatiquement, s'il n'existe pas déjà.
Fichier de sortie
Les fichiers de sortie contiennent tous les résultats de l'exécution du test au format
XML lisible par machine. Les fichiers journaux , les rapports et les fichiers xUnit sont
généralement générés en fonction de ces fichiers. Ils peuvent également être
combinés et traités ultérieurement avec Rebot .
Pointe
Lors du post-traitement des sorties avec Rebot, les nouveaux fichiers de sortie ne sont
créés que si l' option --output est explicitement utilisée.
Fichier journal
Les fichiers journaux contiennent des détails sur les scénarios de test exécutés au
format HTML. Ils ont une structure hiérarchique montrant la suite de tests, les cas
de test et les détails des mots clés. Les fichiers journaux sont nécessaires presque
chaque fois que les résultats des tests doivent être examinés en détail. Même si les
fichiers journaux contiennent également des statistiques, les rapports sont plus
adaptés pour obtenir une vue d'ensemble de niveau supérieur.
Un exemple de fichier journal avec les détails des mots clés visibles
Fichier de rapport
Les fichiers de rapport contiennent une vue d'ensemble des résultats de l'exécution
du test au format HTML. Ils ont des statistiques basées sur des balises et des suites
de tests exécutées, ainsi qu'une liste de tous les cas de test exécutés. Lorsque les
rapports et les journaux sont générés, le rapport contient des liens vers le fichier
journal pour faciliter la navigation vers des informations plus détaillées. Il est facile
de voir l'état d'exécution du test global à partir du rapport, car sa couleur d'arrière-
plan est verte, si tous les tests critiques sont réussis, et rouge vif dans le cas contraire.
Pointe
Les fichiers de sortie XUnit ne sont créés que si l'option de ligne de commande --
xunit (-x) est utilisée de manière explicite. Cette option nécessite un chemin
d'accès au fichier xUnit généré, relatif au répertoire de sortie , en tant que valeur.
Étant donné que les rapports xUnit n'ont pas le concept de tests non critiques , tous
les tests d'un rapport xUnit seront marqués comme ayant réussi ou échoué, sans
distinction entre les tests critiques et non critiques. Si cela pose problème,
l' option --xunitskipnoncritical peut être utilisée pour marquer les tests
non critiques comme étant ignorés. Les tests ignorés recevront un message
contenant le statut réel et le message possible du test élémentaire dans un format
similaire FAIL: Error message.
Remarque
Exemple:
robot --logtitle Smoke_Test_Log --reporttitle Smoke_Test_Report --
include fumée my_tests /
Si vous spécifiez trois couleurs, la première sera utilisée lorsque tout le test
réussira, la seconde lorsque seuls les tests non critiques auront échoué et la dernière
en cas de défaillance critique. Cette fonctionnalité permet donc d’utiliser une
couleur de fond distincte, par exemple jaune, lorsque les tests non critiques ont
échoué.
Les couleurs spécifiées sont utilisées comme valeur pour la propriété CSS
de l' body élément background. La valeur est utilisée telle quelle et peut être un nom
de couleur HTML (par exemple red), une valeur hexadécimale (par
exemple #f00ou #ff0000) ou une valeur RVB (par exemple rgb(255,0,0)). Les
couleurs vert et rouge par défaut sont spécifiées à l'aide de valeurs
hexadécimales #9e9et #f66, respectivement.
Il est possible d'utiliser l' option --loglevel également lors du post-traitement des
sorties avec Rebot. Cela permet, par exemple, d'exécuter initialement des tests avec
le TRACEniveau et de générer des fichiers journaux plus petits pour une visualisation
normale ultérieure avec le INFOniveau. Par défaut, tous les messages inclus lors de
l'exécution seront également inclus avec Rebot. Les messages ignorés lors de
l'exécution ne peuvent pas être récupérés.
Par défaut, le menu déroulant sera défini au niveau le plus bas du fichier journal,
afin que tous les messages soient affichés. Le niveau de journalisation visible par
défaut peut être modifié à l'aide de l' option --loglevel en attribuant la valeur
par défaut après le niveau de journalisation normal séparé par deux points:
--loglevel DEBUG: INFO
Dans l'exemple ci-dessus, les tests sont exécutés à l'aide de level DEBUG, mais le
niveau visible par défaut dans le fichier journal est INFO.
Le principal avantage de la division des journaux est que les parties de journal
individuelles sont si petites que l'ouverture et la navigation dans le fichier journal
sont possibles même si la quantité de données de test est très importante. Un petit
inconvénient est que la taille globale prise par le fichier journal augmente.
Remarque
Lors de la copie des fichiers journaux, vous devez également copier tous les fichiers log - *.
Js ou certaines informations seront manquantes.
Exemples:
--tagdoc mytag: My_documentation
--tagdoc regression: * Voir * _http: //info.html
--tagdoc owner - *: Original_author
ALL
Supprimez les données de tous les mots clés sans condition.
PASSED
Supprimez les données de mot clé des cas de test réussis. Dans la plupart des
cas, les fichiers journaux créés à l'aide de cette option contiennent
suffisamment d'informations pour rechercher d'éventuelles défaillances.
FOR
Supprimez toutes les itérations passées pour les boucles for sauf la dernière.
WUKS
Supprimer tous les mots clés défaillants dans le mot-clé BuiltIn Attendre que
le mot-clé réussisse, à l'exception du dernier.
NAME:<pattern>
Supprimez les données de tous les mots-clés correspondant au modèle
donné, quel que soit le statut du mot-clé. Le modèle est mis en
correspondance avec le nom complet du mot-clé, préfixé par le nom de
fichier de bibliothèque ou de ressource possible. Le motif est insensible à la
casse, à l'espace et au trait de soulignement, et il prend en charge des motifs
simples avec * et ?comme caractères génériques.
TAG:<pattern>
Supprimez les données des mots-clés avec des balises correspondant au
modèle donné. Les tags sont le cas et dans l' espace insensible et ils peuvent
être spécifiées à l' aide des modèles d'étiquette où *et ?sont pris en charge
des caractères génériques et AND, ORet les NOT opérateurs peuvent être utilisés
pour combiner des étiquettes individuelles ou modèles ensemble. Peut être
utilisé avec des étiquettes de mots-clés de bibliothèque et des étiquettes de mots-clés
d' utilisateur .
Exemples:
rebot --removekeywords all --output removed.xml output.xml
robot --removekeywords transmis --removekeywords for tests.robot
robot --removekeywords name: HugeKeyword --removekeywords name:
ressource. * tests.robot
robot --removekeywords tag: énorme tests.robot
Remarque
Le soutien à l' aide --removekeywords lors de l' exécution des tests, ainsi que FORet
les WUKSmodes ont été ajoutés dans le cadre Robot 2.7.
Remarque
Exemples:
robot --flattenkeywords name: HugeKeyword --flattenkeywords name:
ressource. * tests.robot
rebot --flattenkeywords foritem --output flattened.xml original.xml
L'aplatissement des mots-clés est déjà effectué lorsque le fichier de sortie est analysé
initialement. Cela permet d'économiser une quantité importante de mémoire, en
particulier avec des structures de mots clés profondément imbriquées.
Remarque
Les temps doivent être donnés en tant qu'horodatages dans le format YYYY-MM-DD
hh:mm:ss.mil, où tous les séparateurs sont facultatifs et les parties allant de
millisecondes à heures peuvent être omises. Par exemple, 2008-06-11
17:59:20.495est équivalent à 20080611-175920.495et 20080611175920495, et aussi
simple 20080611fonctionnerait.
Exemples:
rebot --starttime 20080611-17: 59: 20.495 output1.xml output2.xml
rebot --starttime 20080611-175920 --endtime 20080611-180242 * .xml
rebot --starttime 20110302-1317 --endtime 20110302-11418 myoutput.xml
Normalement, les utilisateurs n'ont jamais besoin de ces informations, mais cela
peut être utile lors de la recherche de problèmes avec les bibliothèques de tests ou
avec Robot Framework lui-même. Un journal système n'est pas créé par défaut,
mais il peut être activé en définissant la variable
d'environnement ROBOT_SYSLOG_FILE afin qu'il contienne un chemin d'accès au
fichier sélectionné.
4.1.1 Introduction
o Langages de programmation supportés
o Différentes API de bibliothèque de test
4.1.2 Créer une classe ou un module de bibliothèque de test
o Test des noms de bibliothèque
o Fournir des arguments pour tester les bibliothèques
o Portée de la bibliothèque de test
o Spécification de la version de la bibliothèque
o Spécification du format de la documentation
o Bibliothèque agissant comme auditeur
4.1.3 Création de mots-clés statiques
o Quelles méthodes sont considérées comme des mots clés?
o Noms de mots clés
o Tags de mots clés
o Arguments de mots clés
o Valeurs par défaut aux mots-clés
o Nombre variable d'arguments ( *varargs)
o Arguments de mots clés gratuits ( **kwargs)
o Types d'argument
o Utiliser des décorateurs
o Incorporation d'arguments dans des noms de mots clés
4.1.4 Communication avec le framework Robot
o Signaler le statut du mot clé
o Arrêt de l'exécution du test
o Poursuite de l'exécution des tests malgré les échecs
o Informations de journalisation
o API de journalisation programmatique
o Enregistrement lors de l'initialisation de la bibliothèque
o Valeurs de retour
o Communication lors de l'utilisation de threads
4.1.5 Distribution des bibliothèques de test
o Documentation des bibliothèques
o Test des bibliothèques
o Bibliothèques d'emballage
o Mots clés dépréciés
4.1.6 API de bibliothèque dynamique
o Obtenir des noms de mots clés
o Mots clés en cours d'exécution
o Obtenir des arguments de mots clés
o Obtenir des mots-clés
o Obtenir de la documentation sur les mots clés
o Obtenir la documentation générale de la bibliothèque
o Syntaxe des arguments nommés avec bibliothèques dynamiques
o Arguments de mots clés gratuits avec bibliothèques dynamiques
o Résumé
4.1.7 API de bibliothèque hybride
o Obtenir des noms de mots clés
o Mots clés en cours d'exécution
o Obtention des arguments et de la documentation sur les mots clés
o Résumé
4.1.8 Utilisation des modules internes de Robot Framework
o API disponibles
o Utilisation de la bibliothèque BuiltIn
4.1.9 Extension des bibliothèques de test existantes
o Modification du code source d'origine
o Utiliser l'héritage
o Utiliser d'autres bibliothèques directement
o Obtenir une instance de bibliothèque active à partir de Robot Framework
o Bibliothèques utilisant l'API dynamique ou hybride
4.1.1 Introduction
Langages de programmation supportés
Robot Framework lui-même est écrit avec Python et teste naturellement les
bibliothèques en l'étendant peut être implémenté en utilisant le même langage. Lors
de l'exécution du framework sur Jython , les bibliothèques peuvent également être
implémentées en Java . Le code Python pur fonctionne à la fois sur Python et
Jython, en supposant qu'il n'utilise pas de syntaxe ou de modules qui ne sont pas
disponibles sur Jython. Lorsque vous utilisez Python, il est également possible
d'implémenter des bibliothèques avec C en utilisant l' API Python C , bien qu'il soit
souvent plus facile d'interagir avec du code C à partir de bibliothèques Python
utilisant le module ctypes .
API statique
L'approche la plus simple est d'avoir un module (en Python) ou une classe (en
Python ou Java) avec des méthodes qui correspondent directement aux noms de
mots-clés . Les mots-clés prennent également les mêmes arguments que les méthodes
les mettant en œuvre. Les mots-clés signalent des échecs avec des exceptions,
se connectent en écrivant à la sortie standard et peuvent renvoyer des valeurs à l'aide
de l' returninstruction.
API dynamique
Les bibliothèques dynamiques sont des classes qui implémentent une méthode pour
obtenir les noms des mots-clés qu'elles implémentent, ainsi qu'une autre méthode
pour exécuter un mot-clé nommé avec des arguments donnés. Les noms des mots-
clés à implémenter, ainsi que leur exécution, peuvent être déterminés
dynamiquement lors de l'exécution, mais la génération de rapports sur l'état, la
journalisation et le renvoi est similaire à celle de l'API statique.
API hybride
C'est un hybride entre l'API statique et l'API dynamique. Les bibliothèques sont des
classes avec une méthode indiquant quels mots-clés elles implémentent, mais ces
mots-clés doivent être disponibles directement. Tout le reste sauf la découverte des
mots-clés implémentés est similaire à celle de l'API statique.
Toutes ces API sont décrites dans ce chapitre. Tout est basé sur le fonctionnement
de l'API statique, ses fonctions sont donc abordées en premier. La façon dont l' API
de la bibliothèque dynamique et l' API de la bibliothèque hybride en diffèrent est ensuite
abordée dans des sections spécifiques.
Les classes Python sont toujours dans un module. Si le nom d'une classe
implémentant une bibliothèque est identique au nom du module, Robot Framework
permet de supprimer le nom de la classe lors de l'importation de la
bibliothèque. Par exemple, la classe MyLibdans le fichier MyLib.py peut être utilisée
comme bibliothèque avec simplement le nom MyLib . Cela fonctionne également
avec des sous-modules, de sorte que si, par exemple, le parent.MyLibmodule a une
classe MyLib, il doit être importé en utilisant
uniquement parent.MyLib fonctionne. Si le nom du module et celui de la classe
sont différents, les bibliothèques doivent être utilisées à la fois avec les noms de
module et de classe, tels que mymodule.MyLibrary ou parent.submodule.MyLib .
Les classes Java dans un package autre que celui par défaut doivent être utilisées
avec le nom complet. Par exemple, la classe MyLibdans
le com.mycompany.myproject package doit être importée avec le
nom com.mycompany.myproject.MyLib .
Remarque
La suppression des noms de classe avec des sous-modules ne fonctionne que dans Robot
Framework 2.8.4 et versions ultérieures. Avec les versions antérieures, vous devez également
inclure le nom de la classe comme parent.MyLib.MyLib .
Pointe
Si le nom de la bibliothèque est très long, par exemple lorsque le nom du package Java est
long, il est recommandé de donner à la bibliothèque un alias plus simple en utilisant
la syntaxe WITH NAME .
classe MyLibrary :
Robot Framework tente de garder les scénarios de test indépendants les uns des
autres: par défaut, il crée de nouvelles instances de bibliothèques de tests pour
chaque scénario de test. Cependant, ce comportement n'est pas toujours
souhaitable, car les cas de test doivent parfois pouvoir partager un état commun. De
plus, toutes les bibliothèques n'ont pas d'état et la création de nouvelles instances
n'est tout simplement pas nécessaire.
Remarque
Si une bibliothèque est importée plusieurs fois avec des arguments différents , une nouvelle
instance est créée chaque fois quelle que soit l'étendue.
Lorsque les étendues TEST SUITEou GLOBALsont utilisées avec des bibliothèques de
test avec un état, il est recommandé que les bibliothèques disposent d'un mot-clé
spécial pour nettoyer l'état. Ce mot-clé peut ensuite être utilisé, par exemple, dans
une configuration ou une suppression de suite pour garantir que les scénarios de
test des prochaines suites de tests puissent démarrer à partir d'un état connu. Par
exemple, SeleniumLibrary utilise l’ GLOBALétendue pour permettre l’utilisation du
même navigateur dans différents scénarios de test sans avoir à le rouvrir, ainsi que
le mot clé Fermer tous les navigateurs pour fermer facilement tous les navigateurs
ouverts.
Exemple de bibliothèque Python utilisant la TEST SUITEportée:
classe ExampleLibrary :
__ http://docutils.sourceforge.net
"" "
ROBOT_LIBRARY_DOC_FORMAT = 'reST'
/ ** <b> Rien </ b> à voir ici. Même pas dans le tableau ci-dessous.
*
* <table>
* <tr> <td> Table </ td> <td> ici </ td> <td> a </ td> </ tr>
* <tr> <td> rien </ td> < td> to </ td> <td> voir. </ td> </ tr>
* </ table>
* /
public void keyword () {
}
}
Lors de l'implémentation d'une bibliothèque en tant que classe Python ou Java, les
méthodes des classes de base possibles sont également considérées comme des
mots clés. Lors de l'implémentation d'une bibliothèque en tant que module Python,
les fonctions possibles importées dans l'espace de noms du module deviennent
également des mots-clés. Par exemple, si le module ci-dessous serait utilisé en tant
que bibliothèque, il contiendrait des mots-clés Exemple de mot - clé , Deuxième
exemple et également Thread actuel .
à partir de threading import current_thread
Un moyen simple d'éviter que les fonctions importées ne deviennent des mots-clés
consiste à importer uniquement des modules (par exemple import threading) et à
utiliser des fonctions via le module (par
exemple threading.current_thread()). Alternativement, les fonctions peuvent
recevoir un alias commençant par un trait de soulignement à l’importation (par
exemple from threading import current_thread as _current_thread).
Un moyen plus explicite de limiter les fonctions devenant des mots-clés consiste à
utiliser l' __all__attribut de niveau de module que Python lui-même utilise à des fins
similaires . S'il est utilisé, seules les fonctions répertoriées peuvent être des mots
clés. Par exemple, la bibliothèque ci-dessous implémente uniquement les mots-
clés Exemple de mot - clé et deuxième exemple .
à partir de threading import current_thread
L'utilisation de ce décorateur sans argument n'aura aucun effet sur le nom du mot
clé exposé, mais définira toujours l' robot_nameattribut. Cela permet aux méthodes de
marquage d'exposer en tant que mots-clés sans modifier réellement les noms de mots-
clés. À partir de Robot Framework 3.0.2, les méthodes qui possèdent
l' robot_name attribut créent également des mots-clés même si le nom de la méthode
commence par un trait de soulignement.
La définition d'un nom de mot-clé personnalisé peut également permettre aux mots-
clés de bibliothèque d'accepter des arguments à l'aide de la syntaxe des arguments
incorporés .
Une autre option pour définir des balises est de leur donner la dernière ligne de
la documentation du mot - clé avec un Tags:préfixe et de les séparer par une
virgule. Par exemple:
def login ( nom d'utilisateur , mot de passe ):
"" "Connectez-vous à l'utilisateur.
Tags: tag1, tag2
"" "
# ...
La situation la plus courante et la plus simple est lorsqu'un mot clé nécessite un
nombre exact d'arguments. Dans ce cas, les méthodes Python et Java prennent
simplement ces arguments exactement. Par exemple, une méthode implémentant un
mot-clé sans argument ne prend pas non plus d'argument, une méthode
implémentant un mot-clé avec un argument prend également un argument, etc.
def three_arguments ( a1 , a2 , a3 ):
print "Le mot clé a trois arguments ' % s ', ' % s ' et ' % s '." %
( a1 , a2 , a3 )
Remarque
Une limitation majeure des bibliothèques Java utilisant l'API de bibliothèque statique est
qu'elles ne prennent pas en charge la syntaxe d'argument nommé . S'il s'agit d'un bloqueur, il
est possible d'utiliser Python ou de basculer vers l' API de bibliothèque dynamique .
Le premier mot-clé ci-dessus peut être utilisé avec des arguments zéro ou un. Si
aucun argument n'est donné, argobtient la valeur default. S'il existe un
argument, argrécupère cette valeur et l'appel du mot clé avec plusieurs arguments
échoue. Dans le deuxième exemple, un argument est toujours requis, mais le
second et le troisième ont des valeurs par défaut. Il est donc possible d'utiliser le
mot clé avec un à trois arguments.
*** Cas de test ***
Les défauts
Un défaut
Un argument par défaut
Plusieurs valeurs par défaut requises arg
Plusieurs valeurs par défaut requises arg facultatif
Plusieurs valeurs par défaut requises arg facultatif 1 facultatif 2
En Java, une méthode peut avoir plusieurs implémentations avec des signatures
différentes. Robot Framework considère toutes ces implémentations comme un seul
mot clé, qui peut être utilisé avec des arguments différents. Cette syntaxe peut donc
être utilisée pour prendre en charge les valeurs par défaut. Ceci est illustré par
l'exemple ci-dessous, qui est fonctionnellement identique à l'exemple précédent de
Python:
public void oneDefault ( String arg ) {
Système . out . println ( "L'argument a une valeur" + arg );
}
Robot Framework prend en charge la syntaxe Java varargs pour définir un nombre
variable d'arguments. Par exemple, les deux mots-clés suivants sont
fonctionnellement identiques aux exemples Python ci-dessus avec les mêmes noms:
public void anyArguments ( String ... varargs ) {
Système . out . println ( "Got arguments:" );
pour ( String arg : varargs ) {
System . out . println ( arg );
}
}
public void oneRequired ( String requis , List < String > others ) {
System . out . println ( "Obligatoire:" + obligatoire + "\ nSi:" );
for ( String arg : others ) {
Système . out . println ( arg );
}
}
Remarque
Seul java.util.Listest pris en charge en tant que varargs, aucun de ses sous-types.
La prise en charge d'un nombre variable d'arguments avec des mots-clés Java a une
limitation: elle ne fonctionne que lorsque les méthodes ont une signature. Il n'est
donc pas possible d'avoir des mots-clés Java avec les deux valeurs par défaut et
varargs. En plus de cela, seuls Robot Framework 2.8 et plus récents prennent en
charge l'utilisation de varargs avec les constructeurs de bibliothèques .
Nommé
Divers Args arg = valeur # Logs 'arg: value'.
Kwargs
Divers args a = 1 b = 2 c = 3 # Logs 'kwarg: a 1', 'kwarg: b 2' et
'kwarg: c 3'. Divers Args c = 3 a = 1 b = 2 # Identique à ci-dessus.
L'ordre n'a pas d'importance.
Positionnel et kwargs
Args divers 1 2 kw = 3 # Logs 'arg: 1', 'vararg: 2' et 'kwarg: kw 3'.
Nommé et kwargs
Divers Args arg = valeur hello = world # Logs 'arg: value' et 'kwarg:
hello world'. Various Args hello = world arg = valeur # Identique à ci-
dessus. L'ordre n'a pas d'importance.
public void variousArgs ( String arg , List < String > varargs , Map
< String , Object > kwargs ):
Système . out . println ( "arg:" + arg );
for ( String varg : varargs )
System . out . println ( "vararg:" + varg );
pour ( clé de chaîne : kwargs . keySet ())
Système . out . println ( "kwarg:" + key + "" + kwargs . get
( key ));
Remarque
Le type de l'argument kwargs doit être exactement java.util.Map, pas l'un de ses sous-
types.
Remarque
De même que pour le support varargs , un mot clé prenant en charge kwargs ne peut pas avoir
plus d’une signature.
Types d'argument
Normalement, les arguments de mots-clés sont fournis à Robot Framework en tant
que chaînes. Si les mots-clés nécessitent d'autres types, il est possible d'utiliser
des variables ou de convertir des chaînes en types requis dans les mots-
clés. Avec Java , les types de base sont également forcés automatiquement.
Les arguments pour les méthodes Java ont des types et tous les types de base sont
gérés automatiquement. Cela signifie que les arguments qui sont des chaînes
normales dans les données de test sont forcés à corriger le type à l'exécution. Les
types pouvant être forcés sont:
La coercition est effectuée pour les arguments ayant le même type ou un type
compatible pour toutes les signatures de la méthode par mot-clé. Dans l'exemple
suivant, la conversion peut être effectuée pour les mots
clés doubleArgument et compatibleTypes, mais pas pour conflictingTypes.
public double vide doubleArgument ( double arg ) {}
La coercition fonctionne avec les types numériques si les données de test ont une
chaîne contenant un nombre et avec le type booléen, les données doivent contenir
une chaîne trueou false. La coercition n'est effectuée que si la valeur d'origine
était une chaîne provenant des données de test, mais il est bien entendu toujours
possible d'utiliser des variables contenant des types corrects avec ces mots
clés. L'utilisation de variables est la seule option si les mots-clés ont des signatures
en conflit.
*** Cas de test ***
Coercition
Double argument 3.14
Double Argument 2e16
Types compatibles Bonjour, monde! 1234
Types compatibles Hi again! -10 vrai
Pas de coercition
Double Argument $ { 3.14 }
Types en conflit 1 $ { 2 } # doit utiliser des variables Types
en conflit $ { 1 } 2
À partir de Robot Framework 2.8, la coercition de type argument fonctionne
également avec les constructeurs de bibliothèques Java .
Le message d'erreur affiché dans les journaux, les rapports et la console est créé à
partir du type d'exception et de son message. Avec des exceptions génériques (par
exemple, AssertionError, Exceptionet RuntimeError), seul le message d'exception
est utilisé, et avec les autres, le message est créé dans le format ExceptionType:
Actual message.
Python:
class MyError ( RuntimeError ):
ROBOT_SUPPRESS_NAME = True
Java:
la classe publique MyError étend RuntimeException {
public static final boolean ROBOT_SUPPRESS_NAME = true ;
}
Dans tous les cas, il est important pour les utilisateurs que le message d’exception
soit aussi informatif que possible.
À partir de Robot Framework 2.8, il est également possible d'avoir des messages
d'erreur au format HTML en démarrant le message avec le texte *HTML*:
augmenter AssertionError ( "* HTML * <a href='robotframework.org'> cadre
Robot </a> rulez !!" )
Cette méthode peut être utilisée à la fois pour générer une exception dans une
bibliothèque, comme dans l'exemple ci-dessus, et lorsque les utilisateurs fournissent un
message d'erreur dans les données de test .
Tracebacks
Python:
class MyFatalError ( RuntimeError ):
ROBOT_EXIT_ON_FAILURE = True
Java:
la classe publique MyFatalError étend RuntimeException {
public static final boolean ROBOT_EXIT_ON_FAILURE = true ;
}
Python:
classe MyContinuableError ( RuntimeError ):
ROBOT_CONTINUE_ON_FAILURE = True
Java:
la classe publique MyContinuableError étend RuntimeException {
public static final boolean ROBOT_CONTINUE_ON_FAILURE = true ;
}
Informations de journalisation
Les messages d'exception ne sont pas le seul moyen de fournir des informations
aux utilisateurs. De plus, les méthodes peuvent également envoyer des messages
aux fichiers journaux simplement en écrivant dans le flux de sortie standard (stdout)
ou dans le flux d’erreurs standard (stderr), et ils peuvent même utiliser
différents niveaux de journal . Une autre possibilité de journalisation, souvent
meilleure, consiste à utiliser les API de journalisation par programme .
Par défaut, tout ce qui est écrit par une méthode dans la sortie standard est écrit
dans le fichier journal en tant qu'entrée unique avec le niveau de
journalisation INFO. Les messages écrits dans l'erreur standard sont traités de la
même manière, mais ils sont renvoyés au stderr d'origine une fois l'exécution du
mot clé terminée. Il est donc possible d'utiliser le stderr si certains messages
doivent être visibles sur la console où les tests sont exécutés.
Pour utiliser d' autres niveaux de journal que INFO, ou pour créer plusieurs
messages, spécifiez le niveau de journalisation explicitement en intégrant le niveau
dans le message au format *LEVEL* Actual log message, où *LEVEL*doit être au
début d'une ligne et LEVELest l' un des niveaux d' enregistrement
disponibles TRACE, DEBUG, INFO, WARN, ERRORet HTML.
Erreurs et avertissements
Les messages avec ERRORou WARNlevel sont automatiquement écrits sur la console et
une section distincte Erreurs de l'exécution du test dans les fichiers journaux. Cela
rend ces messages plus visibles que d'autres et permet de les utiliser pour signaler
des problèmes importants mais non critiques aux utilisateurs.
Remarque
Dans Robot Framework 2.9, de nouvelles fonctionnalités ont été ajoutées pour ajouter
automatiquement les erreurs consignées par mots-clés dans la section Erreurs d'exécution de
test.
HTML de journalisation
Tout ce qui est normalement consigné par la bibliothèque sera converti dans un
format pouvant être représenté en toute sécurité au format HTML. Par
exemple, <b>foo</b>seront affichés dans le journal exactement comme ça et pas
comme foo . Si les bibliothèques souhaitent utiliser le formatage, les liens, les
images d'affichage, etc., elles peuvent utiliser un pseudo niveau de journalisation
spécial HTML. Robot Framework écrira ces messages directement dans le journal
avec le INFOniveau afin qu'ils puissent utiliser la syntaxe HTML de leur
choix. Notez que cette fonctionnalité doit être utilisée avec précaution car, par
exemple, une </table>balise mal placée peut endommager le fichier journal.
Horodatage
Par défaut, les messages enregistrés via la sortie standard ou les flux d'erreur
obtiennent leurs horodatages à la fin du mot clé exécuté. Cela signifie que les
horodatages ne sont pas précis et que les problèmes de débogage, en particulier
avec les mots-clés plus longs, peuvent être problématiques.
Les mots-clés ont la possibilité d'ajouter un horodatage précis aux messages qu'ils
enregistrent en cas de besoin. L’horodatage doit être donné en millisecondes depuis
l’ époque Unix et il doit être placé après le niveau de journal séparé par un deux-
points:
* INFO: 1308435758660 * Message avec horodatage
* HTML: 1308435758661 * Message <b> HTML </ b> avec horodatage
Comme illustré par les exemples ci-dessous, l'ajout de l'horodatage est facile à la
fois en utilisant Python et Java. Si vous utilisez Python, il est cependant encore plus
facile d'obtenir des horodatages précis à l'aide des API de journalisation
programmatiques . Un grand avantage de l'ajout explicite d'horodatage est que cette
approche fonctionne également avec l' interface de la bibliothèque distante .
Python:
temps d' importation
Java:
public void exampleKeyword () {
Système . out . println ( "* INFO:" + System . currentTimeMillis ()
+ "* Message avec horodatage" );
}
Si les bibliothèques doivent écrire quelque chose sur la console, elles ont plusieurs
options. Comme indiqué précédemment, les avertissements et tous les messages
écrits dans le flux d'erreurs standard sont écrits à la fois dans le fichier journal et
dans la console. Ces deux options sont limitées par le fait que les messages ne
parviennent à la console qu'après la fin du mot clé en cours d'exécution. Un
avantage est que ces approches fonctionnent à la fois avec les bibliothèques basées
sur Python et Java.
Une autre option, uniquement disponible avec Python, consiste à écrire des
messages vers sys.__stdout__ou sys.__stderr__. Lorsque vous utilisez cette
approche, les messages sont écrits sur la console immédiatement et ne sont pas
écrits dans le fichier journal:
import sys
Exemple de journalisation
16: 18: ERREUR Quelque chose d'inattendu se produit qui peut indiq
42.123 problème dans le test.
16: 18: INFO Bonjour encore!
42.123 Cela fera partie du message précédent.
Robot Framework dispose d'une API de journalisation basée sur Python pour écrire
des messages dans le fichier journal et sur la console. Les bibliothèques de test
peuvent utiliser cette API logger.info('My message')au lieu de se connecter via la
sortie standard, par exemple print '*INFO* My message'. En plus d'une interface de
programmation beaucoup plus propre à utiliser, cette API présente l'avantage que
les messages de journalisation ont des horodatages précis .
Une limitation évidente est que les bibliothèques de test utilisant cette API de
journalisation dépendent de Robot Framework. Avant la version 2.8.7 Robot devait
également être en cours d'exécution pour que la journalisation fonctionne. À partir
de Robot Framework 2.8.7, si les robots ne sont pas en cours d’exécution, les
messages sont redirigés automatiquement vers le module de journalisation standard
de Python .
Remarque
Valeurs de retour
La dernière méthode utilisée par les mots-clés pour communiquer avec la structure
principale consiste à renvoyer les informations extraites du système testé ou
générées par d'autres moyens. Les valeurs renvoyées peuvent être affectées à des
variables dans les données de test, puis utilisées comme entrées pour d'autres mots-
clés, même à partir de différentes bibliothèques de tests.
Les valeurs sont renvoyées à l'aide de l' returninstruction provenant des méthodes
Python et Java. Normalement, une valeur est affectée dans une variable scalaire ,
comme illustré dans l'exemple ci-dessous. Cet exemple montre également qu'il est
possible de renvoyer des objets et d'utiliser la syntaxe de variable étendue pour
accéder aux attributs d'objet.
from mymodule import MyObject
Ceci est particulièrement important lorsque les threads sont exécutés en arrière-plan
alors que d'autres mots-clés sont en cours d'exécution. Les résultats de la
communication avec le framework dans ce cas sont indéfinis et peuvent, dans le
pire des cas, provoquer un crash ou un fichier de sortie corrompu. Si un mot clé
démarre quelque chose en arrière-plan, il doit y avoir un autre mot clé qui vérifie le
statut du thread de travail et les rapports recueillent des informations en
conséquence.
Les messages consignés par des threads non principaux à l'aide des méthodes de
journalisation normales des API de journalisation par programme sont ignorés en
silence.
/ **
* Ce mot clé n'a qu'une courte documentation
* /
public void keywordWithShortDocumentation ( argument de chaîne ) { }
/ **
* La première ligne de la documentation est ici.
*
* Une documentation plus longue continue ici et peut contenir
* plusieurs lignes ou paragraphes.
* /
public void keywordWithLongerDocumentation () {
}
Python et Java ont tous deux des outils pour créer une documentation API d'une
bibliothèque documentée comme ci-dessus. Cependant, les sorties de ces outils
peuvent être légèrement techniques pour certains utilisateurs. Une autre alternative
consiste à utiliser le propre outil de documentation de Robot
Framework, Libdoc . Cet outil peut créer une documentation de bibliothèque à partir
des bibliothèques Python et Java à l'aide de l'API de bibliothèque statique, comme
celles ci-dessus, mais il gère également les bibliothèques utilisant l' API de
bibliothèque dynamique et l' API de bibliothèque hybride .
Remarque
Si vous souhaitez utiliser des caractères non-ASCII dans la documentation des bibliothèques
Python, vous devez soit utiliser UTF-8 comme encodage de votre code source, soit créer des
docstrings comme Unicode.
Python et Java ont tous deux d'excellents outils de test unitaire, et ils fonctionnent
très bien pour tester les bibliothèques. Il n'y a pas de différences majeures dans leur
utilisation à cette fin par rapport à leur utilisation pour d'autres tests. Les
développeurs familiers avec ces outils n’ont pas besoin d’apprendre quelque chose
de nouveau, et les développeurs qui ne les connaissent pas devraient tout de même
les apprendre.
Il est également facile d’utiliser Robot Framework lui-même pour tester les
bibliothèques et, de cette manière, disposer de tests d’acceptation de bout en
bout. Il existe de nombreux mots-clés utiles dans la bibliothèque BuiltIn à cet
effet. Il convient de mentionner spécifiquement Run Error And Expect Error , qui
est utile pour tester que les mots-clés signalent correctement les erreurs.
L'utilisation d'une approche de test au niveau de l'unité ou de l'acceptation dépend
du contexte. S'il est nécessaire de simuler le système en cours de test, il est souvent
plus facile au niveau de l'unité. D'autre part, les tests d'acceptation garantissent que
les mots-clés fonctionnent via Robot Framework. Si vous ne pouvez pas décider,
bien sûr, il est possible d'utiliser les deux approches.
Bibliothèques d'emballage
Une fois la bibliothèque implémentée, documentée et testée, elle doit toujours être
distribuée aux utilisateurs. Avec des bibliothèques simples constituées d'un seul
fichier, il suffit souvent de demander aux utilisateurs de copier ce fichier quelque
part et de définir le chemin de recherche du module en conséquence. Des bibliothèques
plus complexes devraient être empaquetées pour faciliter l'installation.
Remarque
Seules les différences entre les bibliothèques statiques et dynamiques sont la façon
dont Robot Framework découvre les mots-clés qu'une bibliothèque implémente, les
arguments et la documentation de ces mots-clés, et comment les mots-clés sont
réellement exécutés. Avec l'API statique, tout cela se fait en utilisant la réflexion (à
l'exception de la documentation des bibliothèques Java), mais les bibliothèques
dynamiques ont des méthodes spéciales utilisées à ces fins.
L'un des avantages de l'API dynamique est que vous avez plus de flexibilité dans
l'organisation de votre bibliothèque. Avec l'API statique, vous devez disposer de
tous les mots clés dans une classe ou un module, tandis qu'avec l'API dynamique,
vous pouvez, par exemple, implémenter chaque mot clé en tant que classe
distincte. Ce cas d'utilisation n'est pas si important avec Python, car ses capacités
dynamiques et son héritage multiple offrent déjà une grande flexibilité, et il est
également possible d'utiliser l' API de la bibliothèque hybride .
Si les noms de mots-clés renvoyés contiennent plusieurs mots, ils peuvent être
renvoyés séparés par des espaces ou des traits de soulignement, ou au format
camelCase. Par exemple, ['first keyword', 'second
keyword'], ['first_keyword', 'second_keyword']et ['firstKeyword',
'secondKeyword']seraient tous mis en correspondance aux mots - clés premier mot
clé et des mots - clés .
Les bibliothèques dynamiques doivent toujours avoir cette méthode. S'il est
manquant ou si l'appel échoue pour une raison quelconque, la bibliothèque est
considérée comme une bibliothèque statique.
class DynamicExample :
@keyword
def keyword_method ( self ):
# ...
De même que les mots-clés statiques, les mots-clés dynamiques peuvent nécessiter
un nombre quelconque d'arguments, avoir des valeurs par défaut et accepter un
nombre variable d'arguments et des arguments de mots-clés gratuits. La syntaxe
pour représenter toutes ces différentes variables est expliquée dans le tableau
suivant. Notez que les exemples utilisent la syntaxe Python pour les listes, mais les
développeurs Java doivent utiliser des listes Java ou des tableaux à la place.
['**kwargs'] 0/0
Arguments de Les derniers arguments ont **avant
mots clés gratuits son nom. ['a', 'b=42', 1/2
(kwargs) '**kws']
0 / tout
['*varargs',
'**kwargs']
Les noms d'argument réels et les valeurs par défaut renvoyées sont également
importants. Ils sont nécessaires pour le support des arguments nommés et l' outil Libdoc
en a besoin pour pouvoir créer une documentation de bibliothèque significative.
Pointe
Dans la plupart des cas, la syntaxe des arguments nommés fonctionne avec des
mots-clés dynamiques exactement comme elle fonctionne avec tout autre mot-clé
qui la prend en charge. Le seul cas particulier est celui où un mot-clé a plusieurs
arguments avec des valeurs par défaut, et seuls certains de ces derniers sont
donnés. Dans ce cas, la structure remplit les arguments facultatifs ignorés en
fonction des valeurs par défaut renvoyées par la get_keyword_argumentsméthode.
Nommé
Dynamique a arg2 = b # [a, b] Dynamique a b arg3 = c # [a, b, c]
Dynamique a arg2 = b arg3 = c # [a, b, c] Dynamique arg1 = a arg2 = b arg3
= c # [a, b, c]
Remplir sauté
Dynamique un arg3 = c # [a, xxx, c]
Seulement positionnel
Dynamique a # [a], {} dynamique a b # [a, b], {}
Seulement kwargs
Dynamique a = 1 # [], {a: 1} Dynamique a = 1 b = 2 c = 3 # [], {a: 1,
b: 2, c: 3}
Positionnel et kwargs
Dynamique a b = 2 # [a], {b: 2} Dynamique a b = 2 c = 3 # [a], {b: 2,
c: 3}
Nommé et kwargs
Dynamique arg1 = a b = 2 # [a], {b: 2} dynamique arg2 = a b = 2 c = 3 #
[xxx, a], {b: 2, c: 3}
Résumé
Toutes les méthodes spéciales de l'API dynamique sont répertoriées dans le tableau
ci-dessous. Les noms de méthode sont répertoriés au format de soulignement, mais
leurs alias camelCase fonctionnent exactement de la même manière.
Remarque
classe HybridExample :
Notez que __getattr__cela n'exécute pas le mot clé réel comme le run_keywordfait
l'API dynamique. Au lieu de cela, il ne renvoie qu'un objet appelable qui est ensuite
exécuté par Robot Framework.
Un autre point à noter est que Robot Framework utilise les mêmes noms que ceux
utilisés get_keyword_namespour trouver les méthodes qui les implémentent. Ainsi,
les noms des méthodes implémentées dans la classe elle-même doivent être
renvoyés au même format que celui défini. Par exemple, la bibliothèque ci-dessus
ne fonctionnerait pas correctement si elle étaitget_keyword_namesrenvoyée My
Keywordau lieu de my_keyword.
L'API hybride n'est pas très utile avec Java, car il n'est pas possible de gérer les
méthodes manquantes. Bien sûr, il est possible d'implémenter toutes les méthodes
de la classe bibliothèque, mais cela apporte peu d'avantages par rapport à l'API
statique.
En raison des avantages évidents et des capacités égales, l'API hybride est dans la
plupart des cas une meilleure alternative que l'API dynamique lors de l'utilisation
de Python. Une exception notable est l'implémentation d'une bibliothèque en tant
que proxy pour une implémentation de bibliothèque réelle, car le mot clé réel doit
alors être exécuté ailleurs et le proxy ne peut que transmettre le nom du mot clé et
ses arguments.
API disponibles
À partir de Robot Framework 2.7, la documentation de l'API est hébergée séparément
sur l'excellent service Read the Docs . Si vous ne savez pas comment utiliser
certaines API ou si vous les utilisez, veuillez envoyer une question à la liste de
diffusion .
Utiliser l'héritage
Un autre moyen simple d'étendre une bibliothèque existante consiste à utiliser
l'héritage. Ceci est illustré par l'exemple ci-dessous qui ajoute un nouveau titre
devrait commencer par mot-clé à la bibliothèque Selenium . Cet exemple utilise
Python, mais vous pouvez évidemment étendre de la même manière une
bibliothèque Java existante en code Java.
à partir de SeleniumLibrary import SeleniumLibrary
Cette approche fonctionne bien lorsque vous commencez à utiliser une nouvelle
bibliothèque et souhaitez y ajouter des améliorations personnalisées dès le
début. Sinon, les autres mécanismes expliqués dans cette section sont probablement
meilleurs.
4.2.1 Introduction
4.2.2 Utilisation de la bibliothèque distante
o Importer une bibliothèque distante
o Démarrage et arrêt de serveurs distants
4.2.3 Arguments et types de valeur de retour pris en charge
4.2.4 Protocole à distance
o Méthodes requises
o Obtenir des noms de mots clés distants et d'autres informations
o Exécution de mots-clés distants
o Différentes syntaxes d'arguments
4.2.1 Introduction
Il y a deux raisons principales pour utiliser l'API de la bibliothèque distante:
Il est possible d'avoir des bibliothèques réelles sur des machines différentes
de celles où Robot Framework est exécuté. Cela permet des possibilités
intéressantes pour les tests distribués.
Les bibliothèques de test peuvent être implémentées dans n'importe quel
langage prenant en charge le protocole XML-RPC . Il existe des serveurs
distants génériques prêts à l'emploi pour différents langages tels que Python,
Java, Ruby, .NET, etc.
L'interface de la bibliothèque distante est fournie par la bibliothèque distante qui est
l'une des bibliothèques standard . Cette bibliothèque n'a pas de mot-clé, mais elle
fonctionne comme un proxy entre la structure principale et les mots-clés mis en
œuvre ailleurs. La bibliothèque distante interagit avec les implémentations de
bibliothèque réelles via des serveurs distants et la bibliothèque et les serveurs
distants communiquent à l'aide d'un protocole distant simple au-dessus d'un canal
XML-RPC. L'architecture de haut niveau de tout cela est illustrée dans l'image ci-
dessous:
Architecture de cadre robotique avec bibliothèque distante
Remarque
Le client distant utilise le module xmlrpclib standard de Python . Il ne prend pas en charge les
extensions XML-RPC personnalisées implémentées par certains serveurs XML-RPC.
L'URL utilisée par le premier exemple ci-dessus est également l'adresse par défaut
utilisée par la bibliothèque distante si aucune adresse n'est donnée.
Remarque
Port 8270est le port par défaut que les serveurs distants sont censés utiliser et a été enregistré
par l'IANA à cette fin. Ce numéro de port a été sélectionné car 82 et 70 sont les codes ASCII
des lettres Ret F, respectivement.
Remarque
Remarque
Si l'URI ne contient aucun chemin après l'adresse du serveur, le module xmlrpclib utilisé par
la bibliothèque distante utilisera le /RPC2chemin par défaut. En pratique,
l'utilisation http://127.0.0.1:8270est donc identique à
l'utilisation http://127.0.0.1:8270/RPC2. Selon le serveur distant, cela peut ne pas être un
problème. Aucun chemin supplémentaire n'est ajouté si l'adresse a un chemin, même si le
chemin est juste /. Par exemple,
ni http://127.0.0.1:8270/ni ni ne http://127.0.0.1:8270/my/pathseront modifiés.
La façon dont un serveur distant peut être arrêté dépend de la manière dont il est
implémenté. En règle générale, les serveurs prennent en charge les méthodes
suivantes:
Quelle que soit la bibliothèque utilisée, les serveurs distants doivent fournir
le mot clé Stop Remote Server qui peut être facilement utilisé par les tests
exécutés.
Les serveurs distants doivent avoir une stop_remote_serverméthode dans
leur interface XML-RPC.
Frapper Ctrl-Csur la console sur laquelle le serveur est en cours d'exécution
doit arrêter le serveur.
Le processus du serveur peut être interrompu à l'aide des outils fournis par le
système d'exploitation (par exemple, kill ).
Remarque
Les serveurs peuvent être configurés pour que les utilisateurs ne puissent pas l'arrêter avec
le mot clé ou la méthode Arrêter le serveur distantstop_remote_server .
La bibliothèque distante et le serveur distant Python traitent tous deux les valeurs
Python conformément aux règles suivantes. Les autres serveurs distants doivent se
comporter de la même manière.
Les chaînes, les nombres et les valeurs booléennes sont transmis sans
modification.
Python Noneest converti en une chaîne vide.
Toutes les listes, les tuples et autres objets itérables (à l'exception des
chaînes et des dictionnaires) sont transmis en tant que listes afin que leur
contenu soit converti de manière récursive.
Les dictionnaires et autres mappages sont passés en tant que dictionnaires
afin que leurs clés soient converties en chaînes et que les valeurs soient
converties en types pris en charge de manière récursive.
Les dictionnaires renvoyés sont convertis en dicts dits accessibles par des
points qui permettent d'accéder aux clés en tant qu'attributs en utilisant
la syntaxe de la variable étendue comme ${result.key}. Cela fonctionne
également avec les dictionnaires imbriqués comme ${root.child.leaf}.
Les chaînes contenant des octets dans la plage ASCII qui ne peuvent pas être
représentés en XML (par exemple, l'octet nul) sont envoyées en tant qu'objets
binaires utilisant en interne le type de données XML-RPC base64. Les objets
binaires reçus sont automatiquement convertis en chaînes d'octets.
Les autres types sont convertis en chaînes.
Remarque
Avant Robot Framework 2.8.3, seules les listes, les tuples et les dictionnaires étaient traités
conformément aux règles ci-dessus. Les itérations générales et les mappages n'étaient pas pris
en charge. De plus, le support binaire est nouveau dans Robot Framework 2.8.4 et les
dictionnaires accessibles par des points sont à nouveau disponibles dans Robot Framework
2.9.
Méthodes requises
Un serveur distant est un serveur XML-RPC qui doit avoir les mêmes méthodes
dans son interface publique que l' API de bibliothèque
dynamique . Seuls get_keyword_names et run_keywordsont effectivement nécessaires,
mais get_keyword_arguments, get_keyword_tagset get_keyword_documentationsont
également recommandés. Notez que l'utilisation du format camelCase
comme getKeywordNamesdans les noms de méthode n'est pas possible de la même
manière que dans l'API dynamique normale. La manière dont les mots-clés réels
sont implémentés n'est pas pertinente pour la bibliothèque distante. Les serveurs
distants peuvent soit servir de wrappers pour les bibliothèques de test réelles,
comme le font les serveurs distants génériques disponibles , soit implémenter des
mots-clés eux-mêmes.
Le serveur distant Python peut être utilisé comme une implémentation de référence.
Les serveurs distants peuvent également fournir une documentation générale sur la
bibliothèque à utiliser lors de la génération de la documentation avec l' outil Libdoc .
Remarque
get_keyword_tagsest nouveau dans Robot Framework 3.0.2. Avec les versions antérieures,
les étiquettes de mots-clés peuvent être incorporées dans la documentation du mot-clé .
prénom Explication
sortie Sortie possible pour écrire dans le fichier journal. Doit être donné sous forme de
chaîne unique mais peut contenir plusieurs messages et différents niveaux de
journalisation au format *INFO* First message\n*HTML*
<b>2nd</b>\n*WARN* Another message. Il est également possible d'intégrer
des horodatages aux messages du journal comme*INFO:1308435758660*
Message with timestamp.
revenir Valeur de retour possible. Doit être l'un des types pris en charge .
traceback Trace de trace possible pour écrire dans le fichier journal à l' aide du niveau
DEBUG lorsque l'exécution échoue.
continuable Lorsqu'elle est définie sur Trueou sur toute valeur considérée Truedans Python,
l'échec survenu est considéré comme continuable . Nouveau dans Robot Framework
2.8.4.
Entrées dans le dictionnaire de résultats distant
prénom Explication
fatal Comme continuable, mais indique que l'échec survenu est fatal . Aussi nouveau
dans Robot Framework 2.8.4.
Remarque
Les auditeurs sont des classes ou des modules avec certaines méthodes spéciales, et
ils peuvent être implémentés à la fois avec Python et Java. Les auditeurs qui
surveillent l'exécution complète du test doivent être utilisés à partir de la ligne de
commande. De plus, les bibliothèques de test peuvent enregistrer des écouteurs qui
reçoivent des notifications lorsque cette bibliothèque est active.
Il est également possible de donner des arguments aux classes d'écoute depuis la
ligne de commande. Les arguments sont spécifiés après le nom de l'écouteur (ou
chemin) en utilisant deux points ( :) comme séparateur. Si un écouteur est fourni en
tant que chemin d'accès Windows absolu, les deux points après la lettre de lecteur
ne sont pas considérés comme un séparateur. À partir de Robot Framework 2.8.7, il
est possible d'utiliser un point-virgule ( ;) comme séparateur d'argument
alternatif. Ceci est utile si les arguments de l'écouteur contiennent eux-mêmes des
deux-points, mais requièrent que la valeur entière soit entourée de guillemets sur
les systèmes d'exploitation de type UNIX:
robot --listener listener.py:arg1:arg2 tests.robot
robot --listener "listener.py; arg: with: colons" tests.robot
robot - listener C: \ Path \ Listener.py; D: \ data; E: \ extra
tests.robot
Une autre différence entre les versions 2 et 3 est que la première prend en charge à
la fois Python et Java, mais la seconde ne prend en charge que Python.
Les versions d'écoute 2 et 3 utilisent principalement les mêmes méthodes, mais les
arguments qu'elles acceptent sont différents. Ces méthodes et leurs arguments sont
expliqués dans les sections suivantes. Toutes les méthodes qui ont un trait de
soulignement dans leur nom ont aussi l' alternative camelCase . Par exemple,
la start_suiteméthode peut également être utilisée avec le nom startSuite.
Version d'auditeur 2
Les méthodes d'écoute de l'API version 2 sont répertoriées dans le tableau
suivant. Toutes les méthodes liées à la progression de l'exécution du test ont la
même signature method(name, attributes), où se attributestrouve un dictionnaire
contenant les détails de l'événement. Les méthodes d'écoute sont libres de faire ce
qu'elles veulent avec les informations qu'elles reçoivent, mais elles ne peuvent pas
le changer directement. Si cela est nécessaire, l' écouteur version 3 peut être utilisé à
la place.
Les méthodes disponibles et leurs arguments sont également présentés dans une
spécification d'interface Java formelle ci-dessous. Le contenu du java.util.Map
attributessont comme dans le tableau ci-dessus. Il ne faut pas oublier qu'un
auditeur n'a pas besoin d'implémenter une interface explicite ou d'avoir toutes ces
méthodes.
interface publique RobotListenerInterface {
public static final int ROBOT_LISTENER_API_VERSION = 2 ;
void startSuite ( nom de la chaîne , java . util . attributs de la
carte ); void endSuite ( nom de la chaîne , java . util . attributs de
carte ); void startTest ( nom de la chaîne , java . util .
Attributs de la carte );
void endTest ( nom de la chaîne , java . util . attributs de la carte
); void startKeyword ( nom de la chaîne , java . util . attributs de la
carte ); void endKeyword ( nom de la chaîne , java . util . attributs de la
carte ); annuler le logMessage ( java . util . Map
message );
message annulé ( java . util . Message carte ); void outputFile (
chemin de chaîne ); void logFile ( chemin de la chaîne ); void reportFile (
chemin de la chaîne ); void debugFile ( chemin de la chaîne ); void close
(); }
Version auditeur 3
La version 3 de l'auditeur utilise principalement les mêmes méthodes que la version
2 de l'écouteur mais les arguments des méthodes liées à l'exécution des tests sont
différents. Cette API obtient les objets de modèle d'exécution et de résultat réels
utilisés par Robot Framework lui-même, et les auditeurs peuvent à la fois interroger
directement les informations dont ils ont besoin et modifier les objets du modèle à
la volée.
start_keyword, Les messages sont consignés dans le fichier journal normal sous le mot
end_keyword, clé exécuté.
log_message
start_suite, end_suite, Les messages sont enregistrés dans le journal système . Les
start_test, end_teste avertissements sont également affichés dans la section sur les erreurs
d'exécution du fichier journal normal.
Autres méthodes Les messages ne sont consignés que dans le journal système.
Remarque
Pour éviter la récursivité, les messages enregistrés par les écouteurs ne sont pas envoyés aux
méthodes d'écoute log_messageet message.
ROBOT_LISTENER_API_VERSION = 2
ROBOT_LISTENER_API_VERSION = 3
L'exemple suivant, qui utilise toujours Python, est légèrement plus compliqué. Il
écrit toutes les informations qu'il reçoit dans un fichier texte dans un répertoire
temporaire sans beaucoup de mise en forme. Le nom de fichier peut être donné à
partir de la ligne de commande, mais a également une valeur par défaut. Notez
qu'en mode réel, la fonctionnalité de fichier de débogage disponible via l'option de
ligne de commande --debugfile est probablement plus utile que cet exemple.
import os.path
import tempfile
classe PythonListener :
ROBOT_LISTENER_API_VERSION = 2
Cette API est très similaire à l’ API de modificateur pré-exécution qui peut être
utilisée pour modifier des suites et des tests avant le début de l’exécution complète
du test. L'avantage principal de l'utilisation de l'API d'écouteur est que les
modifications peuvent être effectuées dynamiquement en fonction des résultats
d'exécution ou autres. Cela permet, par exemple, des possibilités intéressantes pour
des tests basés sur des modèles.
Bien que l'interface du programme d'écoute ne repose pas sur l' interface
visiteur interne de Robot Framework de la même manière que l'API du modificateur
pré-exécution, les auditeurs peuvent toujours utiliser l'interface des visiteurs eux-
mêmes. Par exemple, le SelectEveryXthTestvisiteur utilisé dans les exemples
de modificateurs pré-analyse pourrait être utilisé comme ceci:
à partir de SelectEveryXthTest import SelectEveryXthTest
ROBOT_LISTENER_API_VERSION = 3
Les résultats de l'exécution du test peuvent être modifiés en modifiant les objets de
résultat de la suite de tests et du scénario de test transmis en tant que second
argument start_suiteet start_testméthodes, respectivement, et en modifiant
l' objet message transmis à la log_messageméthode. Ceci est démontré par l'auditeur
suivant qui est implémenté en tant que classe.
class ResultModifier ( objet ):
ROBOT_LISTENER_API_VERSION = 3
def
start_suite ( self , data , suite ):
suite . doc = 'Documentation définie par l'auditeur.'
# Informations sur les tests disponibles uniquement via les données
à ce stade.
smoke_tests = [ test de test dans les données . tests si
«fumée» en test . tags ]
suite . metadata [ 'Smoke tests' ] = len ( smoke_tests )
def
end_test ( self , data , test ):
si test . status == 'PASS' et test . temps écoulé > auto .
max_milliseconds :
test . status = Test 'FAIL'
. message = 'L'exécution du test a pris trop de temps.'
def log_message ( self , msg ):
si msg . level == 'WARN' et non msg . html :
msg . message = '<b style = "font-size: 1.5em"> % s </ b>' %
msg . message
msg . html = True
Cette API est très similaire à l’ API de modificateur pré-Rebot qui peut être utilisée
pour modifier les résultats avant que le rapport et le journal ne soient générés. La
principale différence est que les auditeurs modifient également
le fichier output.xml créé .
Remarque
Enregistrement de l'auditeur
Une bibliothèque de test peut enregistrer un écouteur en utilisant
l' ROBOT_LIBRARY_LISTENER attribut. La valeur de cet attribut doit être une instance
de l'écouteur à utiliser. Il peut s'agir d'un auditeur totalement indépendant ou de la
bibliothèque elle-même. Pour éviter que les méthodes d'écoute soient exposées en
tant que mots-clés dans ce dernier cas, il est possible de les préfixer par un trait de
soulignement. Par exemple, au lieu d'utiliser end_suiteou endSuite, il est possible
d'utiliser _end_suiteou _endSuite.
Les exemples suivants illustrent l'utilisation d'un auditeur externe ainsi que d'une
bibliothèque agissant comme un auditeur lui-même:
import my.project.Listener ;
À partir de la version 2.9, vous pouvez également fournir n'importe quelle liste
comme objet d'instance dans l' ROBOT_LIBRARY_LISTENERattribut. Cela entraînera
l'enregistrement de toutes les instances de la liste en tant qu'écouteurs.
Voir la section Méthodes d'interface d'écoute ci-dessus pour plus d'informations sur
toutes ces méthodes.
Par exemple, pour ajouter un package Python mytestlibau fichier JAR , copiez
d'abord le répertoire mytestlib sous un répertoire appelé Lib , puis exécutez la
commande suivante dans le répertoire contenant Lib :
jar uf /path/to/robotframework-2.7.1.jar Lib
Pour ajouter des classes Java compilées au fichier jar, vous devez avoir une
structure de répertoires correspondant à la structure du package Java et l'ajouter
récursivement au fichier zip.
5 outils de support
5.1 Outil de documentation de la bibliothèque (Libdoc)
5.2 Outil de documentation des données de test (Testdoc)
5.3 Outil de nettoyage des données de test (Tidy)
5.4 Outils externes
De plus, il est possible d'utiliser des spécifications XML créées par Libdoc plus tôt
en tant qu'entrée.
Les options
Spécifie s'il faut générer une sortie HTML ou XML. Si cette option n'est pas
utilisée, le format provient de l'extension du fichier de sortie.
Exécution alternative
Bien que Libdoc ne soit utilisé qu'avec Python dans le synopsis ci-dessus, il
fonctionne également avec Jython et IronPython. Lorsque vous documentez des
bibliothèques Java, Jython est réellement requis.
Dans le synopsis, Libdoc est exécuté en tant que module installé ( python -m
robot.libdoc). En plus de cela, il peut être exécuté aussi en tant que script:
L'exécution en tant que script peut être utile si vous avez effectué une installation
manuelle ou avez simplement le répertoire du robot avec le code source quelque part
dans votre système.
Les fichiers de ressources doivent toujours être spécifiés à l'aide d'un chemin. Si le
chemin n'existe pas, les fichiers de ressources sont également recherchés de la
même manière dans tous les répertoires du chemin de recherche du module que lors de
l'exécution de scénarios de test.
Génération de documentation
Lors de la génération de la documentation au format HTML ou XML, le fichier de
sortie doit être spécifié comme second argument après le nom ou le chemin de la
bibliothèque / ressource. Le format de sortie est obtenu automatiquement à partir de
l'extension mais peut également être défini à l'aide de l' option --format .
Exemples:
python -m robot.libdoc OperatingSystem OperatingSystem.html
python -m robot.libdoc --name MyLibrary Remote :: http: //10.0.0.42:
8270 MyLibrary.xml
python -m robot.libdoc test / resource.html doc / resource_doc.html
jython -m robot.libdoc --version 1.0 MyJavaLibrary.java
MyJavaLibrary.html
jython -m robot.libdoc my.organization.DynamicJavaLibrary
my.organization.DynamicJavaLibrary.xml
Exemples:
Liste de boîtes de dialogue python -m robot.libdoc
python -m robot.libdoc SeleniumLibrary navigateur de liste
python -m robot.libdoc Remote :: 10.0.0.42: 8270
python -m robot.libdoc Les boîtes de dialogue montrent PauseExecution
exécutée *
python -m robot.libdoc SeleniumLibrary show intro
python -m robot.libdoc Version SeleniumLibrary
Bibliothèques Python
La documentation des bibliothèques Python qui utilisent l' API de la bibliothèque
statique est simplement écrite en tant que chaînes de doc pour la classe ou le module
de bibliothèque et pour les méthodes implémentant des mots-clés. La première
ligne de la documentation de la méthode est considérée comme une courte
documentation pour le mot-clé (utilisée par exemple comme une info-bulle dans les
liens de la documentation HTML générée) et devrait donc être aussi descriptive que
possible, mais pas trop longue.
Pointe
Si vous voulez utiliser des caractères non-ASCII dans la documentation des bibliothèques
Python, vous devez soit utiliser UTF-8 comme encodage de votre code source, soit créer des
docstrings comme Unicode.
Pour plus d'informations sur les chaînes de documentation Python, voir PEP-257 .
Bibliothèques Java
La documentation des bibliothèques Java utilisant l' API de bibliothèque statique est
écrite en tant que commentaires Javadoc normaux pour la classe et les méthodes de la
bibliothèque. Dans ce cas, Libdoc utilise réellement l’outil Javadoc en interne et
donc tools.jar le contenant doit être dans CLASSPATH . Ce fichier jar fait partie de la
distribution Java SDK normale et doit être trouvé dans le répertoire bin sous
l’installation du SDK Java.
/ **
* Ne fait rien.
* /
public void myKeyword () {
}
/ **
* Prend un argument et * ne fait rien *.
*
* Exemples:
* | Votre mot clé | xxx |
* | Votre mot clé | yyy |
* /
Publique vide yourKeyword ( chaîne arg ) {
}
}
Bibliothèques dynamiques
Pour être en mesure de générer des documents significatifs pour les bibliothèques
dynamiques, les bibliothèques doivent retourner les noms d'argument mot - clé et
la documentation à
l' aideget_keyword_argumentset get_keyword_documentation méthodes (ou
en utilisant leurs variantes
camelCase getKeywordArguments et getKeywordDocumentation). Les bibliothèques
peuvent également prendre en charge la documentation générale de la bibliothèque
via special __intro__et des __init__valeurs à
la get_keyword_documentationméthode.
Section d'importation
Une section distincte sur la façon dont la bibliothèque est importée est créée en
fonction de ses méthodes d'initialisation. Pour une bibliothèque Python, si elle
possède une __init__ méthode qui prend des arguments en plus self, sa
documentation et ses arguments sont affichés. Pour une bibliothèque Java, si elle a
un constructeur public qui accepte les arguments, tous ses constructeurs publics
sont affichés.
classe TestLibrary :
Votre mot-clé
[ Arguments ] $ { arg }
[ Documentation ] Prend un argument et * ne fait rien *.
...
... Exemples:
... | Votre mot clé | xxx |
... | Votre mot clé | yyy |
Pas d'opération
Certaines des fonctionnalités de formatage les plus importantes sont illustrées dans
l'exemple ci-dessous. Notez que comme il s'agit du format par défaut, il n'est pas
nécessaire d'utiliser l'ROBOT_LIBRARY_DOC_FORMATattribut ni de donner le format à
partir de la ligne de commande.
"" "Exemple de bibliothèque au format Robot Framework.
<ul>
<li> Mise en forme avec <b> gras </ b> et <i> italique </ i>.
<li> Les URL ne sont pas automatiquement converties en liens.
<li> Les liens personnalisés tels que <a href="http://www.w3.org/html">
HTML </a> sont pris en charge.
<li> Lier à `My Keyword` fonctionne.
</ ul>
"" "
ROBOT_LIBRARY_DOC_FORMAT = 'HTML'
__ http://docutils.sourceforge.net
.. code :: robotframework
Il n'y a pas d'erreur ou d'avertissement si une cible de lien n'est pas trouvée, mais à
la place, Libdoc formate simplement le texte en italique. Auparavant, il était
recommandé d’utiliser cette mise en forme lorsqu’on faisait référence à des
arguments de mot-clé, mais cela posait problème car cela risquait de créer
accidentellement des liens internes. Aujourd'hui, il est recommandé d'utiliser
un style de code en ligne avec des raccourcis doubles tels que ``
argument`` . L'ancien formatage des raccourcis uniques peut même être
supprimé à l'avenir en faveur d'une erreur lorsqu'une cible de lien n'est pas trouvée.
Outre les exemples des sections suivantes, les liaisons internes et la mise en forme
des arguments sont également présentées dans l’ exemple le plus long à la fin de ce
chapitre.
Remarque
Toutes ces sections agissent comme des cibles pouvant être liées et les noms de
cibles possibles sont répertoriés dans le tableau ci-dessous. L'utilisation de ces
cibles est illustrée dans l'exemple de la section suivante.
Section Cible
= Ma section =
Remarque
Remarque
Avant Robot Framework 2.8, seuls les titres de section de premier niveau pouvaient être liés.
arg=default
Valeurs par défaut pour les Les valeurs par défaut sont séparées des
value
arguments noms par =.
a, b=1, c=2
*varargs
Nombre variable Le dernier argument (ou le dernier avec
d'arguments (varargs) kwargs) a * avant son nom. a, b=42, *rest
**kwargs
Arguments de mots clés Les derniers arguments ont **avant son
gratuits (kwargs) nom. a, b=42, **kws
*varargs,
**kwargs
= Utilisation =
= Exemples =
Exemples:
Testdoc est l'outil intégré de Robot Framework pour générer une documentation de
haut niveau basée sur des cas de test. La documentation créée est au format HTML
et comprend le nom, la documentation et les autres métadonnées de chaque suite de
tests et cas de test, ainsi que les mots-clés de niveau supérieur et leurs arguments.
Fichier texte pour lire plus d'arguments à partir de. Fonctionne exactement
comme des fichiers d'argument lors de l'exécution de tests. Nouveau dans
Robot Framework 3.0.2.
Testdoc fonctionne avec tous les interpréteurs pris en charge par Robot Framework
(Python, Jython et IronPython). Il peut être exécuté comme un module installé
comme python -m robot.testdocou comme un script python
path/robot/testdoc.py.
Exemples:
python -m robot.testdoc my_test.html testdoc.html
jython -m robot.testdoc --name smoke_tests --include chemin de fumée /
to / my_tests smoke.html
chemin ipy / vers / robot / testdoc.py first_suite.txt
second_suite.txt output.html
La sortie est écrite dans le flux de sortie standard par défaut, mais un fichier de
sortie facultatif peut être donné à partir de Robot Framework 2.7.5. Les fichiers
peuvent également être modifiés sur place à l'aide des options --inplace ou --
recursive .
Les options
-i, -- Rangez les fichiers pour que les fichiers originaux soient écrasés (ou
inplace supprimés si le format est modifié). Lorsque cette option est utilisée, il est
possible de donner plusieurs fichiers d'entrée. Exemples:
Exécution alternative
Bien que Tidy ne soit utilisé qu'avec Python dans le synopsis ci-dessus, il
fonctionne également avec Jython et IronPython. Dans le synopsis, Tidy est
exécuté en tant que module installé ( python -m robot.tidy), mais il peut
également être exécuté en tant que script:
arguments python path / robot / tidy.py [options]
L'exécution en tant que script peut être utile si vous avez effectué une installation
manuelle ou avez simplement le répertoire du robot avec le code source quelque part
dans votre système.
Encodage de sortie
Tous les fichiers de sortie sont écrits en utilisant le codage UTF-8. Les sorties
écrites sur la console utilisent le codage de la console en cours.
Exemples:
python -m robot.tidy messed_up_tests.html cleaning_tests.html
python -m robot.tidy --inplace tests.txt
Exemples:
python -m robot.tidy tests.html tests.txt
python -m robot.tidy --format txt --inplace tests.html
python -m robot.tidy --format tsv --cursifs récursifs
Ces outils sont développés en tant que projets distincts indépendamment de Robot
Framework lui-même. Pour une liste des outils disponibles,
voir http://robotframework.org/#tools .
Remarque
Certains outils de support étaient distribués avec Robot Framework lui-même. De nos jours,
tous ces outils sont également disponibles séparément et ont été supprimés du référentiel et de
la distribution source dans Robot Framework 2.8.6.
6 annexes
6.1 Tous les paramètres disponibles dans les données de test
6.2 Toutes les options de ligne de commande
6.3 Modèles de données de test
6.4 Formatage de la documentation
6.5 Format de l'heure
6.6 Arguments booléens
6.7 API interne
prénom La description
Documentation Utilisé pour spécifier une suite de tests ou une documentation de fichier
de ressources .
Balises de force Utilisé pour spécifier des valeurs forcées pour les balises lors du balisage
des cas de test .
Paramètres disponibles dans le tableau des paramètres
prénom La description
Balises par défaut Utilisé pour spécifier des valeurs par défaut pour les balises lors
du balisage des cas de test.
Configuration du test Utilisé pour spécifier une configuration de test par défaut .
Modèle de test Utilisé pour spécifier un mot clé de modèle par défaut pour les
scénarios de test.
Remarque
Tous les noms des paramètres peuvent éventuellement inclure deux points à la fin, par
exemple Documentation: . Cela peut faciliter la lecture des paramètres, en particulier lorsque
vous utilisez le format texte brut.
prénom La description
prénom La description
Les tests qui ont la balise donnée sont considérés comme critiques .
--xunitskipnoncritical
-T, --timestampoutputs
--splitlog Fractionner le fichier journal en morceaux plus petits qui s'ouvrent dans
le navigateur de manière transparente.
--logtitle <title>
--reporttitle <title>
--reportbackground <colors>
--tagstatinclude <tag>
--tagstatexclude <tag>
--tagstatcombine <tags:title>
--tagdoc <pattern:doc>
--tagstatlink <pattern:link:title>
--removekeywords <all|passed|name:pattern|tag:pattern|for|wuks>
--flattenkeywords <for|foritem|name:pattern|tag:pattern>
--listener <name:args>
--warnonskippedfiles
--nostatusrc Définit le code retour sur zéro indépendamment des échecs dans les cas
de test. Les codes d'erreur sont renvoyés normalement.
--runemptysuite
-X, --exitonfailure
--exitonerror Arrête l'exécution du test en cas d'erreur lors de l'analyse des données
de test, de l'importation de bibliothèques, etc.
--skipteardownonexit
--prerunmodifier <name:args>
--prerebotmodifier <name:args>
--randomize <all|suites|tests|none>
--console <verbose|dotted|quiet|none>
Les tests qui ont la balise donnée sont considérés comme critiques .
--xunitskipnoncritical
-T, --timestampoutputs
--splitlog Fractionner le fichier journal en morceaux plus petits qui s'ouvrent dans
le navigateur de manière transparente.
--logtitle <title>
--reporttitle <title>
--reportbackground <colors>
--suitestatlevel <level>
--tagstatinclude <tag>
--tagstatexclude <tag>
--tagstatcombine <tags:title>
--tagdoc <pattern:doc>
--tagstatlink <pattern:link:title>
--removekeywords <all|passed|name:pattern|tag:pattern|for|wuks>
--flattenkeywords <for|foritem|name:pattern|tag:pattern>
Aplatit les mots-clés dans les sorties générées.
--starttime <timestamp>
--endtime <timestamp>
--nostatusrc Définit le code retour sur zéro indépendamment des échecs dans les cas
de test. Les codes d'erreur sont renvoyés normalement.
--processemptysuite
Traite les fichiers de sortie même si les fichiers contiennent des suites de
tests vides .
--prerebotmodifier <name:args>
Les modèles sont disponibles au format HTML et au format TSV et peuvent être
personnalisés librement. Il n'y a pas de modèles pour le format texte brut car il
nécessite si peu de matrices que les modèles ne seraient pas très utiles.
testcase_template.html
Modèle de fichier de cas de test au format HTML.
testcase_template.tsv
Modèle de fichier de cas de test au format TSV.
resource_template.html
Modèle de fichier de ressources au format HTML.
resource_template.tsv
Modèle de fichier de ressources au format TSV.
attd_template.html
Modèle de création de scénarios de test dans le style de développement
piloté par les tests d'acceptation (ATDD). Ces tests sont créés à partir de
mots-clés de haut niveau ne nécessitant aucun argument, et le modèle a été
simplifié en conséquence.
Les modèles sont disponibles via ce guide de l'utilisateur, ils sont inclus dans la
distribution source et peuvent également être trouvés dans les pages du projet .
Aucune nouvelle ligne automatique n'est ajoutée si une ligne se termine déjà par
une nouvelle ligne littérale ou si elle se termine par une barre oblique inverse . Si la
documentation ou les métadonnées sont définies dans plusieurs colonnes, les
cellules d'une même ligne sont concaténées avec des espaces. Ce type de
fractionnement peut être une bonne idée, en particulier lorsque vous utilisez
le format HTML et que les colonnes sont étroites. Différentes manières de diviser la
documentation sont illustrées dans les exemples ci-dessous, où tous les cas de test
finissent par avoir la même documentation à deux lignes.
*** Cas de test ***
Exemple 1
[ Documentation ] Première ligne \ n Deuxième ligne en plusieurs
parties
Pas d'opération
Exemple 2
[ Documentation ] Première ligne
... Deuxième ligne en plusieurs parties
Pas d'opération
Exemple 3
[ Documentation ] Première ligne \ n
... Deuxième ligne dans \
... plusieurs parties
Pas d'opération
6.4.2 Paragraphes
À partir de Robot Framework 2.7.2, tout le texte normal de la documentation
HTML formatée est représenté par des paragraphes. En pratique, les lignes séparées
par une nouvelle ligne seront combinées dans un paragraphe, que la nouvelle ligne
soit ajoutée manuellement ou automatiquement. Plusieurs paragraphes peuvent être
séparés par une ligne vide (c.-à-d. Deux nouvelles lignes), ainsi que des tableaux,
des listes et d'autres blocs spécialement mis en forme, discutés dans les sections
suivantes et se terminant par un paragraphe.
Remarque
Le style de code est créé en utilisant des raccourcis doubles tels que ``
code`` . Le résultat est un texte monospace avec un fond gris clair. La prise en
charge du style de code est nouvelle dans Robot Framework 2.8.6.
*audacieux* audacieux
_italique_ italique
_*gras italique*_ gras italique
`` code`` code
* bold *, puis _italic_ et enfin `` some code`` en gras , puis en italique et enfinsome code
6.4.4 URL
Toutes les chaînes qui ressemblent à des URL sont automatiquement converties en
liens cliquables. De plus, les URL se terminant par
l'extension .jpg , .jpeg , .png , .gif ou .bmp (insensible à la casse) créent
automatiquement des images. Par exemple, les URL
comme http://example.comsont transformées en
liens http:///host/image.jpget file:///path/chart.png en images.
La conversion automatique des URL en liens est appliquée à toutes les données des
journaux et des rapports, mais la création d'images est effectuée uniquement pour la
suite de tests, la documentation de cas de test et de mots clés, ainsi que pour les
métadonnées de suites de tests.
== Sous-section ==
Du texte.
== Deuxième sous-section ==
Plus de texte
= Deuxième section =
Notez que seuls trois niveaux de titre sont pris en charge et que les espaces entre les
signes égaux et le texte du titre sont obligatoires.
6.4.7 Tables
Les tableaux sont créés à l'aide de caractères de conduite avec des espaces autour
d'eux en tant que séparateurs de colonnes et de nouvelles lignes en tant que
séparateurs de lignes. Les cellules d'en-tête peuvent être créées en entourant le
contenu de la cellule de signes égaux et d'espaces optionnels tels que = Header
=ou =Header=. Les cellules des tableaux peuvent également contenir des liens et un
format tels que gras et italique:
| = A = | = B = | = C = |
| _1_ | Bonjour monde! |
| _2_ Salut
La table créée a toujours une bordure fine et le texte normal est aligné à gauche. Le
texte dans les cellules d'en-tête est en gras et centré. Les cellules vides sont
automatiquement ajoutées pour rendre les lignes aussi longues. Par exemple,
l'exemple ci-dessus serait formaté comme ceci en HTML:
UNE B C
1 Bonjour monde
2 salut
Remarque
La prise en charge des en-têtes de tableau est une nouvelle fonctionnalité de Robot
Framework 2.8.2.
6.4.8 Listes
Les listes sont créées en commençant une ligne avec un trait d'union et un espace ('-
'). Les éléments de liste peuvent être divisés en plusieurs lignes en mettant en retrait
les lignes continues avec un ou plusieurs espaces. Une ligne qui ne commence pas
par '-' et n'est pas en retrait termine la liste:
Exemple:
- un élément de liste
- deuxième élément de la liste
est continué
Exemple:
un élément de liste
deuxième élément de la liste est continué
Remarque
La prise en charge des listes de formatage a été ajoutée au 2.7.2. Avant cela, la même syntaxe
empêchait Libdoc de combiner des lignes en paragraphes, le résultat final était donc
similaire. La prise en charge du fractionnement d'éléments de liste en plusieurs lignes a été
ajoutée au 2.7.4.
Lorsque vous documentez des suites, des tests ou des mots-clés dans les données de
test de Robot Framework, le fait d'avoir plusieurs espaces nécessite de s'échapper
avec une barre oblique inverse pour éviter d'ignorer les espaces . L'exemple ci-dessus
serait ainsi écrit comme ceci:
Doc avant bloquer:
| bloc intérieur
| \ \ \ certains \ \ espaces supplémentaires blancs
Après le bloc.
---
Du texte ici.
jours, jour, d
heures, heure, h
minutes, minutes, minutes, min, m
secondes, secondes, secondes, sec, s
millisecondes, millisecondes, millis, ms
Exemples:
1 min 30 s
1,5 minutes
90 s
1 jour 2 heures 3 minutes 4 secondes 5 millisecondes
1d 2h 3m 4s 5ms
- 10 secondes
00:00:01 1 seconde
1:00:00 1 heure
00:02 2 secondes
42:00 42 minutes
Mot - clé peut également accepter d' autres chaînes spéciales que falseet noqui
doivent être considérées comme fausses. Par exemple, le mot-clé BuiltInShould Be
True utilisé dans les exemples ci-dessous considère que la chaîne no valuesdonnée
à son values argument est fausse.
*** Mots clés ***
Vrais exemples
Devrait être égal $ { x } $ { y } Valeurs d' erreur
personnalisées = Vrai # Les chaînes sont généralement vraies. Devrait être
égal à $ { x } $ { y } Valeurs d' erreur personnalisées = oui #
Identique à ce qui précède. Devrait être égal à $ { x } $ { y }
Valeurs d' erreur personnalisées = $ { TRUE } # Python `True` est
vrai. Devrait être égal à $ { x } $ { y } Valeurs d' erreur
personnalisées = $ { 42 }
Faux exemples
Devrait être égal $ { x } $ { y } Valeurs d' erreur
personnalisées = False # Chaîne `false` est fausse. Devrait être égal à
$ { x } $ { y } Valeurs d' erreur personnalisées = non # La chaîne
"non" est également fausse. Devrait être égal à $ { x } $ { y }
Valeurs d' erreur personnalisées = $ { EMPTY } # La chaîne vide est
fausse. Devrait être égal à $ { x } $ { y } Valeurs d' erreur
personnalisées = $ { FALSE }
Notez qu'avant Robot Framework 2.9, la gestion des arguments booléens était
incohérente. Certains mots-clés suivaient les règles ci-dessus, mais d'autres
considéraient simplement que toutes les chaînes non vides, y compris falseet no,
étaient vraies.