Viktigt

Översättning är en gemenskapsinsats du kan gå med i. Den här sidan är för närvarande översatt till 98.00%.

7. Testning av bearbetningsalgoritmer

7.1. Test av algoritmer

Observera

Originalversionen av dessa instruktioner finns på https://github.com/qgis/QGIS/blob/release-3_44/python/tillägg/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 vektorlager, 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/tillägg/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/tillägg/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/tillägg/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.

To deal with a certain tolerance for output values you can specify a compare property for an output. The compare property can contain sub-properties for fields. This contains information about how precisely a certain field is compared (precision) or a field can even entirely be ignored (skip). There is a special field name __all__ which will apply a certain tolerance to all fields. There is another property geometry which also accepts a precision which is applied to each 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