測試和偵錯自訂應用程式 test-debug-custom-worker
執行自訂應用程式的單元測試 test-custom-worker
在您的電腦上安裝Docker案頭。 若要測試自訂背景工作,請在應用程式的根目錄執行下列命令:
$ aio app test
此命令會按照以下說明,執行專案中Asset Compute應用程式動作的自訂單元測試架構。 它是透過package.json檔案中的組態連結。 也可以進行JavaScript單元測試,例如Jest。 aio app test會同時執行。
aio-cli-plugin-asset-compute外掛程式內嵌為自訂應用程式應用程式中的開發相依性,因此不需要安裝在組建/測試系統上。
應用程式單元測試架構 unit-test-framework
Asset Compute應用程式單元測試架構可讓您測試應用程式,而不需撰寫任何程式碼。 它仰賴應用程式轉譯檔案原則的來源。 必須設定特定檔案和資料夾結構,以使用測試來源檔案、選用引數、預期的轉譯和自訂驗證指令碼來定義測試案例。 依預設,會比較轉譯的位元組相等。 此外,您可使用簡單的JSON檔案輕鬆模擬外部HTTP服務。
新增測試 add-tests
專案根層級的test資料夾內應該有測試。 每個應用程式的測試案例應位於路徑test/asset-compute/<worker-name>中,每個測試案例各有一個資料夾:
action/
manifest.yml
package.json
...
test/
asset-compute/
<worker-name>/
<testcase1>/
file.jpg
params.json
rendition.png
<testcase2>/
file.jpg
params.json
rendition.gif
validate
<testcase3>/
file.jpg
params.json
rendition.png
mock-adobe.com.json
mock-console.adobe.io.json
請檢視範例自訂應用程式以取得一些範例。 詳細參考如下。
測試輸出 test-output
位於Adobe Developer App Builder應用程式根目錄的build目錄內含自訂應用程式的詳細測試結果和記錄。 這些詳細資料也會顯示在aio app test命令的輸出中。
模擬外部服務 mock-external-services
您可以為測試案例建立mock-<HOST_NAME>.json檔案,並將HOST_NAME設為要模擬的特定主機,藉此在您的動作中模擬外部服務呼叫。 使用案例範例是對S3進行個別呼叫的應用程式。 新的測試結構如下所示:
test/
asset-compute/
<worker-name>/
<testcase3>/
file.jpg
params.json
rendition.png
mock-<HOST_NAME1>.json
mock-<HOST_NAME2>.json
模擬檔案是JSON格式的http回應。 如需詳細資訊,請參閱此檔案。 如果要模擬多個主機名稱,請定義多個mock-<mocked-host>.json檔案。 以下是名為mock-google.com.json的google.com的範例模型檔案:
[{
"httpRequest": {
"path": "/images/hello.txt"
"method": "GET"
},
"httpResponse": {
"statusCode": 200,
"body": {
"message": "hello world!"
}
}
}]
範例worker-animal-pictures包含其互動之Wikimedia服務的模擬檔案。
在測試案例間共用檔案 share-files-across-test-cases
如果您在多個測試中共用file.*、params.json或validate指令碼,Adobe建議使用相對符號連結。 它們受到Git支援。 請務必為您共用的檔案指定唯一的名稱,因為您可能有不同的檔案。 在以下範例中,測試會將一些共用檔案與其自己的檔案混合及比對:
tests/
file-one.jpg
params-resize.json
params-crop.json
validate-image-compare
jpg-png-resize/
file.jpg - symlink: ../file-one.jpg
params.json - symlink: ../params-resize.json
rendition.png
validate - symlink: ../validate-image-compare
jpg2-png-crop/
file.jpg
params.json - symlink: ../params-crop.json
rendition.gif
validate - symlink: ../validate-image-compare
jpg-gif-crop/
file.jpg - symlink: ../file-one.jpg
params.json - symlink: ../params-crop.json
rendition.gif
validate
測試預期的錯誤 test-unexpected-errors
錯誤測試案例不應包含預期的rendition.*檔案,應在params.json檔案中定義預期的errorReason。
rendition.*檔案,並且未在params.json檔案中定義預期的errorReason,則假定它是任何errorReason的錯誤案例。錯誤測試用例結構:
<error_test_case>/
file.jpg
params.json
參數檔案,錯誤原因:
{
"errorReason": "SourceUnsupported",
// ... other params
}
調試自定義應用程式 debug-custom-worker
以下步驟顯示如何使用Visual Studio代碼調試自定義應用程式。 它允許查看即時日誌、點擊斷點和逐步執行代碼,以及在每次激活時即時重新載入本地代碼更改。
aio現成版本可自動執行其中的許多步驟。 轉至Adobe Developer App Builder文檔中的「調試應用程式」部分。 目前,以下步驟包括一種解決方法。
-
從GitHub安裝最新的wskdebug和可選的ngrok。
code language-shell npm install -g @openwhisk/wskdebug npm install -g ngrok --unsafe-perm=true -
在JSON檔案中添加用戶設定。 它一直在使用舊的Visual Studio代碼調試器。 新的wskdebug有某些問題:
"debug.javascript.usePreview": false。 -
關閉通過
aio app run開啟的所有應用實例。 -
使用
aio app deploy部署最新代碼。 -
僅使用
aio asset-compute devtool運行Asset computeDevtool。 保持開啟。 -
在Visual Studio代碼編輯器中,將以下調試配置添加到
launch.json:code language-json { "type": "node", "request": "launch", "name": "wskdebug worker", "runtimeExecutable": "wskdebug", "args": [ "PROJECT-0.0.1/__secured_worker", // Replace this with your ACTION NAME "${workspaceFolder}/actions/worker/index.js", "-l", "--ngrok" ], "localRoot": "${workspaceFolder}", "remoteRoot": "/code", "outputCapture": "std", "timeout": 30000 }從
aio app deploy的輸出中提取ACTION NAME。 -
從運行/調試配置中選擇
wskdebug worker,然後按播放表徵圖。 等待它啟動,直到在 調試控制台 窗口中顯示準備激活。 -
在Devtool中按一下運行。 您可以看到在Visual Studio代碼編輯器中運行的操作,並且日誌開始顯示。
-
在程式碼中設定中斷點。 然後再次執行,應該會點選。
任何程式碼變更都會即時載入,並在下次啟用時立即生效。