7. Test degli Algoritmi di Processing
7.1. Test degli algoritmi
Nota
La versione originale di queste istruzioni é disponibile presso https://github.com/qgis/QGIS/blob/release-3_28/python/plugins/processing/tests/README.md
QGIS fornisce numerosi algoritmi nel Processing framework. È possibile estendere questo elenco con algoritmi propri e, come ogni nuova funzionalità, è richiesta l’aggiunta di test.
Per testare gli algoritmi è possibile aggiungere voci in testdata/qgis_algorithm_tests.yaml
oppure :file:testdata/gdal_algorithm_tests.yaml` come piú opportuno.
Questo file è realizzato con la sintassi yaml.
Un test di base appare sotto la voce chiave primaria tests
e si presenta come segue:
- name: centroid
algorithm: qgis:polygoncentroids
params:
- type: vector
name: polys.gml
results:
OUTPUT_LAYER:
type: vector
name: expected/polys_centroid.gml
7.1.1. Come fare
Per aggiungere un nuovo test, segui questi passi:
Esegui il algoritmo che vuoi testare in QGIS dal processing toolbox. Se il risultato è un layer vettoriale preferisci GML, con il suo XSD, come output per il suo supporto di tipi di geometria misti e buona leggibilità. Reindirizza l’output a
python/plugins/processing/tests/testdata/expected
. Per i layer di input preferisci usare ciò che è già presente nella cartellatestdata
. Se hai bisogno di dati extra, mettili intestdata/custom
.Quando hai eseguito l’algoritmo, vai a
e trova l’algoritmo che hai appena eseguito.Clicca con il tasto destro sull’algoritmo e clicca su Create Test. Si aprirà una nuova finestra con una definizione testuale.
Apri il file
python/plugins/processing/test/testdata/algorithm_tests.yaml
, copia lì la definizione del testo.
La prima stringa del comando va alla chiave algoritmo
, le successive a params
e le ultime a results
.
Quanto sopra si traduce in
- name: densify
algorithm: qgis:densifygeometriesgivenaninterval
params:
- type: vector
name: polys.gml
- 2 # Interval
results:
OUTPUT:
type: vector
name: expected/polys_densify.gml
È anche possibile creare dei test per gli script di Processing. Gli script dovrebbero essere collocati nella sottocartella scripts
all’interno della cartella dei dati di test :file:python/plugins/processing/tests/testdata/`. Il nome del file di script deve corrispondere al nome dell’algoritmo di script.
7.1.2. Parametri e risultati
Parametri di tipo semplice
I parametri e i risultati sono specificati come liste o cartelle:
params:
INTERVAL: 5
INTERPOLATE: True
NAME: A processing test
o
params:
- 2
- string
- another param
Parametri tipo layer
Avrai spesso bisogno di specificare i layer nei parametri. Per specificare un layer dovrai specificare:
il tipo, ad esempio vettore` o
raster
un nome, con un percorso relativo come
expected/polys_centroid.gml
.
Ecco come appare in pratica:
params:
PAR: 2
STR: string
LAYER:
type: vector
name: polys.gml
OTHER: another param
Parametri per il tipo di file
Se hai bisogno di un file esterno per il test dell’algoritmo, devi specificare il tipo di “file” e il percorso (relativo) del file col suo “nome”:
params:
PAR: 2
STR: string
EXTFILE:
type: file
name: custom/grass7/extfile.txt
OTHER: another param
Risultati
I risultati vanno specificati in modo molto simile.
Base per file vettoriali
Non potrebbe essere più banale
OUTPUT:
name: expected/qgis_intersection.gml
type: vector
Aggiunge i file GML e XSD previsti nella cartella.
Vettore con tolleranza
A volte piattaforme diverse creano risultati leggermente diversi che sono ancora accettabili. In questo caso (ma solo in questo caso) puoi anche usare proprietà aggiuntive per definire come un layer viene valutato.
Per gestire con una determinata tolleranza i valori dell’output puoi specificare una proprietà compare
per un output. La proprietà compare può contenere sotto-proprietà per i campi
. Questo contiene informazioni su quanto precisamente un certo campo è confrontato (precision
) o un campo può anche essere completamente skip
. C’è un nome di campo speciale __all__
che applicherà una certa tolleranza a tutti i campi. C’è un’altra proprietà geometry
che accetta anche una precision
che viene applicata ad ogni vertice.
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
File raster
I file raster vengono testati con un checksum hash. Questo viene calcolato quando si crea un test dal processing history.
OUTPUT:
type: rasterhash
hash: f1fedeb6782f9389cf43590d4c85ada9155ab61fef6dc285aaeb54d6
File
Puoi confrontare il contenuto di un file di output con un file di riferimento dei risultati attesi
OUTPUT_HTML_FILE:
name: expected/basic_statistics_string.html
type: file
Oppure puoi usare una o più espressioni regolari che saranno abbinate https://docs.python.org/3/library/re.html#re.search al contenuto del file
OUTPUT:
name: layer_info.html
type: regex
rules:
- 'Extent: \(-1.000000, -3.000000\) - \(11.000000, 5.000000\)'
- 'Geometry: Line String'
- 'Feature Count: 6'
Cartelle
Puoi confrontare il contenuto di una cartella di output con una cartella di riferimento dei risultati attesi
OUTPUT_DIR:
name: expected/tiles_xyz/test_1
type: directory
7.1.3. Contesto dell’algoritmo
Ci sono alcune altre definizioni che possono modificare il contesto dell’algoritmo - queste possono essere specificate al livello superiore del test:
project
- caricherà un file di progetto QGIS specificato prima di eseguire l’algoritmo. Se non specificato, l’algoritmo verrà eseguito in un progetto vuotoproject_crs
- sovrascrive il SR di default del progetto - ad esempioEPSG:27700
.ellipsoid
- sovrascrive l’ellissoide di default del progetto usato per le misure, ad esempioGRS80
.
7.1.4. Esecuzione dei test in locale
ctest -V -R ProcessingQgisAlgorithmsTest
o uno dei seguenti valori elencati nel file CMakelists.txt