Я нахожусь в процессе миграции приложения, работающего в Google App Engine Python 2.7 Стандартная среда от встроенной NDB до библиотеки в более новую библиотеку cloud-ndb (до перехода на Python 3 ). Новая библиотека требует контекста для всех вызовов NDB, и после некоторых исследований и разговоров с другими в списке электронной почты устройства я запустил подход, который вводит контекст в unittest setUp()
и tearDown()
. Все мои тестовые файлы получены из базового тестового класса shim.
#speed_test.py
from test._base_test import MyTestCase
class SpeedTest(MyTestCase):
def test_simple(self):
string = 'string'
self.assertEqual('string', string)
#_base_test.py
import requests
import unittest
import webapp2
from google.cloud import ndb
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__()
def tearDown(self):
self.ndb_context.__exit__(None, None, None)
mock.patch.stopall()
Проблема в том, что такой способ ввода контекста добавляет чуть менее 2 секунд к каждому из моих тестов. Это слегка раздражает мои тестовые файлы с дюжиной или меньшим количеством тестов, но наш полный набор тестов имеет 681 тест, и эта скорость просто неосуществима.
Приведенный выше простой тест скорости должен занимать долю секунды, чтобы завершено, но оно последовательно выполняется за 1,7 с или более. Если я закомментирую self.ndb_context = ndb.Client().context()
и self.ndb_context.__enter__()
, он падает примерно до 0,003 с.
Такое чувство, что менеджер контекста работает долго, но я не уверен, как дальше отлаживать производительность в этот момент. Я рад принять предложения о лучшем подходе или средствах для отладки того, что здесь происходит, чтобы я мог подать проблему с библиотекой, если это необходимо. Спасибо!