如何在CDK中对多个AWS Lambda函数进行单元测试



我想使用CDK的内置断言来测试堆栈中的多个lambda函数。到目前为止,我只能测试一个lambda函数。

def test_lambda_function():
app = core.App()
stack = RadBackendStack(app, "rad-backend")
template = assertions.Template.from_stack(stack)
print(template)
template.has_resource_properties("AWS::Lambda::Function", {
"Architectures": ["arm64"],
"Runtime": "python3.8",
"Timeout": 1
})

这是我编写的lambda测试函数。我希望它能测试我堆栈中的所有lambda函数。

self._lambda = _lambda.Function(
self,
"test_function",
code=_lambda.AssetCode.from_asset('src'),
handler="lambda.handler",
architecture=_lambda.Architecture.ARM_64,
runtime=_lambda.Runtime.PYTHON_3_8,
timeout=Duration.seconds(1)
)
self._lambda_2 = _lambda.Function(
self,
"test_function_2",
code=_lambda.AssetCode.from_asset('src'),
handler="lambda.handler",
architecture=_lambda.Architecture.ARM_64,
runtime=_lambda.Runtime.PYTHON_2_7,
timeout=Duration.seconds(2)
)

这些是lambda函数。我预计第二个会失败,但pytest只测试第一个。

has_resource_properties测试是否存在具有这些属性的资源。它之所以成功,是因为存在一个具有这些属性的lambda。这在typescript实现注释中有记录。

如果两个Lambda都有相同的属性,您可以使用template.resource_properties_count_is并断言计数为2:

template.resource_properties_count_is("AWS::Lambda::Function", {
"Architectures": ["arm64"],
"Runtime": "python3.8",
"Timeout": 1
}, 2);

最新更新