Ошибка при запуске транзакции с несколькими группами объектов через носетиты
Я создаю приложение с Python 2.7 с помощью платформы Google App Engine.
Чтобы протестировать мое приложение, у меня есть несколько тестов, которые запускаются через носетиты, используя плагин для носа. Я запускаю их со следующей командой:
nosetests --with-gae --gae-lib-root=/usr/local/google_appengine/ -w . -w */test/ -v
В слое модели моего приложения мне нужно запустить несколько операций с базой данных, которые влияют на несколько групп сущностей внутри одной транзакции. Я делаю это, используя функцию run_in_transaction_options пакета db:
https://developers.google.com/appengine/docs/python/datastore/functions#run_in_transaction
К сожалению, при запуске моих тестовых наборов я получаю следующую ошибку в тех тестовых сценариях, которые пытаются выполнить такую транзакцию:
BadRequestError: транзакции только для нескольких групп объектов разрешены с хранилищем данных с высокой репликацией
Я не могу найти флаг в nosetests, который позволяет включить HRD.
Мне интересно, возможно ли вообще запустить HRD из nosetests, и если да, то как его можно настроить?
Ответы
Ответ 1
Я бы предложил вам перейти с db на ndb, где вы можете использовать cross group сделки.
Чтобы смоделировать HRD, вы можете добавить эту часть в функцию setUp
ваших тестов, от Написание тестов хранилища данных высокой репликации:
# 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)