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. 方法
新しいテストを追加する場合は、以下の手順で行ってください:
プロセッシングツールボックス からQGISでテストしたい アルゴリズム を実行します。結果がベクタレイヤの場合、混合ジオメトリタイプと優れた読みやすさのサポートの出力として、XSDを備えたGMLを優先します。出力を
python/plugins/processing/tests/testdata/expected
にリダイレクトします。入力レイヤには、フォルダtestdata
に既にあるものを優先的に使用します。追加のデータが必要な場合は、それをtestdata/custom
に入れてください。アルゴリズムを実行したら、
で、今実行したアルゴリズムを探します。アルゴリズムを右クリックし、 Create Test をクリックします。新しいウィンドウが開き、テキスト定義が表示されます。
ファイル
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つです