如何将ddbmock与dynamodb-mapper一起使用?
有人能解释一下怎么设置 dynamodb_mapper(还有 boto)来使用 ddbmock,并且用sqlite作为后端,来替代 Amazon DynamoDB 进行功能测试吗?
目前,我尝试了“普通”的boto,并且成功地通过本地启动ddbmock服务器来让它和sqlite一起工作,连接方式如下:
db = connect_boto_network(host='127.0.0.1', port=6543)
然后我用这个db对象来进行所有的数据库操作。不过,dynamodb_mapper是通过这种方式来获取数据库连接的:
conn = ConnectionBorg()
我理解的是,它使用boto的默认方式来连接(真正的)DynamoDB。所以我在想,是否有一种(推荐的?)方法可以让ConnectionBorg()连接到我本地的ddbmock服务器,就像我之前用boto那样?谢谢任何建议。
1 个回答
3
库模式
在库模式下,而不是服务器模式:
import boto
from ddbmock import config
from ddbmock import connect_boto_patch
# switch to sqlite backend
config.STORAGE_ENGINE_NAME = 'sqlite'
# define the database path. defaults to 'dynamo.db'
config.STORAGE_SQLITE_FILE = '/tmp/my_database.sqlite'
# Wire-up boto and ddbmock together
db = connect_boto_patch()
通过boto访问dynamodb服务时,实际上会使用一个叫做ddbmock的东西。
服务器模式
如果你还是想在服务器模式下使用ddbmock,我建议你在测试代码的最开始就修改一下 ConnectionBorg._shared_state['_region']
:
ConnectionBorg._shared_state['_region'] = RegionInfo(name='ddbmock', endpoint="localhost:6543")
据我所知,在这些代码之后,通过任何 ConnectionBorg
实例访问dynamodb时,都会使用ddbmock的入口。
不过,我自己从来没有测试过这个。我会确保联系ddbmock的作者,看看他们能否提供一些更新信息。