Belangrijk
Vertalen is een inspanning van de gemeenschap waaraan u deel kunt nemen <translation_guidelines>. Deze pagina is momenteel voor 100.00% vertaald.
7. Testen van algoritmes voor Processing
7.1. Testen voor algoritmes
Notitie
De originele versie van deze instructies is beschikbaar op https://github.com/qgis/QGIS/blob/release-3_34/python/plugins/processing/tests/README.md
QGIS verschaft verscheidene algoritmes in het framework Processing. U kunt die lijst uitbreiden met uw eigen algoritmes en, net als met elke nieuwe mogelijkheid, is het toevoegen van testen vereist.
U kunt, om algoritmes te testen, items toevoegen aan testdata/qgis_algorithm_tests.yaml of testdata/gdal_algorithm_tests.yaml indien van toepassing.
Dit bestand is gestructureerd met yaml-syntaxis.
Een basistest verschijnt onder de sleutel op het hoogste niveau tests en ziet er uit als dit:
- name: centroid
  algorithm: qgis:polygoncentroids
  params:
    - type: vector
      name: polys.gml
  results:
    OUTPUT_LAYER:
      type: vector
      name: expected/polys_centroid.gml
7.1.1. Hoe te doen
Volg deze stappen om een nieuwe test toe te voegen:
Voer het algoritme dat u wilt testen uit in QGIS vanuit de Toolbox van Processing. Als het resultaat een vectorlaag is, dan bij voorkeur GML, met zijn XSD, als uitvoer voor zijn ondersteuning van gemixte typen geometrie en goede leesbaarheid. Verplaats de uitvoer naar
python/plugins/processing/tests/testdata/expected. Gebruik bij voorkeur voor invoerlagen dat wat al in de maptestdatastaat. Als u extra gegevens nodig hebt, plaats die dan intestdata/custom.Wanneer u het algoritme hebt uitgevoerd, ga naar en zoek naar het algoritme dat u zojuist hebt uitgevoerd.
Klik met rechts op het algoritme en klik op Test maken. Een nieuw venster zal openen met een tekstdefinitie.
Open het bestand
python/plugins/processing/tests/testdata/algorithm_tests.yamlen kopieer de tekstdefinitie naar hier.
De eerste tekenreeks van de opdracht gaat naar de sleutel algorithm, de volgende naar params en de laatste(n) naar results.
Bovenstaande laat zich vertalen als
- name: densify
  algorithm: qgis:densifygeometriesgivenaninterval
  params:
    - type: vector
      name: polys.gml
    - 2 # Interval
  results:
    OUTPUT:
      type: vector
      name: expected/polys_densify.gml
Het is ook mogelijk testen te maken voor scripts van Processing. Scripts zouden moeten worden geplaatst in de submap scripts in de map voor de testdata python/plugins/processing/tests/testdata/. De bestandsnaam van het script zou overeen moeten komen met de naam van het scriptalgoritme.
7.1.2. Parameters en resultaten
Triviale typen parameters
Parameters en resultaten worden gespecificeerd als lijsten of woordenboeken:
params:
  INTERVAL: 5
  INTERPOLATE: True
  NAME: A processing test
of
params:
  - 2
  - string
  - another param
Typen parameters voor lagen
U zult vaak lagen dienen te specificeren als parameters. U dient, om een laag te specificeren, te specificeren:
het type, d.i.
vectorofrastereen naam, met een relatief pad zoals
expected/polys_centroid.gml
Dit is hoe het er in actie uitziet:
params:
  PAR: 2
  STR: string
  LAYER:
    type: vector
    name: polys.gml
  OTHER: another param
Typen parameters voor bestanden
Als u een extern bestand nodig hebt voor de test van het algoritme, dient u het type ‘file’ te specificeren en het (relatieve) pad naar het bestand in zijn ‘naam’:
params:
  PAR: 2
  STR: string
  EXTFILE:
    type: file
    name: custom/grass7/extfile.txt
  OTHER: another param
Resultaten
Resultaten worden op zeer soortgelijke manier gespecificeerd.
Basis vectorbestanden
Het zou niet minder triviaal kunnen zijn
OUTPUT:
 name: expected/qgis_intersection.gml
 type: vector
Voeg de verwachte GML- en XSD-bestanden toe aan de map.
Vector met tolerantie
Soms maken verschillende platforms enigszins verschillende resultaten die nog steeds acceptabel zijn. In dit geval (maar ook alleen dan) mag u ook aanvullende eigenschappen gebruiken om te definiëren hoe een laag is vergeleken.
Voor het afhandelen van een bepaalde tolerantie voor de waarden van de uitvoer kunt u een eigenschap compare specificeren voor een uitvoer. De eigenschap compare mag bepaalde sub-eigenschappen bevatten voor fields. Die bevatten informatie over hoe precies een bepaald veld is vergeleken (precision) of een veld kan zelfs in zijn geheel worden ge``skip``t. Er bestaat een speciale veldnaam __all__ die een bepaalde tolerantie op alle velden zal toepassen. Er is een andere eigenschap geometry die ook een precision accepteert die wordt toegepast op elk punt.
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
Rasterbestanden
Rasterbestanden worden vergeleken met een hash checksum. Die wordt berekent als u een test maakt uit de Geschiedenis van Processing.
OUTPUT:
 type: rasterhash
 hash: f1fedeb6782f9389cf43590d4c85ada9155ab61fef6dc285aaeb54d6
Bestanden
U kunt de inhoud van een uitvoerbestand vergelijken met een verwijzingsbestand voor het verwachte resultaat
OUTPUT_HTML_FILE:
 name: expected/basic_statistics_string.html
 type: file
Of u kunt een of meer reguliere expressies gebruiken die zullen worden vergeleken met de inhoud van het bestand
OUTPUT:
 name: layer_info.html
 type: regex
 rules:
   - 'Extent: \(-1.000000, -3.000000\) - \(11.000000, 5.000000\)'
   - 'Geometry: Line String'
   - 'Feature Count: 6'
Mappen
U kunt de inhoud van een map voor de uitvoer vergelijken met een verwijzingsmap voor het verwachte resultaat
OUTPUT_DIR:
 name: expected/tiles_xyz/test_1
 type: directory
7.1.3. Context voor het algoritme
er zijn nog een aantal definities die de context van het algoritme kunnen aanpassen - deze mogen worden gespecificeerd in het hoogste niveau van de test:
project- zal een gespecificeerd projectbestand van QGIS laden voordat het algoritme wordt uitgevoerd. Indien niet gespecificeerd zal het algoritme worden uitgevoerd met een leeg projectproject_crs- overschrijft het standaard project-CRS - bijv.EPSG:27700ellipsoid- overschrijft de standaard ellipsoïde voor het project die wordt gebruikt voor metingen, bijv.GRS80
7.1.4. Testen lokaal uitvoeren
ctest -V -R ProcessingQgisAlgorithmsTest
of één van de volgende waarden die zijn vermeld in de CMakelists.txt