通过nosetests运行具有多个实体组的事务时出错

时间:2012-10-02 17:53:48

标签: python google-app-engine nose

我正在使用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,如果可以的话,如何设置它?

1 个答案:

答案 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)