2012-02-22 5 views
5

Mam złożoną aplikację internetową Django, która ma wiele person-lat pracy włożonej w to. Może kiedyś potrzebować optymalizacji. Istnieje kilka typowych operacji/przepływów, które mógłbym napisać za pomocą klienta testowego (powiedzmy) django. Czy istnieje program, który, biorąc pod uwagę taki skrypt Pythona, będzie wtedy działał i raportuje różne dane wydajnościowe Django, takie jak "liczba zapytań sql uruchomionych".Zestaw testów wydajności Django, który będzie raportować dane (zapytania db itp.)

Zasadniczo coś w rodzaju zestawu testowego unittest, ale zamiast raportowania „0 testów nie powiodło się”, że to zgłosić „X zapytań db zostały wykonane”

mogę napisać to sobie, to nie jest dokładnie to złożony problem, ale zastanawiam się, czy ktoś wcześniej to zrobił.

Wiem o Django Debug Toolbar, który może już wiele z tego zrobić, ale jest tam coś więcej "linii komend" i działa na wielu stronach, zamiast odświeżania strony. Podobnie uzyskanie rzeczywistych zapytań jest stosunkowo łatwe. Ale czy ktokolwiek opakował całość w skrypt/bibliotekę?

+1

to podobne pytanie wyjaśniając jak przeglądać zapytań dokonanych przez Django. http://stackoverflow.com/questions/7918751/capture-sql-queries-via-django-debug-toolbar – dm03514

Odpowiedz

2

Możesz stworzyć przodka TestCase, coś w stylu PerformanceTestCase, który używa metody setUp(), aby uruchomić stoper i tearDown(), aby zmierzyć czas wykonania i kwerendy sql, a następnie wyprowadzić wynik tam, gdzie chcesz.

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) 

Może będziesz musiał zresetować połączenie, ale myślę, że jest resetowany między testami.

+0

Tak, to było to, co rozważałem, robiąc – Rory

+1

Byłoby miło wdrożyć opcję uruchomienia każdego testu wiele razy podczas becnhmark –

3

Użyj czegoś podobnego do graphite lub opentsdb w połączeniu z czymś takim, jak statsd dla niezablokowanych statystyk, które pozwalają mierzyć cokolwiek i kreślą je w czasie rzeczywistym. Najlepsze jest to, że pozwala twoim inżynierom łatwo knuć, czego potrzebują. Zaimplementowane w collectd, możesz wykreślić aplikacje do użycia pamięci/procesora, zapytań db.

Oto przykładowy obraz z blog article na jak Etsy korzysta grafit:

etsy graphite example

+0

+1 dla statystyk. Moduł pystatsd jest naprawdę łatwy w obsłudze. Grafit ma pewne dziwactwa, do których musisz się przyzwyczaić, nie zna opentsdb – Endophage

Powiązane problemy