[PYTHON] AssertNumQueries est utile si vous souhaitez tester facilement une requête N + 1 avec django

AssertNumQueries est utile si vous souhaitez tester facilement une requête N + 1 avec django

Dans la migration de django 1.7, assertNumQueries renvoie le résultat de la requête capturée en cas d'échec. Il est venu me donner. Ainsi, si vous écrivez le code suivant, vous serez en mesure de comprendre la requête du DB émis dans la partie jointe à.

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)

Par exemple, dans le code ci-dessus, vous pouvez savoir combien de requêtes ont été exécutées dans self._callFUT (). À l'origine, il y a deux cas, mais j'en ai spécifié 3 dans ʻassertNumQueries () `et je l'ai fait échouer exprès.

Résultat d'exécution

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'...

Vous pourrez voir la requête émise.

Si vous souhaitez connaître la requête émise dans une plage spécifique autre que test

Vous pourrez peut-être utiliser django.test.utils.CaptureQueriesContext.

Faites de votre mieux avec le sentiment suivant

from django.test.utils import CaptureQueriesContext
from django.db import connections

with CaptureQueriesContext(connections["default"]):
    do_something()

Wrote by PileMd

référence

Recommended Posts

AssertNumQueries est utile si vous souhaitez tester facilement une requête N + 1 avec django
[OpenCV] Lorsque vous voulez vérifier s'il est lu correctement avec imread
nb_conda_kernels est recommandé si vous souhaitez entrer dans l'environnement virtuel avec jupyter
Lorsque vous souhaitez filtrer avec le framework Django REST
Si vous souhaitez devenir data scientist, commencez par Kaggle
N'écrivez pas Python si vous voulez l'accélérer avec Python
[TensorFlow] Si vous souhaitez exécuter TensorBoard, installez-le avec pip.
Lorsque vous souhaitez l'utiliser tel quel lorsque vous l'utilisez avec lambda memo
Si vous souhaitez inclure awsebcli dans CircleCI, spécifiez la version de python
Si vous souhaitez obtenir plusieurs statistiques avec groupby of pandas v1
Qt n'est-il pas la bibliothèque la plus puissante pour une sortie facile de SVG?
Si vous ne savez pas comment dessiner le graphique que vous voulez avec matplotlib, il est pratique de regarder la galerie
Si vous souhaitez afficher la valeur à l'aide des choix du modèle dans le modèle Django
5 raisons pour lesquelles le traitement est utile pour ceux qui veulent se lancer avec Python
Si vous voulez créer un bot discord avec python, utilisons un framework
Si vous souhaitez créer Word Cloud.
Parfois, vous souhaitez accéder aux informations de vue depuis Serializer avec DRF (Django REST Framework)
Lorsque la variable que vous souhaitez utiliser comme exposant dans matplotlib comporte deux caractères ou plus
Paramètres lorsque vous souhaitez exécuter python-mecab avec travis
Si vous souhaitez utiliser Cython, incluez également python-dev
Liens pour faire ce que vous voulez avec Sublime Text
Choses à faire lorsque vous commencez à développer avec Django
Opération utile lorsque vous souhaitez résoudre tous les problèmes dans plusieurs langages de programmation avec Codewars
Une doublure à frapper si vous oubliez où est aujourd'hui
Je veux initialiser si la valeur est vide (python)
Je souhaite utiliser facilement les fonctions R avec le notebook ipython
[Python] Si vous souhaitez soudainement créer un formulaire de demande
Je veux créer un éditeur de blog avec l'administrateur de django
Utilisez aggdraw lorsque vous voulez dessiner magnifiquement avec un oreiller
Que faire si vous ne pouvez pas trier les fichiers avec des indices
Lorsque vous souhaitez enregistrer les données initiales de Django avec des relations
Si vous souhaitez que vos collègues utilisent la même langue
[Django] Que faire quand il y a de nombreux champs dans le modèle que vous souhaitez créer
[Django] Expliquez soigneusement la voie d'échappement si vous voulez vraiment utiliser la table d'une autre application