Важно
Перевод - это работа сообщества : ссылка:Вы можете присоединиться. Эта страница в настоящее время переводится |прогресс перевода|.
7. Алгоритмы обработки Тестирование
7.1. Тесты алгоритмов
Примечание
Оригинальная версия этих инструкций доступна по адресу https://github.com/qgis/QGIS/blob/release-3_40/python/plugins/processing/tests/README.md
QGIS предоставляет несколько алгоритмов в рамках фреймворка Processing. Вы можете расширить этот список собственными алгоритмами, и, как и для любой новой функции, необходимо добавлять тесты.
Для тестирования алгоритмов вы можете добавить записи в testdata/qgis_algorithm_tests.yaml
или testdata/gdal_algorithm_tests.yaml
в зависимости от ситуации.
Этот файл структурирован с помощью синтаксиса yaml.
Базовый тест появляется под ключом верхнего уровня тесты
и выглядит следующим образом:
- 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 алгоритм<processing_algs>, который вы хотите протестировать, из набора инструментов обработки. Если результатом будет векторный слой, предпочтите GML с его XSD в качестве выходных данных из-за его поддержки смешанных типов геометрии и хорошей читаемости. Перенаправьте вывод в
python/plugins/processing/tests/testdata/expected
. Для входных слоев предпочитайте использовать то, что уже есть в папкеtestdata
. Если вам нужны дополнительные данные, поместите их в папкуtestdata/custom
.Когда вы запустили алгоритм, перейдите в
и найдите алгоритм, который вы только что запустили.Щелкните правой кнопкой мыши на алгоритме и нажмите Создать тест. Откроется новое окно с текстовым определением.
Откройте файл
python/plugins/processing/tests/testdata/algorithm_tests.yaml
, скопируйте туда текстовое определение.
Первая строка из команды попадает в ключ алгоритм
, последующие - в параметры
, а последняя (последние) - в результаты
.
Вышеуказанное переводится как
- 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
Параметры типа слоя
Часто требуется указать слои в качестве параметров. Чтобы указать слой, необходимо указать:
тип, т.е.
вектор
илирастр
имя, с относительным путем, например
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.
Вектор с допуском
Иногда разные платформы дают немного отличающиеся результаты, которые, тем не менее, являются приемлемыми. В этом случае (но только в этом случае) вы можете использовать дополнительные свойства, чтобы определить, как сравнивается слой.
Чтобы иметь дело с определенным допуском для выходных значений, вы можете указать свойство compare
для выхода. Свойство compare может содержать подсвойства для полей''. Они содержат информацию о том, насколько точно сравнивается определенное поле (``точность
„), или же поле может быть полностью пропущено“'. Существует специальное имя поля ``__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
Или вы можете использовать одно или несколько регулярных выражений, которые будут сопоставлены с содержимым файла
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. Контекст алгоритма
Есть еще несколько определений, которые могут изменять контекст алгоритма - их можно задать на верхнем уровне теста:
проект
- загружает указанный файл проекта QGIS перед запуском алгоритма. Если не указать, алгоритм будет запущен с пустым проектомproject_crs
- переопределяет CRS проекта по умолчанию - например,EPSG:27700
Эллипсоид
- переопределяет эллипсоид проекта по умолчанию, используемый для измерений, напримерGRS80
7.1.4. Выполнение тестов локально
ctest -V -R ProcessingQgisAlgorithmsTest
или одно из следующих значений, перечисленных в CMakelists.txt