私はDjangoを効果的に表示するために(現在)使用しているレガシーアプリケーションを持っています。私の作業テストのサンプルがこのように見えます。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テストです。今、私は限界を見つけました、そして、私は周りに回っているように見えません。複数の外部の追加チェックループのクエリが失敗しています。 がと表示されているため、上記のコードを変更すると失敗します。に実行してもに実行されません。
私はCACHE_BACKENDについて読んだが、それは助けていないようでした。他のアイデアは?さらなる調査の後、これは私の外部データベースには全く関係していないようです。 Arghh ..それは月曜日のように感じる!
- これはキャッシュの問題ですか?BTW - Setting CACHE_BACKEND = 'dummy:///'または 'locmem:///'は何もしませんでした。
- この問題の診断方法を教えてください。 2つの小さなひねりが... DanielとSeverioに基づいて -
おかげ
アップデートはここで最終的な答えでした。非常にポインタを感謝!
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)
トランザクション... –
これはこれの一部だったことが判明しました。分割することはできますか? – rh0dium
公平のために、私はダニエルのコメントもアップアップします。 – rewritten