測試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 run命令的外殼指令碼,以使用不同的驗證工具
-
mock-<host-name>.json
- JSON格式的HTTP回應,用於 嘲弄外部服務呼叫.
- 選用,僅在背景工作程式碼提出自己的HTTP請求時使用
撰寫測試案例
此測試案例會確認引數化的輸入(params.json
)作為輸入檔案(file.jpg
)產生預期的PNG轉譯(rendition.png
)。
-
首先刪除自動產生的
simple-worker
測試案例位於/test/asset-compute/simple-worker
由於這是無效的,因為我們的背景工作不再只是將來源複製到轉譯。 -
於建立新的測試案例資料夾
/test/asset-compute/worker/success-parameterized
測試產生PNG轉譯之背景工作程式的成功執行。 -
在
success-parameterized
資料夾,新增測試 輸入檔案 用於此測試案例並命名它file.jpg
. -
在
success-parameterized
資料夾,新增名為的新檔案params.json
會定義背景工作程式的輸入引數:code language-json { "size": "400", "contrast": "0.25", "brightness": "-0.50" }
這些是傳遞至 開發工具的Asset compute設定檔定義,減去
worker
機碼。 -
新增預期的 轉譯檔案 到此測試案例並命名它
rendition.png
. 此檔案代表指定輸入之背景工作程式的預期輸出file.jpg
. -
從命令列,執行以測試專案根目錄
aio app test
- 確定 Docker案頭 和支援的Docker映像已安裝並啟動
- 終止任何執行中的開發工具例項
寫入錯誤檢查測試案例
此測試案例會進行測試以確保工作者在 contrast
引數已設定為無效值。
-
於建立新的測試案例資料夾
/test/asset-compute/worker/error-contrast
測試由於無效背景工作程式的錯誤執行contrast
引數值。 -
在
error-contrast
資料夾,新增測試 輸入檔案 用於此測試案例並命名它file.jpg
. 此檔案的內容對此測試而言並不重要,它只需存在即可通過「損壞的來源」檢查,以達到rendition.instructions
有效性檢查,此測試案例可驗證。 -
在
error-contrast
資料夾,新增名為的新檔案params.json
定義背景工作程式的輸入引數及其內容:code language-json { "contrast": "10", "errorReason": "rendition_instructions_error" }
- 設定
contrast
引數至10
,為無效值,因為對比度必須介於–1到1之間,才能擲回RenditionInstructionsError
. - 透過設定
errorReason
與預期錯誤相關聯之「原因」的索引鍵。 此無效的對比引數會擲回 自訂錯誤,RenditionInstructionsError
,因此請設定errorReason
此錯誤的原因,或rendition_instructions_error
以判斷是否擲回。
- 設定
-
由於在錯誤執行期間不應產生轉譯,因此
rendition.<extension>
檔案為必要項。 -
執行命令,從專案的根目錄執行測試套裝
aio app test
- 確定 Docker案頭 和支援的Docker映像已安裝並啟動
- 終止任何執行中的開發工具例項
Github上的測試案例
Github提供最終測試案例,網址為: