python - Python Moto 库出现“找不到请求的资源”错误

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

我正在 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(
        '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1c68796f685c64327f7371" rel="noreferrer noopener nofollow">[email protected]</a>',
        '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(
    '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f185948285b189df929e9c" rel="noreferrer noopener nofollow">[email protected]</a>',
    'John Appleseed'
    )

print(x)

当我运行此代码时,我收到 200 响应代码,并且我还可以看到 DynamoDB 表中的条目。这里可能出现什么问题?

软件包版本:

  • Python:3.7.0
  • boto3:1.7.84
  • 摩托:1.3.6

最佳答案

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

关于python - Python Moto 库出现“找不到请求的资源”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52807403/

相关文章:

python - 如何使用附加信息重新引发异常?

amazon-dynamodb - DynamoDB : Filter Expression can only contain non-primary key attributes

python - flask 中的连接错误中止

python - 使用 OpenCV Python 使用模糊水平集进行视网膜流体分割

python - 删除带有外国字母号码的列表

python - 列表过滤索引

python - 如何在 pandas to_csv() 中设置自定义分隔符?

amazon-s3 - 如何在设置 DataPipeline 以将 DynamoDB 数据导出到 S3 时计算 'DynamoDB read throughput ratio'

python - 在 Python Boto 的 DynamoDB API 中,Layer1 和 Layer2 之间有什么区别?

Python:类层次结构中的自定义深度复制