У меня есть устаревшее приложение, которое (в настоящее время) использует Django для эффективного отображения данных.Пример одного из моих рабочих тестов выглядит следующим образом.
def test_add_property_value(self):
"""Test set / get a value"""
# This will do some external process which occcurs to the db.
pm = Pm(mysql_db='test_bugs')
tree = pm.add_release_tree()
prop_type, pmvalue = ("string", "Funny Business")
pmproperty = "%s_%s_basic" % (tree[0].name, prop_type)
pm.add_property_definition(pmproperty, prop_type=prop_type)
pm.add_propval(pmproperty, value=pmvalue, project=tree[0].name)
# Now use Django to pull the value back out..
project = Project.objects.get(name=tree[0].name)
property = project.get_property(pmproperty) # Custom query using sql.raw
self.assertEqual(pmvalue, property.value)
Как видите, это базовое A / B-тестирование.Теперь я нашел ограничения и не могу обойтись в том, что несколько внешних запросов add - check - loop терпят неудачу .Изменение вышеуказанного кода завершается неудачно, потому что кажется запрос не может даже выполнить .
def test_add_property_value(self):
"""Test set / get a value"""
# This will do some external process which occcurs to the db.
pm = Pm(mysql_db='test_bugs', p4_port = settings.ICMSERVER_TEST_PORT)
tree = pm.add_release_tree()
prop_type, pmvalue = ("string", "Funny Business")
pmproperty = "%s_%s_basic" % (tree[1].name, prop_type)
pm.add_property_definition(pmproperty, prop_type=prop_type)
pm.add_propval(pmproperty, value=pmvalue, project=tree[1].name)
# Now use Django to pull the value back out..
project = Project.objects.get(name=tree[1].name)
property = project.get_property(pmproperty)
self.assertEqual(pmvalue, property.value)
# ONLY CHANGE WAS TO ADD THIS..
# This will do some external process which occcurs to the db.
pmproperty = "%s_%s_basic_two" % (tree[1].name, prop_type)
pm.add_property_definition(pmproperty, prop_type=prop_type)
pm.add_propval(pmproperty, value=pmvalue, project=tree[1].name)
# Now use Django to pull the value back out..
project = Project.objects.get(name=tree[1].name)
property = project.get_property(pmproperty)
self.assertEqual(pmvalue, property.value)
Я читал о CACHE_BACKEND это не помогло.Любые другие идеи?После дальнейшего исследования это, похоже, вообще не связано с моим внешним БД.Аааа ... Это похоже на понедельник!
- Это проблема с кешем? Кстати, установка CACHE_BACKEND = 'dummy: ///' или 'locmem: ///' ничего не сделала.* Как мне лучше диагностировать эту проблему ??
Спасибо
Обновление
Здесь был окончательный ответ - 2 небольших твика ..Основано на Данииле и Северио .Очень ценили указатели !!
class PropertyTests(TransactionTestCase): #CHANGE1
def test_add_property_value(self):
"""Test set / get a value"""
import logging
l = logging.getLogger('django.db.backends')
l.setLevel(logging.DEBUG)
l.addHandler(logging.StreamHandler())
# This will do some external process which occcurs to the db.
pm = Pm(mysql_db='test_bugs', p4_port = settings.ICMSERVER_TEST_PORT)
tree = pm.add_release_tree()
prop_type, pmvalue = ("string", "Funny Business")
pmproperty = "%s_%s_basic" % (tree[1].name, prop_type)
pm.add_property_definition(pmproperty, prop_type=prop_type)
pm.add_propval(pmproperty, value=pmvalue, project=tree[1].name)
# Now use Django to pull the value back out..
project = Project.objects.get(name=tree[1].name)
property = project.get_property(pmproperty)
self.assertEqual(pmvalue, property.value)
# This will do some external process which occcurs to the db.
pmproperty = "%s_%s_basic_two" % (tree[1].name, prop_type)
pm.add_property_definition(pmproperty, prop_type=prop_type)
pm.add_propval(pmproperty, value=pmvalue, project=tree[1].name)
# Now use Django to pull the value back out..
Project.objects.update() #CHANGE2
project = Project.objects.get(name=tree[1].name)
property = project.get_property(pmproperty)
self.assertEqual(pmvalue, property.value)