2017-02-22 40 views
0

Я тестирую единицы Pythongoogle cloud datastore с использованием py.test в PyCharm. Код работает локально на datastore emulator проблем .The являетсяпроблемы с тестированием и отладочным кодом хранилища данных в python с использованием py.test

  1. Я должен положить несколько time.sleep(num_secs) после кода, который делает put_multi(), put() и т.д., и запустить код под режимом отладки происходит построчно, чтобы проверить результаты так что assert не подведет, так как даже если код работает правильно, результат вернется с emulator с использованием query.fetch() не отражает изменений в datastore. Я понял, что может произойти состояние гонки между и datastore simulator. Отсюда (большая?) Задержка в внесении изменений в силу?
  2. Иногда, даже в режиме отладки и используя emulator, я столкнулся с HTTP Error 404: Service Unavailable. Затем мне нужно включить виртуальные машины Compute Engine, и поэтому код может снова работать, даже отключив виртуальные машины. Это очень странно. Обратите внимание, что это произошло, когда App Engine уже связан с project_id.

Мне интересно, что это лучший способ для отладки и тестирования datastore код в Python.

ответ

2

Для # 1 эмулятор хранилища данных усугубляет эффекты eventual consistency для определенной доли операций. От gcloud beta emulators datastore start:

--consistency = CONSISTENCY; по умолчанию = "0.9"

Fraction of datastore operations that should succeed. 
+0

Параметр 'num_secs' установлен в' time.sleep() 'не согласуется, иногда это может быть 1, 3 или даже 10 и тестирование блока все еще может потерпеть неудачу из-за хранилище данных не отражало изменений, так что самое лучшее значение может быть установлено в флагом '--consistency'? – daiyue

+0

'1'? Но я бы поставил под сомнение обоснованность ваших тестов - что вы тестируете? В реальной жизни код, выполняющий то, что вы делаете в этих тестах, также может потерпеть неудачу. Код должен быть подготовлен, чтобы иметь дело с возможной согласованностью, таким образом, передавая вместе с 0.9 ... –

+0

Мой код использует 'datastore' для реализации некоторых базовых операций/методов базы данных, например. 'add_row',' update_row', 'delete_row' и т. д. в' python'. Тестирование - это просто проверка этих методов, утверждая, что результат соответствует ожидаемому значению. Просто бывает, что эмулятор «хранилища данных» имеет некоторое отставание в отражении результатов этих операций. Следовательно, тестирование может завершиться неудачей, так как он не получит желаемого результата от эмулятора. – daiyue

 Смежные вопросы

  • Нет связанных вопросов^_^