6. Teste de Processamento de Algoritmos¶
6.1. Teste de algoritmos¶
Nota
A versão original destas instruções está disponível em https://github.com/qgis/QGIS/blob/release-3_10/python/plugins/processing/tests/README.md
QGIS fornece vários algoritmos sob a estrutura de processamento. Você pode estender esta lista com seus próprios algoritmos e, como qualquer novo recurso, é necessário adicionar testes.
Para testar algoritmos, você pode adicionar entradas em testdata/qgis_algorithm_tests.yaml
ou testdata/gdal_algorithm_tests.yaml
como apropriado.
Este arquivo está estruturado com sintaxe yaml.
Um teste básico aparece sob a chave de nível superior “tests” e tem a seguinte aparência:
- name: centroid
algorithm: qgis:polygoncentroids
params:
- type: vector
name: polys.gml
results:
OUTPUT_LAYER:
type: vector
name: expected/polys_centroid.gml
6.1.1. Como¶
Para adicionar um novo teste siga estas etapas:
Execute algorithm se você deseja testar no QGIS a partir do processing toolbox. Se o resultado for uma camada vetorial prefira o GML, com seu XSD, como saída pelo suporte de tipos de geometria mista e boa legibilidade. Redirecione a saída para
python/plugins/processing/tests/testdata/expected
. Para as camadas de entrada prefira usar o que já existe na pastatestdata
. Se você precisar de dados extras, coloque-o emtestdata/custom
.Quando você executar o algoritmo, vá para
e encontre o algoritmo que você acabou de executar.Clique com o botão direito do mouse no algoritmo e clique em Criar Teste. Uma nova janela será aberta com uma definição de texto.
Abra o arquivo
python/plugins/processing/tests/testdata/algoritm_tests.yaml
, copie a definição de texto lá.
A primeira string do comando vai para a chave algoritmo
, as subsequentes para params
e a última(s) para resultados
.
O acima se traduz em
- name: densify
algorithm: qgis:densifygeometriesgivenaninterval
params:
- type: vector
name: polys.gml
- 2 # Interval
results:
OUTPUT:
type: vector
name: expected/polys_densify.gml
Também é possível criar testes para scripts de processamento. Os scripts devem ser colocados no subdiretório scripts
no diretório de dados de teste python/plugins/processing/tests/testdata/
. O nome do arquivo de script deve corresponder ao nome do algoritmo de script.
6.1.2. Parâmetros e resultados¶
6.1.2.1. Tipos de parâmetros triviais¶
Parâmetros e resultados são especificados como listas ou dicionários:
params:
INTERVAL: 5
INTERPOLATE: True
NAME: A processing test
ou
params:
- 2
- string
- another param
6.1.2.2. Parâmetros do tipo camada¶
Você muitas vezes precisará especificar camadas como parâmetros. Para especificar uma camada, você precisará especificar:
o tipo, ou seja,
vetor
ouraster
um nome, com um caminho relativo como
expected/polys_centroid.gml
É assim que parece em ação:
params:
PAR: 2
STR: string
LAYER:
type: vector
name: polys.gml
OTHER: another param
6.1.2.3. Parâmetros do tipo de arquivo¶
Se você precisar de um arquivo externo para o teste do algoritmo, precisará especificar o tipo ‘arquivo’ e o caminho (relativo) para o arquivo em seu ‘nome’:
params:
PAR: 2
STR: string
EXTFILE:
type: file
name: custom/grass7/extfile.txt
OTHER: another param
6.1.2.4. Resultados¶
Os resultados são especificados de maneira muito semelhante.
6.1.2.4.1. Arquivos vetoriais básicos¶
Não poderia ser mais trivial
OUTPUT:
name: expected/qgis_intersection.gml
type: vector
Adicione os arquivos GML e XSD esperados na pasta.
6.1.2.4.2. Vetor com tolerância¶
Às vezes, plataformas diferentes criam resultados ligeiramente diferentes que ainda são aceitáveis. Nesse caso (mas somente então), você também pode usar propriedades adicionais para definir como uma camada é comparada.
Para lidar com uma certa tolerância para os valores de saída, você pode especificar uma propriedade compare
para uma saída. A propriedade compare pode conter subpropriedades para campos
. Isso contém informações sobre a precisão de comparação de um determinado campo (precisão
) ou um campo pode ser inteiramente ignorado
. Existe um nome de campo especial __todos__
que aplicará uma certa tolerância a todos os campos. Existe outra propriedade geometria
que também aceita uma precisão
que é aplicada a cada vértice.
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
6.1.2.4.3. Arquivos raster¶
Arquivos raster são comparados com uma soma de verificação de hash. Isso é calculado quando você cria um teste a partir do histórico de processamento.
OUTPUT:
type: rasterhash
hash: f1fedeb6782f9389cf43590d4c85ada9155ab61fef6dc285aaeb54d6
6.1.2.4.4. Arquivos¶
Você pode comparar o conteúdo de um arquivo de saída com um arquivo de referência de resultado esperado
OUTPUT_HTML_FILE:
name: expected/basic_statistics_string.html
type: file
Ou você pode usar uma ou mais expressões regulares que serão matched com o conteúdo do arquivo
OUTPUT:
name: layer_info.html
type: regex
rules:
- 'Extent: \(-1.000000, -3.000000\) - \(11.000000, 5.000000\)'
- 'Geometry: Line String'
- 'Feature Count: 6'
6.1.2.4.5. Diretórios¶
Você pode comparar o conteúdo de um diretório de saída com um diretório de referência de resultado esperado
OUTPUT_DIR:
name: expected/tiles_xyz/test_1
type: directory
6.1.3. Contexto do algoritmo¶
Existem mais algumas definições que podem modificar o contexto do algoritmo - estas podem ser especificadas no nível superior do teste:
projeto
- carregará um arquivo de projeto QGIS especificado antes de executar o algoritmo. Se não especificado, o algoritmo será executado com um projeto vazioproject_crs
- substitui o SRC do projeto padrão - e.g.EPSG:27700
elipsóide
- substitui o elipsóide padrão do projeto usado para medições, e.g.GRS80
6.1.4. Executar testes localmente¶
ctest -V -R ProcessingQgisAlgorithmsTest
ou um dos seguintes valores listados em CMakelists.txt