Syntaxe des scénarios XML

Un scénario de test est un document XML qui respecte la structure décrite par le schéma d'application rtest.xsd. Ce schéma d'application simplifie considérablement l'édition du scénario de test en utilisant un éditeur XML tel que XMLSpy, OxygenXML ou autre. Ces outils permettent de détecter rapidement les erreurs de saisie et proposent même une aide à l'écriture. Il est important d'utiliser un outil performant pour éviter de perdre du temps inutile lors de l'édition des scénarios de test.

La suite de ce document décrit les différents éléments pouvant se trouver dans un scénario de test. La notation utilisée est la suivante : /element1/element2@attr1 Où :

  • /element1 correspond à l'élément racine du document (scenario)

  • element2 correspond à un élément contenu dans element1

  • attr1 est un attribut d'element2

Avertissement

La casse et l'ordre des éléments doivent être respectés.

Scénario

/scenario

  • Elément requis

  • Description : <scenario> est l'élément racine de tous scénarios. Son contenu est fixe (scénario exemple), seul l'attribut xsi:schemaLocation peut être modifié.

<scenario xmlns="http://www.veremes.com/rtest" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.veremes.com/rtest http://schemas.veremes.net/rtest/2.0/rtest.xsd">

/scenario@xsi:schemaLocation

  • Attribut facultatif - utile pour l'édition

  • Description : L'attribut xsi:schemaLocation de l'élément permet de décrire l'emplacement du schéma d'application de référence.

  • Valeur par défaut :

xsi:schemaLocation="http://www.veremes.com/rtest http://schemas.veremes.net/rtest/2.0/rtest.xsd"

Ce qui indique que l'éditeur XML doit s'appuyer sur la version du schéma d'application située à l'adresse http://schemas.veremes.net/rtest/2.0/rtest.xsd

Pour travailler hors connexion internet ou pour adapter le schéma à ses propres besoins, il est possible de copier rtest.xsd dans le répertoire local et de le référencer ainsi :

xsi:schemaLocation="http://www.veremes.com/rtest ./rtest.xsd"

/scenario/project

  • Elément facultatif

  • Description : Nom du projet auquel appartient le scénario de test. Cette valeur est utilisée pour affichage dans le rapport html.

/scenario/description

  • Elément facultatif

  • Description : Description du scénario de test. Cette valeur est utilisée pour affichage dans le rapport html.

/scenario/rtestCollection

  • Elément requis

  • Description : Collection d'éléments de type <rtest>.

/scenario/rtestCollection/rtest

  • Elément requis

  • Description : Cet élément regroupe l'ensemble des informations nécessaires à la description d'un test. Il est possible de décrire un ou plusieurs éléments <rtest> de manière consécutive.

/scenario/rtestCollection/rtest@id

  • Attribut requis

  • Description : Chaque élément rtest dispose d'un attribut id permettant de l'identifier de manière unique au sein d'un même scénario. L'attribut id est de type xs:ID, il doit donc suivre les règles suivantes :

    • il doit commencer par une lettre.

    • il ne doit pas contenir d'espace, de retour chariot ou de caractères spéciaux en dehors du point.

    • il doit être unique dans le jeu de données.

/scenario/rtestCollection/rtest@label

  • Attribut facultatif

  • Description : Nom du test. Cette valeur est utilisée pour affichage dans le rapport html.

label="Point in a donut (Switzerland)"

Process

/scenario/rtestCollection/rtest/processCollection

  • Elément facultatif

  • Description : Collection d'éléments de type <process>

/scenario/rtestCollection/rtest/processCollection/process

  • Elément requis à l'intérieur de <processCollection>

  • Description : Cet élément regroupe l'ensemble des informations nécessaires à la description d'un traitement FME (process). Il est possible de décrire un ou plusieurs éléments <process> de manière consécutive.

/scenario/rtestCollection/rtest/processCollection/process@deletebefore

/scenario/rtestCollection/rtest/processCollection/process@deleteafter

  • Attribut facultatif

  • Description : Ces attributs donnent la liste des fichiers à supprimer avant ou après l'exécution du traitement FME. Les chemins peuvent être absolus ou relatifs au scénario de test. S'il y a plusieurs fichiers, ils doivent être séparés par une virgule. Les motifs sont supportés. L'exemple suivant montre comment supprimer le fichier dbcountry.sqlite contenu dans le répertoire result ainsi que tous les fichiers avec l'extension .log.

