Viktigt
Översättning är en gemenskapsinsats du kan gå med i. Den här sidan är för närvarande översatt till 100.00%.
7. Bearbetning Algoritmer Testning
7.1. Test av algoritmer
Observera
Originalversionen av dessa instruktioner finns på https://github.com/qgis/QGIS/blob/release-3_40/python/plugins/processing/tests/README.md
QGIS tillhandahåller flera algoritmer under Processing-ramverket. Du kan utöka denna lista med egna algoritmer och som med alla nya funktioner krävs det att du lägger till tester.
För att testa algoritmer kan du lägga till poster i testdata/qgis_algorithm_tests.yaml
eller testdata/gdal_algorithm_tests.yaml
efter behov.
Den här filen är strukturerad med yaml syntax.
Ett grundläggande test visas under toppnivånyckeln tests
och ser ut så här:
- name: centroid
algorithm: qgis:polygoncentroids
params:
- type: vector
name: polys.gml
results:
OUTPUT_LAYER:
type: vector
name: expected/polys_centroid.gml
7.1.1. Så gör du
Följ dessa steg för att lägga till ett nytt test:
Kör den algoritm som du vill testa i QGIS från processing toolbox. Om resultatet är ett vektorskikt, föredra GML, med dess XSD, som utdata för dess stöd för blandade geometrityper och goda läsbarhet. Omdirigera utdata till
python/plugins/processing/tests/testdata/expected
. För inmatningslager föredrar vi att använda det som redan finns i mappentestdata
. Om du behöver extra data, lägg dem itestdata/custom
.När du har kört algoritmen, gå till
och hitta den algoritm som du just har kört.Högerklicka på algoritmen och klicka på Create Test. Ett nytt fönster öppnas med en textdefinition.
Öppna filen
python/plugins/processing/tests/testdata/algorithm_tests.yaml
, kopiera textdefinitionen dit.
Den första strängen från kommandot går till nyckeln algoritm
, de följande till params
och den sista till results
.
Ovanstående översätts till
- name: densify
algorithm: qgis:densifygeometriesgivenaninterval
params:
- type: vector
name: polys.gml
- 2 # Interval
results:
OUTPUT:
type: vector
name: expected/polys_densify.gml
Det är också möjligt att skapa tester för Processing-skript. Skripten ska placeras i underkatalogen scripts
i testdatakatalogen python/plugins/processing/tests/testdata/
. Skriptfilens namn ska överensstämma med skriptalgoritmens namn.
7.1.2. Parametrar och resultat
Triviala typparametrar
Parametrar och resultat anges som listor eller lexikon:
params:
INTERVAL: 5
INTERPOLATE: True
NAME: A processing test
eller
params:
- 2
- string
- another param
Parametrar för lagertyp
Du kommer ofta att behöva ange lager som parametrar. För att ange ett lager måste du ange:
typen, dvs
vektor
ellerraster
ett namn, med en relativ sökväg som
expected/polys_centroid.gml
Så här ser det ut i praktiken:
params:
PAR: 2
STR: string
LAYER:
type: vector
name: polys.gml
OTHER: another param
Parametrar för filtyp
Om du behöver en extern fil för algoritmtestet måste du ange filtypen ”file” och den (relativa) sökvägen till filen i ”name”:
params:
PAR: 2
STR: string
EXTFILE:
type: file
name: custom/grass7/extfile.txt
OTHER: another param
Resultat
Resultaten specificeras på ett mycket likartat sätt.
Grundläggande vektorfiler
Det kunde inte vara mer trivialt
OUTPUT:
name: expected/qgis_intersection.gml
type: vector
Lägg till de förväntade GML- och XSD-filerna i mappen.
Vektor med tolerans
Ibland ger olika plattformar lite olika resultat som ändå är godtagbara. I så fall (men bara då) kan du också använda ytterligare egenskaper för att definiera hur ett lager jämförs.
För att hantera en viss tolerans för utdatavärden kan du ange en jämförelse
-egenskap för en utdata. Egenskapen compare kan innehålla underegenskaper för fields
. Detta innehåller information om hur exakt ett visst fält jämförs (precision
) eller ett fält kan till och med helt och hållet hoppas över
. Det finns ett speciellt fältnamn __all__
som tillämpar en viss tolerans på alla fält. Det finns en annan egenskap geometry
som också accepterar en precision
som tillämpas på varje vertex.
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
Rasterfiler
Rasterfiler jämförs med en hashkontrollsumma. Detta beräknas när du skapar ett test från bearbetningshistoriken.
OUTPUT:
type: rasterhash
hash: f1fedeb6782f9389cf43590d4c85ada9155ab61fef6dc285aaeb54d6
Filer
Du kan jämföra innehållet i en utdatafil med en referensfil med förväntat resultat
OUTPUT_HTML_FILE:
name: expected/basic_statistics_string.html
type: file
Eller så kan du använda ett eller flera reguljära uttryck som kommer att ”matchas” <https://docs.python.org/3/library/re.html#re.search>`_ mot filinnehållet
OUTPUT:
name: layer_info.html
type: regex
rules:
- 'Extent: \(-1.000000, -3.000000\) - \(11.000000, 5.000000\)'
- 'Geometry: Line String'
- 'Feature Count: 6'
Kataloger
Du kan jämföra innehållet i en utdatakatalog med en referenskatalog med förväntat resultat
OUTPUT_DIR:
name: expected/tiles_xyz/test_1
type: directory
7.1.3. Algoritmkontext
Det finns ytterligare några definitioner som kan ändra algoritmens sammanhang - dessa kan specificeras på testets toppnivå:
project
- laddar en angiven QGIS-projektfil innan algoritmen körs. Om inget anges kommer algoritmen att köras med ett tomt projektproject_crs
- åsidosätter standardprojektets CRS - t.ex.EPSG:27700
ellipsoid
- åsidosätter standardprojektets ellipsoid som används för mätningar, t.ex.GRS80
7.1.4. Kör tester lokalt
ctest -V -R ProcessingQgisAlgorithmsTest
eller ett av följande värden som anges i CMakelists.txt