Набор для тестирования производительности Django, который будет сообщать о метриках (запросы БД и т. д.)

У меня есть сложное веб-приложение Django, в которое вложено много человеко-лет. Иногда может потребоваться оптимизация. Есть несколько общих операций/потоков, которые я мог бы написать с помощью (скажем) тестового клиента django. Есть ли какая-то программа, которая, учитывая такой скрипт Python, будет запускаться и сообщать о различных конкретных показателях производительности django, таких как «количество выполненных запросов sql».

По сути, это что-то вроде набора тестов unittest, но вместо того, чтобы сообщать «0 тестов неудачно», он будет сообщать «Было выполнено запросов X db».

Я мог бы написать это сам, это не совсем сложная проблема, но мне интересно, кто-нибудь делал это раньше.

Я знаю о панели инструментов отладки Django, которая уже может многое сделать, но есть ли что-то более «командная строка» и работает на многих страницах, а не на обновлении одной страницы. Точно так же получить фактические запросы относительно легко. Но кто-нибудь завернул все это в скрипт/библиотеку?


person Rory    schedule 22.02.2012    source источник
comment
это аналогичный вопрос, объясняющий, как просматривать запросы, сделанные django. stackoverflow.com/questions/7918751 /   -  person dm03514    schedule 22.02.2012


Ответы (2)


Вы можете создать предка TestCase, что-то вроде PerformanceTestCase, который использует setUp() для запуска таймера и tearDown() для измерения затраченного времени и запросов sql, а затем выводит куда угодно.

class PerformanceTestCase(TestCase):
    def setUp(self):
        self.begin_time = datetime.datetime.now()

    def tearDown(self):
        delta = datetime.datetime.now() - self.begin_time
        print 'Time taken', delta.seconds

        from django.db import connection
        print 'SQL queries', len(connection.queries)

Возможно, вам нужно сбросить соединение, но я думаю, что оно сбрасывается между тестами.

person ilvar    schedule 23.02.2012
comment
Да, это то, что я собирался сделать - person Rory; 23.02.2012
comment
Было бы неплохо реализовать возможность запускать каждый тест несколько раз во время бенчмарка. - person Gill Bates; 26.08.2013

Используйте что-то вроде graphite или opensdb в сочетании с чем-то вроде statsd для неблокирующей статистики, которая позволяет вам измерять что-либо и отображать их в режиме реального времени. Самое приятное то, что это позволяет вашим инженерам легко строить все, что им нужно. Подключившись к collectd, вы можете составить график своих приложений в зависимости от использования памяти/процессора, запросов к базе данных.

Вот пример изображения из статьи в блоге. о том, как etsy использует графит:

пример графита etsy

person ashwoods    schedule 23.02.2012
comment
+1 за статистику. С модулем pystatsd действительно легко работать. У Graphite есть некоторые особенности, к которым нужно привыкнуть, не знакомый с opentsdb. - person Endophage; 23.02.2012