<process deletebefore="./result/dbcountry.sqlite,./result/*.log">

Prudence

Si un fichier est verrouillé, la suppression échoue et scenarioPlayer s'arrête. Un fichier peut être utilisé et verrouillé par FME lors de l'exécution de scenarioPlayer. En cas de problème, il convient donc de changer de nom de fichier lors de tests successifs dans un même scénario de test ou bien de séparer les tests dans différents scénarios. Pour réduire les risques de suppression involontaire en cas de mauvais paramétrage, le nombre de fichiers pouvant être supprimés par un même motif est limité à 20. Si un tel cas est détecté, scenarioPlayer s'arrête et un message d'erreur est ajouté dans le fichier de log. Malgré cette limitation il convient d'être très prudent lors de l'utilisation des paramètres deletebefore et deleteafter.

/scenario/rtestCollection/rtest/processCollection/process@waitbefore

/scenario/rtestCollection/rtest/processCollection/process@waitafter

  • Attribut facultatif

  • Description : Ces attributs définissent un temps d'attente (en seconde) avant ou après l'exécution du traitement FME. Ils doivent être exploités lors du test d'une chaîne d'intégration complexe en mode asynchrone. Par exemple lorsque le traitement FME sous-traite certaines tâches à FME Server ou à WorkspaceRunner en mode asynchrone (sans attendre la fin du traitement).

  • Valeur attendue : Un nombre entier.

  • Exemple : Le process suivant doit attendre 1 minute avant d'être exécuté.

<process waitbefore="60" >

/scenario/rtestCollection/rtest/processCollection/process@label

  • Elément facultatif

  • Description : Description du traitement FME et de ses paramètres. Cette valeur est utilisée pour affichage dans le rapport HTML.

/scenario/rtestCollection/rtest/processCollection/process/workspace

  • Elément requis

  • Description : Nom et chemin du traitement FME à exécuter. Le chemin peut être absolu ou relatif au scénario de test.

  • Valeur attendue : Chemin vers un projet FME au format .fmw

  • Exemple :

<workspace>./HelloWorld.fmw</workspace>

/scenario/rtestCollection/rtest/processCollection/process/expectedstatus

  • Elément facultatif

  • Description : Permet de spécifier si le résultat attendu est le succès ou l'échec du traitement : Translation FAILED ou bien Translation was SUCCESSFUL. Il est parfois utile de vérifier que l'utilisation de certains paramètres fait échouer volontairement le traitement. De ce fait si le statut attendu est failure et que le traitement échoue, alors le rapport html montrera un test en succès.

  • Valeur attendue : [failure|success], la valeur par défaut est success

/scenario/rtestCollection/rtest/processCollection/process/process@copylogto

  • Attribut facultatif

  • Description : Permet de forcer la copie du fichier de log du traitement dans un répertoire et sous un nom connu. Cette technique permet une inspection ultérieure du contenu du log lors d'une opération de vérification.

  • Valeur attendue : Chemin absolu ou relatif du fichier à produire.

  • Exemple :

<process copylogto="./result/helloworld.log" >

/scenario/rtestCollection/rtest/processCollection/process/parameterCollection

  • Elément facultatif

  • Description : Cet élément contient la collection de tous les paramètres du traitement FME <parameter>.

/scenario/rtestCollection/rtest/processCollection/process/parameterCollection/parameter

  • Elément requis à l'intérieur de <parameterCollection>

  • Description : Un des paramètres du traitement FME. Chaque paramètre est décrit par ses deux attributs name et value.

  • Exemple :

<parameter name="xy" value="-123.0 49.1"/>
<parameter name="destShpDir" value="./result/country.zip"/>

/scenario/rtestCollection/rtest/processCollection/process/parameterCollection/parameter@name

  • Attribut requis

  • Description : Nom du paramètre FME. La casse doit être respectée.

/scenario/rtestCollection/rtest/processCollection/process/parameterCollection/parameter@value

  • Attribut requis

  • Description : Valeur du paramètre FME.


Checks

