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:

  1. 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 mappen testdata. Om du behöver extra data, lägg dem i testdata/custom.

  2. När du har kört algoritmen, gå till Processing ► History och hitta den algoritm som du just har kört.

  3. Högerklicka på algoritmen och klicka på Create Test. Ett nytt fönster öppnas med en textdefinition.

  4. Ö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 eller raster

  • 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 projekt

  • project_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