Важно

Перевод - это работа сообщества : ссылка:Вы можете присоединиться. Эта страница в настоящее время переводится |прогресс перевода|.

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. Как

Чтобы добавить новый тест, выполните следующие действия:

  1. Запустите в QGIS алгоритм<processing_algs>, который вы хотите протестировать, из набора инструментов обработки. Если результатом будет векторный слой, предпочтите GML с его XSD в качестве выходных данных из-за его поддержки смешанных типов геометрии и хорошей читаемости. Перенаправьте вывод в python/plugins/processing/tests/testdata/expected. Для входных слоев предпочитайте использовать то, что уже есть в папке testdata. Если вам нужны дополнительные данные, поместите их в папку testdata/custom.

  2. Когда вы запустили алгоритм, перейдите в Обработка ► История и найдите алгоритм, который вы только что запустили.

  3. Щелкните правой кнопкой мыши на алгоритме и нажмите Создать тест. Откроется новое окно с текстовым определением.

  4. Откройте файл 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