/scenario/rtestCollection/rtest/checkCollection

  • Elément facultatif

  • Description : Collection d'éléments de type <check>

/scenario/rtestCollection/rtest/checkCollection/check

  • Elément requis à l'intérieur de <checkCollection>

  • Description : Cet élément regroupe l'ensemble des informations nécessaires à la description d'une vérification (check). Il est possible de décrire un ou plusieurs éléments <check> de manière consécutive.

/scenario/rtestCollection/rtest/checkCollection/check@label

  • Elément facultatif

  • Description : Description de la vérification. Cette valeur est utilisée pour affichage dans le rapport html.

/scenario/rtestCollection/rtest/checkCollection/check/source

  • Elément requis

  • Description : L'élément <source> permet de calculer la valeur à vérifier, également appelée "Valeur observée". La valeur observée provient d'un jeu de données. Selon le type du jeu de données, il peut s'agir par exemple du nombre d'enregistrements, de la valeur d'un attribut, de la taille d'un fichier ou du résultat d'une requête SQL.

/scenario/rtestCollection/rtest/checkCollection/check/source@type

  • Attribut requis

  • Description : L'attribut source@type définit le type de source de données à lire pour obtenir la valeur observée. Il existe trois types possibles : file, datafile et database.

Type file

Lorsque scenarioPlayer rencontre une source de données de type file il ne cherche pas à l'ouvrir mais regarde uniquement ses caractéristiques externes telles que la taille ou la date de création. Actuellement la seule fonction disponible sur les sources de données de type file est fileSize() qui renvoie à la taille du fichier (en octet) comme valeur observée.

Type datafile

Les sources de données de type datafile doivent être associées à un format (cf.source@format). Elles peuvent ainsi être lues par scenarioPlayer avec le bon Reader FME. Les fonctions disponibles pour calculer la valeur observée sur ce type de fichiers sont : featuresCount(), attributeValue(), featuresCountByFtAndGeometry()

Type logfile

Le type logfile permet de rechercher un motif dans un fichier de type texte. Il n'est pas nécessaire de spécifier le format du jeu de données. Le jeu de données source@dataset est lu ligne par ligne et chaque ligne est comparée à la valeur attendue. Si au moins une ligne est conforme, la validation passe en état "Succès", sinon elle ressort en "Echec". Le comparateur match est bien adapté au traitement de ce type de fichier en permettant de définir un motif de comparaison dans condition@expectedvalue. Le type logfile est fréquemment associé à l'attribut process@copylogto qui permet de créer une copie du fichier de log du traitement FME. Il est ainsi possible de rechercher un motif dans un fichier de ce type.

Type database

Enfin, les sources de données de type database permettent d'exécuter une requête SQL sur le jeu de données pour en extraire l'information souhaitée. C'est le mécanisme le plus puissant pour définir une vérification sur le contenu attributaire ou géométrique d'un jeu de données.

Note

L'emplacement du jeu de données, son format, et la valeur observée sont déterminés par les autres attributs de l'élément <source>.

/scenario/rtestCollection/rtest/checkCollection/check/source@format

  • Attribut requis pour les sources de type datafile

  • Description : Format à utiliser pour lire le jeu de données source identifié par l'attribut source@dataset. La liste des formats supportés peut évoluer avec les versions de scenarioPlayer.

  • Valeur attendue : Nom court du format FME visible dans le menu "Consulter la galerie des formats" de FME Workbench. Tous les formats ne sont pas supportés, consultez la liste des formats utilisables.

/scenario/rtestCollection/rtest/checkCollection/check/source@dataset

  • Attribut requis pour les sources de type datafile

  • Description : Définit l'emplacement du jeu de données. Le chemin peut être absolu ou relatif au scénario de test.

  • Exemple :

<source type="datafile" format="ESRISHAPE" dataset="./result/country.zip" request="featuresCount()" requestparams="country"/>

/scenario/rtestCollection/rtest/checkCollection/check/source@request

  • Attribut requis pour les sources de type datafile et file

  • Description : Définit la fonction appelée pour calculer la valeur observée.

  • Valeur attendue :

    • Pour les jeux de données de type file :

      • filesize()

    • Pour les jeux de données de type datafile :

      • featuresCount()

      • attributeValue()

      • featuresCountByFtAndGeometry()

