중요

번역은 여러분이 참여할 수 있는 커뮤니티 활동입니다. 이 페이지는 현재 100.00% 번역되었습니다.

7. 공간 처리 알고리즘 테스트 작업

7.1. 알고리즘 테스트

참고

https://github.com/qgis/QGIS/blob/release-3_34/python/plugins/processing/tests/README.md 에서 이 지침의 원본을 찾아볼 수 있습니다.

QGIS는 공간 처리 프레임워크 아래 몇 개의 알고리즘을 제공합니다. 여러분 자신의 알고리즘으로 이 목록을 확장시킬 수 있는데, 다른 모든 새 기능들처럼, 반드시 테스트도 추가해야 합니다.

알고리즘을 테스트하려면 testdata/qgis_algorithm_tests.yaml 또는 testdata/gdal_algorithm_tests.yaml 파일에 항목들을 알맞게 추가하면 됩니다.

이 파일은 YAML 문법 으로 구성되었습니다.

기본 테스트는 최상위 키 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. 요령

새 테스트를 추가하려면 다음 단계들을 따르십시오:

  1. 공간 처리 툴박스 에서 여러분이 QGIS에서 테스트하고 싶은 알고리즘 을 실행하십시오. 결과물이 벡터 레이어인 경우 XSD 스키마를 가진 GML 파일을 선택하는 편이 좋습니다. GML이 혼합 도형 유형을 지원하고 가독성이 좋기 때문입니다. 산출물을 python/plugins/processing/tests/testdata/expected 로 리다이렉트시키십시오. 입력 레이어의 경우, testdata 폴더에 이미 있는 레이어를 사용하는 편이 좋습니다. 추가 데이터가 필요하다면 testdata/custom 폴더에 넣으십시오.

  2. 알고리즘을 실행했다면, Processing ► History 메뉴로 가서 방금 실행한 알고리즘을 찾으십시오.

  3. 해당 알고리즘을 오른쪽 클릭한 다음 Create Test 를 선택하십시오. 텍스트 정의를 담은 새 창이 열릴 것입니다.

  4. python/plugins/processing/tests/testdata/algorithm_tests.yaml 파일을 열고 텍스트 정의를 복사해서 붙여넣으십시오.

명령어의 첫 문자열은 algorithm 키로, 그 다음 문자열들은 차례대로 params 로, 마지막 문자열(들)은 results 로 갑니다.

즉 다음과 같이 번역됩니다:

- name: densify
  algorithm: qgis:densifygeometriesgivenaninterval
  params:
    - type: vector
      name: polys.gml
    - 2 # Interval
  results:
    OUTPUT:
      type: vector
      name: expected/polys_densify.gml

공간 처리 스크립트에 대한 테스트도 생성할 수 있습니다. 스크립트들은 python/plugins/processing/tests/testdata/ 테스트 데이터 디렉터리의 scripts 하위 디렉터리에 있어야 합니다. 스크립트 파일 이름은 스크립트의 알고리즘 이름과 일치해야 합니다.

7.1.2. 파라미터와 결과물

단순(trivial) 유형 파라미터

파라미터와 결과물은 목록 또는 디렉터리로 지정됩니다:

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

파일 유형 파라미터

알고리즘 테스트를 위한 외부 파일이 필요한 경우, 파일 ‘type’과 그 ‘name’ 으로 파일을 가리키는 (상대) 경로를 지정해야 합니다:

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__ 이라는 특수 필드는 모든 필드에 특정 허용 오차를 적용할 것입니다. 각 꼭짓점에 적용되는 precision 을 허용하는 또다른 geometry 속성도 있습니다.

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
래스터 파일

래스터 파일들은 해시 체크섬(hash checksum)을 사용해서 비교합니다. 공간 처리 이력에서 테스트를 생성할 때 해시 체크섬을 계산합니다.

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. 알고리즘 맥락

알고리즘의 맥락을 수정할 수 있는 정의들이 몇 개 더 있습니다 — 테스트의 최상위 수준에서 이들을 지정할 수 있습니다:

  • project: 알고리즘을 실행하기 전에 지정한 QGIS 프로젝트 파일을 불러올 것입니다. 지정하지 않는 경우 비어 있는 프로젝트를 사용해서 알고리즘을 실행할 것입니다.

  • project_crs: 기본 프로젝트 좌표계를 무시하고 예를 들면 EPSG:27700 를 지정할 수 있습니다.

  • ellipsoid: 측정에 사용되는 기본 프로젝트 타원체를 무시하고 예를 들면 GRS80 을 지정할 수 있습니다.

7.1.4. 로컬에서 테스트 실행하기

ctest -V -R ProcessingQgisAlgorithmsTest

또는 CMakelists.txt 의 목록에 나오는 값들 가운데 하나를 사용하십시오.