6. Prueba de algoritmos de procesamiento
6.1. Pruebas de algoritmo
Nota
La versión original de estas instrucciones está disponible en https://github.com/qgis/QGIS/blob/release-3_16/python/plugins/processing/tests/README.md
QGIS proporciona varios algoritmos en el marco de procesamiento. Usted puede ampliar esta lista con algoritmos propios y, como cualquier característica nueva, es necesario agregar pruebas.
Para probar algoritmos, puede agregar entradas en testdata/qgis_algorithm_tests.yaml
or testdata/gdal_algorithm_tests.yaml
as appropriate.
Este archivo tiene la estructura de yaml syntax.
Un texto básico aparece bajo la llave del nivel principal tests
y se ve así:
- name: centroid
algorithm: qgis:polygoncentroids
params:
- type: vector
name: polys.gml
results:
OUTPUT_LAYER:
type: vector
name: expected/polys_centroid.gml
6.1.1. Cómo
Para agregar una nueva prueba, siga estos pasos:
Ejecutar algorithm que se desea comprobar en QGIS desde el processing toolbox. Si el resultado es una capa de linea escoja un GML, con su correspondiente XSD, como salida compatible con tipos de geometría mixta y buena legibilidad. Redirecione la salida a
python/plugins/processing/tests/testdata/expected
. Para las capas de entrada elegidas usar lo que ya hay en la carpetatestdata
. Si se necesitan datos adicionales, se ponen entestdata/custom
.Cuando tenga que ejecutar el algoritmo vaya a
y busque el algoritmo que acaba de ejecutar.Click con el botón derecho en el algoritmo y click en Create Test. Se abrirá una nueva ventana para poner nombre al algoritmo.»
Abra el fichero
python/plugins/processing/tests/testdata/algorithm_tests.yaml
, copie ahí el nombre del algoritmo.
La primera cadena de caracteres del comando va a la tecla algoritmo
, las siguientes a parametros
y la(s) última(s) a resultado(s)
.
Lo anterior se traduce en
- name: densify
algorithm: qgis:densifygeometriesgivenaninterval
params:
- type: vector
name: polys.gml
- 2 # Interval
results:
OUTPUT:
type: vector
name: expected/polys_densify.gml
También es posible crear pruebas para los scripts de Procesamiento. Los scripts deberían situarse en el scripts
en el subdirectorio de los datos de test python/plugins/processing/tests/testdata/
. El nombre del fichero script debería coincidir con el nombre del script del algoritmo.»
6.1.2. Parámetros y resultados
Parámetros tipo trivial
Los parámetros y resultados se especifican como diccionarios y listas:
params:
INTERVAL: 5
INTERPOLATE: True
NAME: A processing test
o
params:
- 2
- string
- another param
Parámetros tipo capa
A menudo se necesitará especificar las capas como parámetros. Para especificar una capa, deberá especificar:
el tipo, p. ej. «vector» o «raster»
un nombre, con un path relativo como
expected/polys_centroid.gml
Así es como se muestra en realidad:
params:
PAR: 2
STR: string
LAYER:
type: vector
name: polys.gml
OTHER: another param
Parámetros tipo archivo
Si necesita un archivo externo para probar de algoritmo, necesita especificar el tipo de “archivo” y el path (relativo) al archivo con su “nombre”
params:
PAR: 2
STR: string
EXTFILE:
type: file
name: custom/grass7/extfile.txt
OTHER: another param
Resultados
Los resultados se especifican de manera muy similar.
Archivos vector básicos
No podría ser más trivial
OUTPUT:
name: expected/qgis_intersection.gml
type: vector
Agregue los archivos GML y XSD esperados en la carpeta.
Vector con tolerancia
A veces, diferentes plataformas crean resultados ligeramente diferentes que aún son aceptables. En este caso (pero solo entonces) se puede también usar propiedades adicionales para definir cómo se compara una capa.
Para trabajar con una cierta tolerancia para los valores de salida, se puede especificar una propiedad de comparación
para una salida. La propiedad de comparación puede contener sub-propiedades para campos
. Esto contiene información sobre con qué precisión se compara un determinado campo (precisión
) o incluso puede ser omitida
. Hay un nombre de campo especial __all__
, el cual aplica una tolerancia a todos los campos. Hay otra propiedad geometría
que también acepta una precisión
que se aplicará a todos los 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
Archivos ráster
Los archivos raster se comparan con una función hash de suma de verificación. Esto se calcula cuando se crea un test desde la historia del procesamiento.
OUTPUT:
type: rasterhash
hash: f1fedeb6782f9389cf43590d4c85ada9155ab61fef6dc285aaeb54d6
Archivos
Se puede comparar el contenido de un archivo de salida con un archivo de referencia de resultados esperados
OUTPUT_HTML_FILE:
name: expected/basic_statistics_string.html
type: file
O puede usar una o más expresiones regulares que serán verificadas <https://docs.python.org/3/library/re.html#re.search>`_ con el archivo «contenido»
OUTPUT:
name: layer_info.html
type: regex
rules:
- 'Extent: \(-1.000000, -3.000000\) - \(11.000000, 5.000000\)'
- 'Geometry: Line String'
- 'Feature Count: 6'
Directorios
Se puede comparar el contenido de un directorio de salida con un resultado esperado del directorio de referencia
OUTPUT_DIR:
name: expected/tiles_xyz/test_1
type: directory
6.1.3. Contexto Algoritmo
Hay algunas definiciones más que pueden modificar el contexto del algoritmo; estas se pueden especificar en el nivel superior de la prueba:
project - cargará un proyecto QGIS específico antes de ejecutar el algoritmo. Si no se especifica, el algoritmo se ejecutará con un proyecto vacío.
project_crs
- sobrescribe el CRS del proyecto predeterminado - p. ej.EPSG:27700
ellipsoid
- sobreescribe el elipsoide proyecto predeterminado usado para mediciones, p. ej.GRS80
6.1.4. Ejecutando pruebas localmente
ctest -V -R ProcessingQgisAlgorithmsTest
o alguno de los siguientes valores enumerados en CMakelists.txt