我想使用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);