7. 处理算法测试
7.1. 算法测试
备注
这些说明的原始版本可在以下网址获得 https://github.com/qgis/QGIS/blob/master/python/plugins/processing/tests/README.md
QGIS在处理框架下提供了几种算法。您可以使用自己的算法来扩展此列表,并且,像任何新功能一样,添加测试是必需的。
要测试算法,可以将条目添加到 testdata/qgis_algorithm_tests.yaml
或 testdata/gdal_algorithm_tests.yaml
视情况而定。
此文件的结构为 yaml syntax 。
基本测试将显示在顶层键下 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. 如何操作
要添加新测试,请执行以下步骤:
运行 algorithm 您想要在QGIS中从 processing toolbox 。如果结果是一个矢量层,最好使用GML及其XSD作为输出,因为它支持混合的几何类型和良好的可读性。将输出重定向到
python/plugins/processing/tests/testdata/expected
。对于输入图层,首选使用文件夹中已有的内容testdata
。如果您需要额外的数据,请将其放入testdata/custom
。运行完算法后,请转到
并找到您刚刚运行的算法。右键单击该算法,然后单击 Create Test 。将打开一个带有文本定义的新窗口。
打开文件
python/plugins/processing/tests/testdata/algorithm_tests.yaml
,将文本定义复制到那里。
命令中的第一个字符串转到键 algorithm
,后续的 params
最后一位(S) results
。
以上内容可翻译为
- name: densify
algorithm: qgis:densifygeometriesgivenaninterval
params:
- type: vector
name: polys.gml
- 2 # Interval
results:
OUTPUT:
type: vector
name: expected/polys_densify.gml
还可以创建用于处理脚本的测试。脚本应放在 scripts
测试数据目录中的子目录 python/plugins/processing/tests/testdata/
。脚本文件名应与脚本算法名称匹配。
7.1.2. 参数和结果
平凡的类型参数
参数和结果以列表或词典的形式指定:
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
文件类型参数
如果您需要用于算法测试的外部文件,您需要在文件的‘name’中指定文件的‘file’类型和(相对)路径:
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文件。
带公差的矢量
有时,不同的平台产生的结果略有不同,这仍然是可以接受的。在这种情况下(但只有在这种情况下),您还可以使用其他属性来定义如何比较层。
要处理输出值的某个容差,可以指定 compare
属性来获取输出。比较属性可以包含的子属性 fields
。它包含有关比较某个字段的精确度的信息 (precision
)或一个字段甚至可以完全 skip
艾德有一个特殊的字段名称 __all__
这将对所有领域应用一定的容差。还有一处房产 geometry
它还接受一个 precision
它被应用于每个顶点。
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
或者,您可以使用一个或多个正则表达式 matched 对照文件内容
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
- overrides the default project CRS - e.g.EPSG:27700
ellipsoid
- overrides the default project ellipsoid used for measurements, e.g.GRS80
7.1.4. 在本地运行测试
ctest -V -R ProcessingQgisAlgorithmsTest
中列出的下列值之一。 CMakelists.txt