Ошибка "Запрошенный ресурс не найден" в библиотеке Python Moto
Я пишу тестовый пример в Python для DynamoDB с использованием библиотеки moto, и у меня есть код, как показано ниже:
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
Я дважды проверил регион и имя таблицы, и она существует в консоли. Когда я запускаю код для помещения элемента в мою таблицу DynamoDB, он успешно сохраняет его в таблице, например, так:
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. В чем может быть проблема здесь?
Версия пакета:
- Python: 3.7.0
- boto3: 1.7.84
- Мото: 1.3.6
1 ответ
Решение
При использовании moto вам необходимо создать базовый ресурс перед выполнением каких-либо действий с этим ресурсом. В вашем случае вам нужно будет сделать create_table
прежде чем делать put_item
из вашей тестовой функции.