Bei der Migration von django 1.7 gibt assertNumQueries das Ergebnis der erfassten Abfrage aus, wenn dies fehlschlägt. Es kam, um mir zu geben. Wenn Sie also den folgenden Code schreiben, können Sie die Abfrage der Datenbank verstehen, die in dem mit beiliegenden Teil ausgegeben wurde.
from django.test import TestCase
class Test(TestCase):
def _callFUT(self):
Model(name="foo").save()
return Model.objects.count()
def test_it(self):
with self.assertNumQueries(3):
self.assertEqual(self._callFUT(), 1)
Im obigen Code können Sie beispielsweise herausfinden, wie viele Abfragen in "self._callFUT ()" ausgeführt wurden. Ursprünglich gibt es zwei Fälle, aber ich habe 3 für "assertNumQueries ()" angegeben und es absichtlich zum Scheitern gebracht.
Ausführungsergebnis
Creating test database for alias 'default'...
F
======================================================================
FAIL: test_it (__main__.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "qr_34141zLt.py", line 46, in test_it
self.assertEqual(self._callFUT(), 1)
File "/home/podhmo/vboxshare/venvs/django/lib/python3.3/site-packages/django/test/testcases.py", line 90, in __exit__
query['sql'] for query in self.captured_queries
AssertionError: 2 != 3 : 2 queries executed, 3 expected
Captured queries were:
QUERY = 'INSERT INTO "model" ("name") VALUES (%s)' - PARAMS = ('foo',)
QUERY = 'SELECT COUNT(*) AS "__count" FROM "model"' - PARAMS = ()
----------------------------------------------------------------------
Ran 1 test in 0.005s
FAILED (failures=1)
Destroying test database for alias 'default'...
Sie können die ausgegebene Abfrage sehen.
Möglicherweise können Sie django.test.utils.CaptureQueriesContext
verwenden.
Bitte geben Sie Ihr Bestes mit dem folgenden Gefühl
from django.test.utils import CaptureQueriesContext
from django.db import connections
with CaptureQueriesContext(connections["default"]):
do_something()
Wrote by PileMd