'Requested resource not found' Python Moto 库错误
'Requested resource not found' error with Python Moto library
我正在 Python 中使用 moto 库为 DynamoDB 编写测试用例,我的代码如下所示:
import boto3
import pytest
from moto import mock_dynamodb2
from myapp import save_contact
@mock_dynamodb2
def test_contact_save_to_dynamo():
assert save_contact(
'test@x.com',
'John Appleseed'
) == 200
测试失败并显示以下错误消息:
E AssertionError: assert 'Requested resource not found' == 200
我仔细检查了区域和 table 名称,它存在于控制台中。当我 运行 将项目放入我的 DynamoDB table 的代码时,它成功地将它保存到 table,如下所示:
import datetime
import boto3
from botocore.exceptions import ClientError
AWS_REGION = 'us-east-1'
DYNAMODB_TABLE = 'aprs_messages'
time_stamp = str(int(datetime.datetime.utcnow().timestamp()))
ddb_client = boto3.client('dynamodb',region_name=AWS_REGION)
def save_contact(email, name):
try:
response = ddb_client.put_item(
TableName=DYNAMODB_TABLE,
Item={
'message_time': {'N': time_stamp },
'email': {'S': email },
'name': {'S': name }
}
)
except ClientError as e:
return e.response['Error']['Message']
else:
return response['ResponseMetadata']['HTTPStatusCode']
x = save_contact(
'test@x.com',
'John Appleseed'
)
print(x)
当我 运行 此代码时,我得到一个 200 响应代码,我还可以在 DynamoDB table 中看到该条目。这可能是什么问题?
包版本:
- Python: 3.7.0
- boto3: 1.7.84
- 摩托:1.3.6
使用 moto 时,您需要先创建基础资源,然后再对该资源执行任何操作。在您的情况下,您需要在测试函数中执行 put_item
之前执行 create_table
。
我正在 Python 中使用 moto 库为 DynamoDB 编写测试用例,我的代码如下所示:
import boto3
import pytest
from moto import mock_dynamodb2
from myapp import save_contact
@mock_dynamodb2
def test_contact_save_to_dynamo():
assert save_contact(
'test@x.com',
'John Appleseed'
) == 200
测试失败并显示以下错误消息:
E AssertionError: assert 'Requested resource not found' == 200
我仔细检查了区域和 table 名称,它存在于控制台中。当我 运行 将项目放入我的 DynamoDB table 的代码时,它成功地将它保存到 table,如下所示:
import datetime
import boto3
from botocore.exceptions import ClientError
AWS_REGION = 'us-east-1'
DYNAMODB_TABLE = 'aprs_messages'
time_stamp = str(int(datetime.datetime.utcnow().timestamp()))
ddb_client = boto3.client('dynamodb',region_name=AWS_REGION)
def save_contact(email, name):
try:
response = ddb_client.put_item(
TableName=DYNAMODB_TABLE,
Item={
'message_time': {'N': time_stamp },
'email': {'S': email },
'name': {'S': name }
}
)
except ClientError as e:
return e.response['Error']['Message']
else:
return response['ResponseMetadata']['HTTPStatusCode']
x = save_contact(
'test@x.com',
'John Appleseed'
)
print(x)
当我 运行 此代码时,我得到一个 200 响应代码,我还可以在 DynamoDB table 中看到该条目。这可能是什么问题?
包版本:
- Python: 3.7.0
- boto3: 1.7.84
- 摩托:1.3.6
使用 moto 时,您需要先创建基础资源,然后再对该资源执行任何操作。在您的情况下,您需要在测试函数中执行 put_item
之前执行 create_table
。