我正在使用Google App Engine框架使用Python 2.7构建应用程序。 为了测试我的应用程序,我有几个测试,通过使用nosegae插件的nosetests运行。我使用以下命令运行它们:
nosetests --with-gae --gae-lib-root=/usr/local/google_appengine/ -w . -w */test/ -v
在我的应用程序的模型层中,我需要运行多个数据库操作,这些操作会影响同一事务中的多个实体组。我通过使用db包的run_in_transaction_options函数来完成此操作: https://developers.google.com/appengine/docs/python/datastore/functions#run_in_transaction
不幸的是,在运行我的测试套件时,在尝试运行此类事务的那些测试用例中出现以下错误:
BadRequestError:仅允许多个实体组上的事务 使用High Replication数据存储区
我在nosetests中找不到任何可以启用HRD的标志。
我想知道是否有可能从鼻子测试中运行HRD,如果可以的话,如何设置它?
答案 0 :(得分:16)
我强烈建议您从 db 切换到 ndb ,您可以使用cross group transactions。
要模拟HRD,您可以将此部分添加到测试的setUp
函数中,来自Writing High Replication Datastore tests:
# Create a consistency policy that will simulate the High Replication consistency model.
self.policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(probability=0)
# Initialize the datastore stub with this policy.
self.testbed.init_datastore_v3_stub(consistency_policy=self.policy)