测试和调试自定义应用程序 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