Django: существует ли способ считать SQL-запросы от модульного теста?

Объектно-ориентированная конструкция программного обеспечения Bertrand Meyer

48
задан Manoj Govindan 10 August 2009 в 00:25
поделиться

2 ответа

Если для параметра DEBUG установлено значение True в settings.py (предположительно, в тестовой среде), вы можете подсчитывать запросы, выполненные в вашем проверьте следующее:

from django.db import connection

class DoSomethingTests(django.test.TestCase):
    def test_something_or_other(self):
        num_queries_old = len(connection.queries)
        do_something_in_the_database()
        num_queries_new = len(connection.queries)
        self.assertEqual(n, num_queries_new - num_queries_old)
4
ответ дан 7 November 2019 в 12:16
поделиться

Ответ Винэя правильный, с одним незначительным дополнением.

Среда модульного тестирования Django фактически устанавливает DEBUG в значение False при запуске, поэтому независимо от того, что у вас есть в settings.py , вы не получите ничего, заполненного в connection.queries в ваш модульный тест, если вы снова не включите режим отладки. Документы Django объясняют обоснование этого следующим образом:

Независимо от значения параметра DEBUG в вашем файле конфигурации, все тесты Django запускаются с DEBUG = False. Это необходимо для того, чтобы наблюдаемые выходные данные вашего кода совпадали с тем, что будет видно в производственных настройках.

Если вы уверены, что включение отладки не повлияет на ваши тесты (например, если вы если конкретно проверять попадания в БД, как это звучит так, как вы), решение состоит в том, чтобы временно повторно включить отладку в модульном тесте, а затем вернуть ее обратно:

def test_myself(self):
    from django.conf import settings
    from django.db import connection

    settings.DEBUG = True
    connection.queries = []

    # Test code as normal
    self.assert_(connection.queries)

    settings.DEBUG = False
41
ответ дан 7 November 2019 в 12:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: