测试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>

    • 要测试的Source文件(扩展名可以是.link以外的任何内容)
    • 必填
  • rendition.<extension>

    • 预期呈现版本
    • 必需,错误测试除外
  • params.json

    • 单个演绎版JSON指令
    • 可选
  • validate

    • 将预期和实际演绎版文件路径作为参数获取,如果结果正常,则必须返回退出代码0;如果验证或比较失败,则必须返回非零退出代码。
    • 可选,默认为diff命令
    • 使用封装了Docker run命令的外壳脚本,以使用不同的验证工具
  • 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的新文件以定义辅助进程的输入参数:

    code language-json
    {
        "size": "400",
        "contrast": "0.25",
        "brightness": "-0.50"
    }
    

    这些是传递到开发工具的Asset compute配置文件定义中的相同键/值,小于worker键。

  5. 将预期的演绎版文件添加到此测试用例中,并将其命名为rendition.png。 此文件表示给定输入file.jpg的辅助进程的预期输出。

  6. 从命令行中,通过执行aio app test来运行项目根目录测试

    • 确保已安装并启动Docker Desktop和支持的Docker映像
    • 终止任何正在运行的开发工具实例

测试 — 成功

编写错误检查测试用例

此测试用例测试以确保Worker在contrast参数设置为无效值时引发相应的错误。

  1. /test/asset-compute/worker/error-contrast处新建测试用例文件夹,以测试由于contrast参数值无效而导致工作进程执行的错误。

  2. error-contrast文件夹中,为此测试用例添加测试输入文件并将其命名为file.jpg。 此文件的内容对此测试并不重要,它只是需要存在才能通过“源损坏”检查,为了达到此测试用例验证的rendition.instructions有效性检查。

  3. error-contrast文件夹中,添加名为params.json的新文件以定义辅助进程的输入参数及其内容:

    code language-json
    {
        "contrast": "10",
        "errorReason": "rendition_instructions_error"
    }
    
    • contrast参数设置为10(无效值,因为对比度必须介于–1和1之间)以引发RenditionInstructionsError
    • 通过将errorReason键设置为与预期错误关联的“原因”,声明在测试中抛出相应的错误。 此无效的对比度参数引发自定义错误 RenditionInstructionsError,因此将errorReason设置为此错误的原因,或将rendition_instructions_error设置为声明引发该错误。
  4. 由于在错误执行期间不应生成任何演绎版,因此不需要rendition.<extension>文件。

  5. 通过执行命令aio app test,从项目的根目录运行测试包

    • 确保已安装并启动Docker Desktop和支持的Docker映像
    • 终止任何正在运行的开发工具实例

测试 — 错误对比度

Github上的测试案例

Github上提供了最终测试案例,网址为:

疑难解答

recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69