7. プロセシングアルゴリズムをテストする

7.1. アルゴリズムのテスト

注釈

この説明のオリジナル版は https://github.com/qgis/QGIS/blob/release-3_28/python/plugins/processing/tests/README.md から入手できます

QGISでは、プロセッシングフレームワークの下にいくつかのアルゴリズムを提供しています。このリストは独自のアルゴリズムで拡張できます。そして新しい機能と同様、テストを追加することが必要です。

アルゴリズムをテストするには、 testdata/qgis_algorithm_tests.yaml または testdata/gdal_algorithm_tests.yaml に適切なエントリーを追加することができます。

このファイルは yaml 文法 で構成されています。

基本的なテストは、トップレベルのキー tests の下に表示され、次のようになります:

- name: centroid
  algorithm: qgis:polygoncentroids
  params:
    - type: vector
      name: polys.gml
  results:
    OUTPUT_LAYER:
      type: vector
      name: expected/polys_centroid.gml

7.1.1. 方法

新しいテストを追加する場合は、以下の手順で行ってください:

  1. プロセッシングツールボックス からQGISでテストしたい アルゴリズム を実行します。結果がベクタレイヤの場合、混合ジオメトリタイプと優れた読みやすさのサポートの出力として、XSDを備えたGMLを優先します。出力を python/plugins/processing/tests/testdata/expected にリダイレクトします。入力レイヤには、フォルダ testdata に既にあるものを優先的に使用します。追加のデータが必要な場合は、それを testdata/custom に入れてください。

  2. アルゴリズムを実行したら、 プロセシング ► 履歴 で、今実行したアルゴリズムを探します。

  3. アルゴリズムを右クリックし、 Create Test をクリックします。新しいウィンドウが開き、テキスト定義が表示されます。

  4. ファイル python/plugins/processing/tests/testdata/algorithm_tests.yaml を開き、そこのテキスト定義をコピーします。

コマンドの最初の文字列は algorithm というキーに、その後の文字列は params に、最後の文字列は results に送られます。

上記は次に解釈されます

- name: densify
  algorithm: qgis:densifygeometriesgivenaninterval
  params:
    - type: vector
      name: polys.gml
    - 2 # Interval
  results:
    OUTPUT:
      type: vector
      name: expected/polys_densify.gml

処理スクリプトのテストを作成することもできます。スクリプトは、テストデータのディレクトリ python/plugins/processing/tests/testdata/scripts サブディレクトリに配置する必要があります。スクリプトファイル名は、スクリプトアルゴリズム名と一致する必要があります。

7.1.2. パラメータと結果

Trivial型のパラメータ

パラメータと結果はリストまたは辞書として指定されます:

params:
  INTERVAL: 5
  INTERPOLATE: True
  NAME: A processing test

または

params:
  - 2
  - string
  - another param

レイヤ型のパラメータ

多くの場合、レイヤをパラメータとして指定する必要があるでしょう。レイヤを指定するには、次を指定する必要があります:

  • 種類、すなわち vector または raster

  • 名前。 expected/polys_centroid.gml のような相対パスで指定されます

実際に使ってみると、こんな感じです:

params:
  PAR: 2
  STR: string
  LAYER:
    type: vector
    name: polys.gml
  OTHER: another param

ファイル型のパラメータ

アルゴリズムのテストに外部ファイルが必要な場合は、「ファイル」タイプと「名前」でファイルへの(相対)パスを指定する必要があります。

params:
  PAR: 2
  STR: string
  EXTFILE:
    type: file
    name: custom/grass7/extfile.txt
  OTHER: another param

結果

結果は同じように指定されます。

基本的なベクタファイル

これはとても簡単です

OUTPUT:
 name: expected/qgis_intersection.gml
 type: vector

フォルダ内に想定されるGMLファイルやXSDファイルを追加します。

許容範囲内のベクタ

プラットフォームによって、わずかに異なる結果が作成される場合がありますが、それでも依然として許容範囲です。この場合(ただしその場合のみ)、追加のプロパティを使用して、レイヤの比較方法を定義することもできます。

出力値の特定の許容範囲を処理するために、出力に 比較 プロパティを指定できます。この比較プロパティには、「フィールド」のサブプロパティを含めることができます。これには、特定のフィールドがどの程度正確に比較されるか(「精度」)、またはフィールドを完全に「スキップ」することもできます。すべてのフィールドに特定の許容値を適用する特別なフィールド名 __all__ があります。別に、各頂点に適用される「精度」も受け入れるプロパティ「ジオメトリ」があります。

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
ラスタファイル

ラスタファイルはハッシュチェックサムと比較されます。これは、プロセッシングの履歴からテストを作成するときに計算されます。

OUTPUT:
 type: rasterhash
 hash: f1fedeb6782f9389cf43590d4c85ada9155ab61fef6dc285aaeb54d6
ファイル

出力ファイルの内容を予想される結果参照ファイルと比較できます

OUTPUT_HTML_FILE:
 name: expected/basic_statistics_string.html
 type: file

または、ファイルの内容に対して マッチする 1つ以上の正規表現を使用することができます。

OUTPUT:
 name: layer_info.html
 type: regex
 rules:
   - 'Extent: \(-1.000000, -3.000000\) - \(11.000000, 5.000000\)'
   - 'Geometry: Line String'
   - 'Feature Count: 6'
ディレクトリ

出力ディレクトリの内容を、期待される結果の参照ディレクトリと比較することができます

OUTPUT_DIR:
 name: expected/tiles_xyz/test_1
 type: directory

7.1.3. アルゴリズムのコンテキスト

アルゴリズムのコンテキストを変更できる定義がいくつかあります。これらはテストの最上位で指定できます:

  • project - アルゴリズムを実行する前に、指定されたQGISプロジェクトファイルを読み込みます。指定しない場合、アルゴリズムは空のプロジェクトで実行されます。

  • project_crs - デフォルトのプロジェクトCRSを上書きします - 例: EPSG:27700

  • elipsoid - 測定に使用するプロジェクトのデフォルトの楕円体を上書きします。例 GRS80

7.1.4. テストをローカルで実行する

ctest -V -R ProcessingQgisAlgorithmsTest

または CMakelists.txt に記載されている以下の値のいずれか1つです