Le comportement de chaque fonction est décrit dans fonctions et paramètres

  • Exemple :

<source type="file" dataset="result\dbcountry.sqlite" request="fileSize()"/>

/scenario/rtestCollection/rtest/checkCollection/check/source@dbrequest

  • Attribut requis pour les sources de type database

  • Description : Requête SQL à appliquer au jeu de données source et permettant de calculer la valeur observée observedvalue.

  • Valeur attendue : Une chaîne de caractères correspondant à une requête SQL pour le jeu de données source. La requête doit renvoyer une unique valeur sous la forme d'un champ "observedvalue". La casse minuscule doit être respectée pour l'orthographe de "observedvalue" mais pour simplifier l'écriture des requêtes Oracle les champs OBSERVEDVALUE avec ce format sont automatiquement convertis en minuscules.

  • Exemples :

Pour jeu de donnés SPATIALITE

<source type="database" format="SPATIALITE" dataset="result\dbcountry.sqlite" dbrequest="select name as observedvalue from country where OGC_FID=2;"/>

Pour jeu de données POSTGIS

<source type="database" format="POSTGIS" connection="nc_mabase" dbrequest="SELECT ST_Extent(geom) as observedvalue FROM departements.dpt_postgis;"/>
<condition comparator="eq" expectedvalue="BOX(47700 1616600,1197900 2677200)"/>

Pour jeu de données ORACLE_SPATIAL

  <source type="database" format="ORACLE_SPATIAL" connection="nc_dpt_oracle" dbrequest="FME_SQL_DELIMITER ; SELECT CONCAT(NUM_DEP, NOM_DEP) AS observedvalue FROM ADM.DPT WHERE num_dep='66';"/>
  <condition comparator="eq" expectedvalue="66PYRENEES-ORIENTALES"/>

/scenario/rtestCollection/rtest/checkCollection/check/source@requestparams

  • Attribut facultatif, nécessaire avec certaines valeurs de request

  • Description : requestparams doit être utilisé pour affiner la portée de la fonction appelée dans l'attribut request. Par exemple requestparams permettra de définir le nom de l'attribut et l'index de l'enregistrement concerné par la fonction attributeValue().

  • Valeur attendue : Dépend de la valeur de l'attribut check@request. Voir Opérateurs de test et Paramètres

/scenario/rtestCollection/rtest/checkCollection/check/condition

  • Elément requis

  • Description : L'élément <condition> permet de définir la valeur de référence ou "Valeur attendue" qui doit être comparée à la valeur observée définie dans l'élément <source>. Il permet également de définir l'opérateur à utiliser pour comparer les deux valeurs.

/scenario/rtestCollection/rtest/checkCollection/check/condition@comparator

  • Attribut requis

  • Description : Opérateur permettant de comparer la valeur observée et la valeur attendue.

    • eq : égale à

    • noeq : différent de

    • gt : supérieur à

    • lt : inférieur à

    • gtoe : supérieur ou égale à

    • ltoe : inférieur ou égale à

    • match : vérifie l'expression régulière

    • in range : dans l'intervalle de valeur

    • in list : dans la liste de valeur

  • Exemples :

La valeur observée doit être "Switzerland".

<condition comparator="eq" expectedvalue="Switzerland"/>

La valeur observée doit commencer par "Switz"

<condition comparator="match" expectedvalue="^Switz"/>

La valeur observée doit être numérique et comprise entre 5630000 et 5645000.

<condition comparator="in range" expectedvalue="[5630000,5645000]"/>

La valeur observée doit être "Switzerland" ou "Canada".

<condition comparator="in list" expectedvalue="(Switzerland,Canada)"/>

/scenario/rtestCollection/rtest/checkCollection/check/condition@expectedvalue

  • Attribut requis

  • Description : Valeur attendue. Cette valeur dépend de l'opérateur utilisé.

    • in range : expectedvalue doit être sous la forme [min,max]

    • in list : expectedvalue doit être une liste de valeurs sous la forme (valeur1,valeur2,...)

    • match : expectedvalue doit être une expression régulière

    • lt, gt, ltoe, gtoe : expectedvalue doit être une valeur numérique

    • tous les autres opérateurs : chaîne de caractères