2012-02-22 16 views
5

Tengo una aplicación web compleja de Django que tiene muchos años-persona de trabajo puestos en ella. Puede necesitar optimización en algún momento. Hay varias operaciones/flujos comunes que podría ejecutar con el cliente de prueba de django (por ejemplo). ¿Hay algún programa que, con una secuencia de comandos python como esa, se ejecutará en ese momento e informará sobre varias métricas de rendimiento específicas de django, como "número de consultas SQL ejecutadas".Suite de pruebas de rendimiento de Django que informará sobre métricas (consultas DB, etc.)

Esencialmente algo así como un banco de pruebas unittest, pero en lugar de informar "0 pruebas fallaron", que daría un informe sobre "consultas de db X se hicieron"

podría escribir esto mismo, que no es exactamente un problema complejo, pero me pregunto si alguien lo hizo antes.

Sé sobre Django Debug Toolbar, que ya puede hacer mucho de esto, pero ¿hay algo más de 'línea de comando' y funciona en muchas páginas, en lugar de una página de actualización. Del mismo modo, obtener las consultas reales es relativamente fácil. ¿Pero alguien ha envuelto todo en un script/biblioteca?

+1

esta es una pregunta similar que explica cómo ver las consultas realizadas por Django. http://stackoverflow.com/questions/7918751/capture-sql-queries-via-django-debug-toolbar – dm03514

Respuesta

2

Puede hacer un antecesor TestCase, algo así como PerformanceTestCase, que utiliza setUp() para iniciar el temporizador y tearDown() para medir el tiempo empleado y las consultas sql, y luego enviarlo donde desee.

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) 

Quizás deba restablecer la conexión, pero creo que se está restableciendo entre las pruebas.

+0

Sí, eso es lo que estaba considerando hacer – Rory

+1

Sería bueno implementar la opción para ejecutar cada prueba varias veces durante becnhmark –

3

Use algo como graphite o opentsdb combinado con algo como statsd para estadísticas sin bloqueo que le permiten medir cualquier cosa, y trazarlas en tiempo real. La mejor parte es que permite a los ingenieros trazar fácilmente lo que necesiten. Enganchado con collectd, puede graficar sus aplicaciones contra el uso de memoria/CPU, consultas de DB.

Aquí está una imagen de muestra de un blog article sobre cómo Etsy está utilizando grafito:

etsy graphite example

+0

+1 para statsd. El módulo pystatsd es realmente fácil de usar. Graphite tiene algunos caprichos a los que tienes que acostumbrarte, no está familiarizado con opentsdb – Endophage

Cuestiones relacionadas