使用Lambda代理集成来“测试”Lambda函数是否值得?

3
如果在API Gateway中使用"Lambda Proxy Integration"同样适用这里),会发生两个重要的变化:
1)数据被映射到event.body(而不是直接映射到event对象需要映射模板)
2)event.body被字符串化,并且需要JSON.parse解析
以下是一个简单的Lambda函数示例,它期望输入符合来自API Gateway的Lambda代理集成(node10x)-
exports.handler = async (event, context) => {

    if (event && event.body) {
    try {
        event.body = JSON.parse(event.body);
    } catch(e) {
        return {
            statusCode: 200,
            body: JSON.stringify({message: 'Hit error in try/catch'})
        }
    }
}
    return {
        statusCode: 200,
        body: JSON.stringify({message: event})
    }

}
问:如何(或者应该)使用Lambda的“内置”测试输入功能来测试一个期望按照Lambda代理集成方式处理数据的Lambda脚本?
测试输入直接作为event对象中的数据(而不是event.body),并且测试负载的数据没有进行字符串化。

enter image description here

如果函数期望的是 event.body,我们可以将其传递给测试,但是需要对 event.body 进行字符串化。我们可以默默地跳过 try/catch,但这似乎有点笨拙。
有没有更好的技术可以将“测试”输入数据发送到 Lambda 函数中? 除非我漏掉了什么,否则似乎你需要获得更好的解决方案或手工制作测试输入来“匹配”从带有 Lambda 代理集成的 API Gateway 调用的预期有效负载。

2
为什么你不将字符串化的JSON对象作为值放入你的测试事件中的"body"键呢? - undefined
这也在我脑海中闪过——我认为现在的关键是不要太依赖于使用代理集成和本地运行SAM或其他工具来“测试”Lambda函数,例如:https://github.com/awslabs/serverless-application-model?source=post_page - undefined
1个回答

0

不要尝试使用建议的默认事件配置,你试过在测试Lambda函数时选择预定义的测试事件模板吗?

你可以尝试选择事件模板 --> API Gateway AWS Proxy。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接