測試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;如果驗證或比較失敗,則返回非零退出代碼。
    • 可選,預設為diff命令
    • 使用包裝Docker運行命令的Shell指令碼,以使用不同的驗證工具
  • mock-<host-name>.json

編寫測試用例

此測試實例聲明輸入檔案(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. /test/asset-compute/worker/error-contrast處建立新的測試用例資料夾,以測試由於無效contrast參數值導致的工作器的重新執行。

  2. error-contrast資料夾中,添加此測試案例的測試輸入檔案,並將其命名為file.jpg。 此檔案的內容對此測試不重要,它只需要存在才能通過「損壞源」檢查,才能達到rendition.instructions有效性檢查,該測試案例才能驗證。

  3. error-contrast資料夾中,添加一個名為params.json的新檔案,該檔案定義了包含內容的工作器的輸入參數:

    {
        "contrast": "10",
        "errorReason": "rendition_instructions_error"
    }
    
    • contrast參數設定為10,這是無效值,因為對比度必須介於–1和1之間,才會引發RenditionInstructionsError
    • errorReason鍵設定為與預期錯誤相關聯的「reason」,以在測試中擲回適當錯誤。 此無效的對比度參數會擲回自訂錯誤RenditionInstructionsError,因此將errorReason設為此錯誤的原因,或將rendition_instructions_error設為斷言擲回。
  4. 由於執行錯誤期間不應產生任何轉譯,因此不需要rendition.<extension>檔案。

  5. 通過執行命令aio app test從項目的根目錄運行測試套件

    • 確保安裝並啟動Docker Desktop和支援的Docker映像
    • 終止任何正在運行的開發工具實例

測試 — 錯誤對比

Github的測試案例

Github提供最終測試案例,網址為:

疑難排解

本頁內容