測試和偵錯自訂應用程式 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.jsongoogle.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.jsonvalidate指令碼,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

NOTE
如果測試案例未包含預期的rendition.*檔案,且未在params.json檔案內定義預期的errorReason,則會假設為包含任何errorReason的錯誤案例。

錯誤測試案例結構:

<error_test_case>/
    file.jpg
    params.json

帶有錯誤原因的引數檔:

{
    "errorReason": "SourceUnsupported",
    // ... other params
}

檢視Asset compute錯誤原因的完整清單和說明。

對自訂應用程式進行偵錯 debug-custom-worker

下列步驟顯示如何使用Visual Studio Code偵錯自訂應用程式。 它允許檢視即時記錄、點選中斷點和逐步執行程式碼,以及在每次啟用時即時重新載入本機程式碼變更。

aio現成可用的自動化了其中的許多步驟。 移至Adobe Developer App Builder檔案中的「偵錯應用程式」一節。 目前,以下步驟包含因應措施。

  1. 從GitHub和選用的ngrok安裝最新的wskdebug

    code language-shell
    npm install -g @openwhisk/wskdebug
    npm install -g ngrok --unsafe-perm=true
    
  2. 在JSON檔案中新增使用者設定。 它持續使用舊的Visual Studio程式碼偵錯工具。 新的有個問題,與wskdebug: "debug.javascript.usePreview": false

  3. 關閉任何透過aio app run開啟的應用程式例項。

  4. 使用aio app deploy部署最新的程式碼。

  5. 僅使用aio asset-compute devtool執行Asset computeDevtool。 保持開啟。

  6. 在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

  7. 從執行/偵錯設定中選取wskdebug worker並按播放圖示。 請等候它啟動,直到它在​ 偵錯主控台 ​視窗中顯示​ 準備啟動

  8. 在Devtool中按一下​ 執行。 您可以看到在Visual Studio程式碼編輯器中執行的動作,而且記錄會開始顯示。

  9. 在程式碼中設定中斷點。 然後再次執行,應該會點選。

任何程式碼變更都會即時載入,並在下次啟用時立即生效。

NOTE
自訂應用程式中的每個請求都有兩個啟用專案。 第一個要求是Web動作,會在SDK程式碼中非同步呼叫自身。 第二個啟用是點選程式碼的啟用。
recommendation-more-help
b027be24-3772-44c0-a56d-a4ba23dcb50b