【问题标题】:'Requested resource not found' error with Python Moto libraryPython Moto 库出现“未找到请求的资源”错误
【发布时间】:2018-10-14 21:50:39
【问题描述】:

我正在使用moto 库在 Python 中为 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

我已经仔细检查了区域和表名,它存在于控制台中。当我运行代码将项目放入我的 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

【问题讨论】:

    标签: python python-3.x amazon-dynamodb boto3 moto


    【解决方案1】:

    使用 moto 时,您需要在对该资源执行任何操作之前创建底层资源。在您的情况下,您需要先执行 create_table,然后再从测试函数中执行 put_item

    【讨论】:

    • 非常感谢。我浪费了很多时间来弄清楚为什么它不起作用。函数内的简单 create_table api 调用解决了该问题。
    猜你喜欢
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多