You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pytest Stub测试DynamoDB put_item遇类型错误及参数疑问

解决Pytest+Stub测试DynamoDB put_item的两个问题

咱们先搞定你遇到的TypeError,再聊聊add_response里expected_parameters的配置方法。

一、修复TypeError: Unsupported type "<class 'function'>"

这个错误的根源很明确:你在item_fake fixture里直接引用了aws_request_id_fake这个fixture函数对象,而不是获取它返回的字符串值。Pytest的fixture需要通过参数注入的方式来使用,不能直接把fixture函数名当值用。

修改后的Fixture代码

import pytest

@pytest.fixture(scope='module')
def aws_request_id_fake():
    return 'xyz789'

# 补充messageid_fake的示例(假设你之前是类似定义)
@pytest.fixture(scope='module')
def messageid_fake():
    return 'msg-abc123'

@pytest.fixture(scope='module')
def item_fake(aws_request_id_fake, messageid_fake):
    # 通过参数注入获取两个fixture的返回值,而非直接引用函数
    return {
        'aws_request_id': aws_request_id_fake,
        'messageId': messageid_fake
    }

这样修改后,Pytest会自动把aws_request_id_fake和messageid_fake的返回值注入到item_fake中,赋值给字典的对应键,就不会再出现函数类型的错误了。

二、正确配置add_response的expected_parameters参数

这个参数的作用是校验实际调用DynamoDB put_item时传入的参数是否和预期一致,它的结构必须和Boto3调用put_item的参数完全匹配,核心注意点是参数名的驼峰命名规则(DynamoDB的API参数都是驼峰,不是下划线分隔)。

修正后的expected_params

expected_params = {
    'Item': item_fake,
    'ConditionExpression': condition_expression_fake,  # 去掉下划线,采用驼峰命名
    'ReturnValues': return_values_fake,
    'ReturnConsumedCapacity': return_consumed_capacity_fake,
    'ReturnItemCollectionMetrics': return_item_metrics_fake  # 首字母大写,驼峰格式
}

配置的关键规则

  1. 严格匹配Boto3参数名:要和Boto3中dynamodb.Table.put_item方法的参数名完全一致(比如ConditionExpression而非Condition_Expression,ReturnItemCollectionMetrics而非小写的return_item_collection_metrics)。
  2. 按需校验参数:如果某些参数是可选的,你可以只列出你关心的参数,Stub会忽略未列出的可选参数;但如果实际调用时传入了不在expected_params中的参数,Stub会抛出参数不匹配的错误。
  3. Item的格式匹配:如果你用的是DynamoDB Resource(不是Client),Item参数直接用原生Python字典即可(比如{'aws_request_id': 'xyz789'}),不需要像Client那样加类型标识(比如{'aws_request_id': {'S': 'xyz789'}})。

额外注意点

你调用put_item_dynamodb_table时传的是item=[item_fake],但DynamoDB的put_item的Item参数是单个字典,不是列表。如果你的put_item_dynamodb_table函数内部没有把列表转成单个字典,这里会导致参数不匹配,建议检查这个函数的实现逻辑。

内容的提问来源于stack exchange,提问作者sandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:42:35