asset compute 작업자 테스트

asset compute 프로젝트는 Asset compute 작업자의 테스트를 쉽게 만들고 실행하기 위한 패턴을 정의합니다.

근로자 시험의 해부학

asset compute 작업자의 테스트는 테스트 세트로 분류되며 각 테스트 세트 내에서 하나 이상의 테스트 사례가 테스트 조건을 충족합니다.

asset compute 프로젝트에서 테스트의 구조는 다음과 같습니다.

/actions/<worker-name>/index.js
...
/test/
  asset-compute/
    <worker-name>/           <--- Test suite for the worker, must match the yaml key for this worker in manifest.yml
        <test-case-1>/       <--- Specific test case 
            file.jpg         <--- Input file (ie. `source.path` or `source.url`)
            params.json      <--- Parameters (ie. `rendition.instructions`)
            rendition.png    <--- Expected output file (ie. `rendition.path`)
        <test-case-2>/       <--- Another specific test case for this worker
            ...

각 테스트 캐스팅에는 다음 파일이 있을 수 있습니다.

  • file.<extension>
    • 테스트할 소스 파일(확장자는 .link 제외)입니다.
    • 필수
  • rendition.<extension>
    • 예상 표현물
    • 오류 테스트를 제외하고 필수 여부
  • params.json
    • 단일 표현물 JSON 지침
    • 선택 사항입니다
  • validate
    • 예상 스크립트와 실제 표현물 파일 경로를 인수로 가져오고 결과가 양호한 경우 종료 코드 0을 반환해야 하며, 유효성 검사나 비교가 실패한 경우 0이 아닌 종료 코드를 반환해야 합니다.
    • 선택 사항이며 기본값은 diff 명령입니다.
    • 다른 유효성 검사 도구를 사용하기 위해 docker 실행 명령을 래핑하는 셸 스크립트 사용
  • mock-<host-name>.json
    • 외부 서비스 호출을 조롱하는 JSON 형식의 HTTP 응답입니다.
    • 선택 사항이며, 작업자 코드가 직접 HTTP 요청을 수행하는 경우에만 사용됩니다

테스트 사례 작성

이 테스트 케이스는 입력 파일(file.jpg)에 대해 매개 변수가 있는 입력(params.json)이 예상되는 PNG 변환(rendition.png)을 생성합니다.

  1. 작업자가 더 이상 소스를 변환에 복사하지 않으므로 먼저 /test/asset-compute/simple-worker에서 자동 생성된 simple-worker 테스트 사례를 삭제합니다.

  2. /test/asset-compute/worker/success-parameterized에 새 테스트 사례 폴더를 만들어 PNG 변환을 생성하는 작업자의 성공적인 실행을 테스트합니다.

  3. success-parameterized 폴더에서 이 테스트 케이스에 대해 테스트 입력 파일을 추가하고 이름을 file.jpg로 지정합니다.

  4. success-parameterized 폴더에서 작업자의 입력 매개 변수를 정의하는 params.json 라는 새 파일을 추가합니다.

    { 
        "size": "400",
        "contrast": "0.25",
        "brightness": "-0.50"
    }
    

    이러한 키/값은 개발 도구의 Asset compute 프로필 정의에 전달된 것과 동일하며 worker 키보다 작습니다.

  5. 예상 변환 파일을 이 테스트 사례에 추가하고 이름을 rendition.png로 지정합니다. 이 파일은 지정된 입력 file.jpg에 대해 작업자의 예상 출력을 나타냅니다.

  6. 명령줄에서 aio app test 을(를) 실행하여 프로젝트 루트를 테스트합니다

    • Docker Desktop 및 지원 Docker 이미지가 설치 및 시작되었는지 확인합니다.
    • 실행 중인 모든 개발 도구 인스턴스 종료

테스트 - 성공

오류 검사 테스트 사례 쓰기

이 테스트 사례 테스트는 작업자가 contrast 매개 변수가 잘못된 값으로 설정된 경우 적절한 오류를 발생하는지 확인합니다.

  1. 잘못된 contrast 매개 변수 값으로 인해 작업자의 참조 실행을 테스트하려면 /test/asset-compute/worker/error-contrast에 새 테스트 사례 폴더를 만듭니다.

  2. error-contrast 폴더에서 이 테스트 케이스에 대해 테스트 입력 파일을 추가하고 이름을 file.jpg로 지정합니다. 이 파일의 내용은 이 테스트에 적용됩니다. 이 테스트 케이스의 유효성을 확인하기 위해 "손상된 소스" 검사를 통과해야 하는 "Corrupt source" 검사를 통과해야 합니다.rendition.instructions

  3. error-contrast 폴더에서 내용을 사용하여 작업자의 입력 매개 변수를 정의하는 params.json 라는 새 파일을 추가합니다.

    {
        "contrast": "10",
        "errorReason": "rendition_instructions_error"
    }
    
    • contrast 매개 변수를 10(으)로 설정합니다. 대비가 -1과 1 사이여야 하므로 RenditionInstructionsError를 throw합니다.
    • 예상되는 오류와 연결된 "reason"으로 errorReason 키를 설정하여 적절한 오류를 테스트에 실행합니다. 이 잘못된 대비 매개 변수에 사용자 지정 오류, RenditionInstructionsError가 발생하므로 errorReason을 이 오류의 이유로 설정하거나, 또는rendition_instructions_error가 throw되어 있음을 어설션합니다.
  4. 참조 실행 중에 렌디션을 생성할 필요가 없으므로 rendition.<extension> 파일이 필요하지 않습니다.

  5. aio app test 명령을 실행하여 프로젝트의 루트에서 테스트 세트를 실행합니다.

    • Docker Desktop 및 지원 Docker 이미지가 설치 및 시작되었는지 확인합니다.
    • 실행 중인 모든 개발 도구 인스턴스 종료

테스트 - 오류 대비

Github에서 테스트 사례

최종 테스트 사례는 Github에서 다음 위치에 있습니다.

문제 해결

이 페이지에서는