7. Test de l’algorithme de traitement :
7.1. Tests d’algorithmes
Note
La version originale de ces instructions est disponible à https://github.com/qgis/QGIS/blob/release-3_22/python/plugins/processing/tests/README.md
QGIS fournit un certain nombre d’algorithmes dans le framework Processing. Vous pouvez y ajouter les votre mais, comme toute nouvelles fonctionnalités, vous devez les tester.
Pour tester vos algorithmes, vous pouvez les ajouter, le cas échéant, a testdata/qgis_algorithm_tests.yaml
ou testdata/gdal_algorithm_tests.yaml
Ce fichier est structuré selon la syntaxe yaml.
Un test simple doit figurer sous la clé principale tests
et doit ressembler à ceci :
- name: centroid
algorithm: qgis:polygoncentroids
params:
- type: vector
name: polys.gml
results:
OUTPUT_LAYER:
type: vector
name: expected/polys_centroid.gml
7.1.1. Procédure
Veuillez suivre les étapes suivantes afin d’ajouter un nouveau test:
Exécutez le algorithme que vous voulez tester dans QGIS à partir du processing toolbox. Si le résultat est une couche vecteur, préférez GML, avec son XSD, comme sortie pour son support des types de géométrie mixte et sa bonne lisibilité. Redirigez la sortie vers
python/plugins/processing/tests/testdata/expected
. Pour les couches d’entrée, préférez utiliser ce qui se trouve déjà dans le dossiertestdata
. Si vous avez besoin de données supplémentaires, mettez-les dans le dossiertestdata/custom
.Lorsque vous lancé un algorithme, ouvrez le
et recherchez celui que vous avez lancer en dernier.Faites un click-droit sur l’algorithme et cliquer sur Create Test. Une nouvelle fenêtre s’ouvre avec une text definition.
Ouvrez le fichier
python/plugins/processing/tests/testdata/algorithm_tests.yaml
et copiez-y la text definition.
La première chaine correspond à la clé algorithme
, les suivantes aux paramètres
et la⸱les dernière⸱s aux résultats
.
Ce qui précède se traduit par
- name: densify
algorithm: qgis:densifygeometriesgivenaninterval
params:
- type: vector
name: polys.gml
- 2 # Interval
results:
OUTPUT:
type: vector
name: expected/polys_densify.gml
Il est possible aussi de créer des tests pour les scripts de traitement. Les scripts doivent être placés dans le :file’scripts” sous-répertoire dans le répertoire testdata python/plugins/processing/tests/testdata/
. Le nom du fichier du script doit correspondant au nom du script de l’algorythme.
7.1.2. Paramètres et résultats
Paramètres de type trivial
Les paramètres et résultats sont spécifiés comme listes ou dictionnaires :
params:
INTERVAL: 5
INTERPOLATE: True
NAME: A processing test
ou
params:
- 2
- string
- another param
Types de paramètres de la couche
Vous devrez souvent spécifier les couches en tant que paramètres. Pour spécifier une couche, vous devrez spécifier:
Le type, par exemple « vecteur » ou « raster »
un nom, avec un chemin relatif tel que
expected/polys_centroid.gml
Vous devriez obtenir quelque chose comme ça :
params:
PAR: 2
STR: string
LAYER:
type: vector
name: polys.gml
OTHER: another param
Types de paramètres du fichier
Si vous avez besoin d’un fichier externe pour le test d’algorithme, vous devez spécifier le type de « fichier » et le chemin (relatif) vers le fichier dans son « nom » :
params:
PAR: 2
STR: string
EXTFILE:
type: file
name: custom/grass7/extfile.txt
OTHER: another param
Résultats
Les résultats sont spécifiés de manière très similaire.
Fichiers vecteurs simples
Ce ne pourrait être plus trivial!
OUTPUT:
name: expected/qgis_intersection.gml
type: vector
Ajoutez les fichiers GML et XSD attendus dans le dossier.
Vecteur avec tolérance
Parfois, des plateformes différentes donnent des résultats légèrement différents qui restent acceptables. Dans ce cas (mais seulement dans ce cas), vous pouvez également utiliser des propriétés supplémentaires pour définir la façon dont une couche est comparée.
Pour traiter une certaine tolérance pour les valeurs de sortie, vous pouvez spécifier une propriété compare
pour une sortie. La propriété de comparaison peut contenir des sous-propriétés pour les champs
. Celle-ci contient des informations sur la précision avec laquelle un certain champ est comparé (precision
) ou un champ peut même être entièrement évité
. Il existe un nom de champ spécial __all__`` qui applique une certaine tolérance à tous les champs. Il y a une autre propriété geometry
qui accepte également une precision
qui est appliquée à chaque sommet.
OUTPUT:
type: vector
name: expected/abcd.gml
compare:
fields:
__all__:
precision: 5 # compare to a precision of .00001 on all fields
A: skip # skip field A
geometry:
precision: 5 # compare coordinates with a precision of 5 digits
Fichiers raster
Les fichiers raster sont comparés à une somme de contrôle de hachage. Celui-ci est calculé lorsque vous créez un test à partir de l’historique du traitement.
OUTPUT:
type: rasterhash
hash: f1fedeb6782f9389cf43590d4c85ada9155ab61fef6dc285aaeb54d6
Fichiers
Vous pouvez comparer le contenu d’un fichier de sortie à un fichier de référence des résultats attendus
OUTPUT_HTML_FILE:
name: expected/basic_statistics_string.html
type: file
Vous pouvez également utiliser une ou plusieurs expressions régulières qui seront appariées avec le contenu du fichier.
OUTPUT:
name: layer_info.html
type: regex
rules:
- 'Extent: \(-1.000000, -3.000000\) - \(11.000000, 5.000000\)'
- 'Geometry: Line String'
- 'Feature Count: 6'
Répertoires
Vous pouvez comparer le contenu d’un répertoire de sortie avec un répertoire de référence des résultats attendus
OUTPUT_DIR:
name: expected/tiles_xyz/test_1
type: directory
7.1.3. Contexte de l’algorithme
Il existe quelques autres définitions qui peuvent modifier le contexte de l’algorithme - elles peuvent être spécifiées au niveau supérieur du test :
project
- chargera un projet QGIS spécifique avant de lancer l’algorithme. Si non précisé, l’algorithme sera lancé avec un projet vide.project_crs
- remplace le système de projection par défaut du projet. (par exempleEPSG:27700
)ellipsoid
- remplace la projection par défaut utilisée pour les mesure. (par exempleGRS80
)
7.1.4. Exécuter localement des tests
ctest -V -R ProcessingQgisAlgorithmsTest
ou l’une des valeurs suivantes figurant dans le fichier CMakelists.txt