Python 摩托没有';模拟发电机
我正试图为与DynamoDB通信的Lambda函数编写单元测试。我使用的是Python 摩托没有';模拟发电机,python,aws-lambda,boto3,moto,Python,Aws Lambda,Boto3,Moto,我正试图为与DynamoDB通信的Lambda函数编写单元测试。我使用的是moto,但它并没有嘲弄任何东西。每当我在boto3中调用某个东西时,它都会使用AWS CLI配置文件与实际API进行通信,而不是模拟API。为什么会这样 代码如下: visitorCounterLambda函数的单元测试 来自visitorCounterLambda导入处理程序 进口boto3 来自moto进口模拟发电机2 def设置(自): #通过 self.region='us-east-2' @模拟发电机2 def
moto
,但它并没有嘲弄任何东西。每当我在boto3中调用某个东西时,它都会使用AWS CLI配置文件与实际API进行通信,而不是模拟API。为什么会这样
代码如下:
visitorCounterLambda函数的单元测试
来自visitorCounterLambda导入处理程序
进口boto3
来自moto进口模拟发电机2
def设置(自):
#通过
self.region='us-east-2'
@模拟发电机2
def test_handler():
dynamodb=boto3.client('dynamodb')
ddbTableName=“myDDBtable”
#table=dynamodb.create_table(
#TableName=ddbTableName,
#BillingMode='PAY_PER_REQUEST',
#属性定义=[
# {
#'AttributeName':'id',
#“AttributeType”:“S”
# },
# ],
#凯西马=[
# {
#'AttributeName':'id',
#“键类型”:“哈希”
# },
# ]
# )
tablesListed=dynamodb.list_tables()
打印(列表)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
测试处理器()
print(表列表)
从我的实际帐户返回我的实际表。如果我取消注释create\u table
命令,它也会在我的AWS帐户中创建表
我错过了什么?
谢谢我发现问题出在visitorCounterLambda导入处理程序的
部分,因为该脚本在导入时已经建立了boto3客户端,因此mock
无法打破这一点。正确的操作方法在“非常重要--推荐用法”下进行了概述。您应该首先建立@mock_dynamodb2
,然后将外部资源导入函数
例如:
导入boto3
来自moto进口模拟发电机2
@模拟发电机2
def test_handler():
来自visitorCounterLambda导入处理程序
dynamodb=boto3.client('dynamodb')
##在这里施展你的魔法
tablesListed=dynamodb.list_tables()
打印(列表)
我刚刚试用了你的代码,它在这里工作得非常好。您使用的Python和boto3
和moto
版本是什么?我使用的是python3.7.3
,boto3 1.13.24
,moto 1.3.14
。可能是因为我有预配置的CLI凭据吗?@Dunedan谢谢你的帮助,我找到了答案,请查看下面的答案。我必须提到,我的帖子是由两个不同的人编辑的,目的是“代码清理”,他们删除了问题所在的部分。代码管理处于最佳状态。。。