测试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
以外的任何内容) - 必填
- 要测试的Source文件(扩展名可以是
-
rendition.<extension>
- 预期呈现版本
- 必需,错误测试除外
-
params.json
- 单个演绎版JSON指令
- 可选
-
validate
- 将预期和实际演绎版文件路径作为参数获取,如果结果正常,则必须返回退出代码0;如果验证或比较失败,则必须返回非零退出代码。
- 可选,默认为
diff
命令 - 使用封装了Docker run命令的外壳脚本,以使用不同的验证工具
-
mock-<host-name>.json
- 模拟外部服务调用的JSON格式化HTTP响应。
- 可选,仅当辅助代码发出自己的HTTP请求时使用
编写测试用例
此测试用例声明输入文件(file.jpg
)的参数化输入(params.json
)生成预期的PNG格式副本(rendition.png
)。
-
首先,删除位于
/test/asset-compute/simple-worker
的自动生成的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 Desktop和支持的Docker映像
- 终止任何正在运行的开发工具实例
编写错误检查测试用例
此测试用例测试以确保Worker在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 Desktop和支持的Docker映像
- 终止任何正在运行的开发工具实例
Github上的测试案例
Github上提供了最终测试案例,网址为: