6. Test de l’algorithme de traitement :

6.1. Tests d’algorithmes

Note

La version originale de ces instructions est disponible à https://github.com/qgis/QGIS/blob/release-3_16/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

6.1.1. Procédure

Veuillez suivre les étapes suivantes afin d’ajouter un nouveau test:

  1. 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 dossier testdata. Si vous avez besoin de données supplémentaires, mettez-les dans le dossier testdata/custom.

  2. Lorsque vous lancé un algorithme, ouvrez le Processing ► History et recherchez celui que vous avez lancer en dernier.

  3. Faites un click-droit sur l’algorithme et cliquer sur Create Test. Une nouvelle fenêtre s’ouvre avec une text definition.

  4. 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.

6.1.2. Paramètres et résultats

6.1.2.1. 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

6.1.2.2. 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

6.1.2.3. 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

6.1.2.4. Résultats

Les résultats sont spécifiés de manière très similaire.

6.1.2.4.1. 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.

6.1.2.4.2. 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
6.1.2.4.3. 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
6.1.2.4.4. 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'
6.1.2.4.5. 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

6.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 exemple EPSG:27700)

  • ellipsoid - remplace la projection par défaut utilisée pour les mesure. (par exemple GRS80)

6.1.4. Exécuter localement des tests

ctest -V -R ProcessingQgisAlgorithmsTest

ou l’une des valeurs suivantes figurant dans le fichier CMakelists.txt