Эмулятор хранилища данных Google Cloud отклоняет запросы сброса на основе HTTP на полпути через набор тестов - PullRequest
0 голосов
/ 05 марта 2020

Я работаю над переносом приложения Python 2 App Engine из NDB в облачную NDB в качестве предвестника перехода на Python 3. В соответствии с другими рекомендациями я заменял использование Testbed на локальное хранилище данных Эмулятор, и по большей части это работает. Я сталкиваюсь с ошибкой, которая начинает появляться примерно на полпути через 580 модульных тестов в нашем наборе тестов. Может показаться, что сообщение об ошибке указывает на то, что эмулятор не может справиться с запросами быстрого сброса, поступающими от метода setUp () теста.

Все мои тесты происходят от базового класса со следующим setUp () метод:

NDB_CLIENT = ndb.Client(project='myproject')
NDB_CLIENT.host = 'localhost:8089'
NDB_CLIENT.secure = False

class MyTestCase(unittest.TestCase):
 def setUp(self):
 self.testapp = webapp2.WSGIApplication([])
 # clear datastore
 requests.post('http://localhost:8089/reset')
 self.ndb_context = NDB_CLIENT.context()
 self.ndb_context.__enter__()

Я запускаю облачное хранилище данных в окне терминала с помощью следующей команды:

$ gcloud beta emulators datastore start --no-store-on-disk --consistency=1.0 --host-port=localhost:8089

Примерно в середине набора тестов тесты начинаются с ошибкой эта ошибка:

ERROR: test_a_thing (my_test.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test/my_test.py", line 11, in setUp
  File "/Users/myuser/Projects/MyProject/test/_base_test.py", line 29, in setUp
  File "/Users/myuser/Projects/MyProject/lib/requests/api.py", line 119, in post
  File "/Users/myuser/Projects/MyProject/lib/requests/api.py", line 61, in request
  File "/Users/myuser/Projects/MyProject/lib/requests/sessions.py", line 530, in request
  File "/Users/myuser/Projects/MyProject/lib/requests/sessions.py", line 643, in send
  File "/Users/myuser/Projects/MyProject/lib/requests/adapters.py", line 516, in send
ConnectionError: HTTPConnectionPool(host='localhost', port=8089): Max retries exceeded with url: /reset (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x113715610>: Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known',))

Если я запускаю какой-либо из этих тестовых файлов самостоятельно, они все проходят. Я исследовал и даже удалил тестовые файлы, работающие примерно при появлении ошибок, но это тоже не помогло Мне неизвестен какой-либо другой способ сброса хранилища данных между тестами, и выход эмулятора хранилища данных в терминале вообще не указывает на наличие проблемы, поэтому я не знаю, как ее устранить.

...