python - 使用 pytest 设置的 Lambda 处理程序上下文 aws_request_id
问题描述
我可以在 pytest 中模拟事件以测试lambda_handler(event, context) 但无法测试上下文,并且仅从上下文中使用 aws_request_id。我正在尝试跟随。
context = {
'aws_request_id': 'abcdef',
'log_stream_name': '1f73402ad',
'invoked_function_arn': 'arn:aws:lambda:region:1000:function:TestCFStackNam-TestLambdaFunctionResourceName-ABC-1234F',
'client_context': None,
'log_group_name': '/aws/lambda/TestCFStackName-TestLambdaFunctionResourceName-ABC-1234F',
'function_name': 'TestCloudFormationStackName-TestLambdaFunctionResourceName--ABC-1234F',
'function_version': '$LATEST',
'identity': '<__main__.CognitoIdentity object at 0x1fb81abc00>',
'memory_limit_in_mb': '128'
}
lambda_handler(event, context)
aws_request_id = context.aws_request_id
Error -
AttributeError: 'dict' object has no attribute 'aws_request_id'
解决方案
AWS Lambda 上下文对象不是字典。aws_request_id
不是字典键,它是上下文对象的属性。将您的模拟修改为字典将导致您的代码在作为实际 Lambda 函数运行时中断。解决此问题的正确方法是确保您的模拟对象是实际 Lambda 上下文对象的真实再现。
您可以编写一个简单的类并aws_request_id
在其上设置属性,如下所示:
class LambdaContext:
aws_request_id = 'abcdef'
# ...
context = LambdaContext()
aws_request_id = context.aws_request_id
推荐阅读
- azure - 无需登录即可对 Azure REST API 进行身份验证
- c++ - 多个运算符 "[]" 匹配这些操作数
- c - 这有什么问题?它一直告诉我:格式 -wformat-extra-args 的参数太多
- spring-boot - EntityScan Spring 注释的问题。将模型类移动到新包时它停止工作
- jakarta-ee - WAS 9 Inject 中的 CDIDeploymentRuntimeException 不起作用
- machine-learning - pytorch SGD 的默认批量大小是多少?
- python - django pymongo 搜索栏报错 需要指导/教程
- javascript - 延迟 foreach 直到 xmlhttprequest 完成工作
- git - 找到'Jenkinsfile',满足条件,没有为jenkins触发自动构建,用于git分支
- pytorch - 变形金刚 PreTrainedTokenizer add_tokens 功能