2012-02-22 59 views
5

我有一個複雜的Django網絡應用程序,它有許多人年的工作。它可能需要優化。有幾個常見的操作/流程可以用於(比如說)django的測試客戶端。是否有一些程序,如果是這樣的python腳本,那麼將會運行並報告各種django特定的性能指標,如「sql查詢運行次數」。Django性能測試套件,將報告指標(db查詢等)

本質上有點像一個單元測試的測試套件,而不是報告「0測試失敗」,它會報告「X數據庫查詢作了」

我可以寫這個自己,它不完全是一個複雜的問題,但我想知道有沒有人做過。

我知道Django的調試工具欄,它可以做很多的這個了,但有更多的東西「命令行」,並適用於多頁,而不是一個頁面刷新。同樣,獲取實際查詢也相對容易。但是有沒有人把所有東西都包裝在腳本/庫中?

+1

這是一個類似的問題,解釋如何查看由django的進行的查詢。 http://stackoverflow.com/questions/7918751/capture-sql-queries-via-django-debug-toolbar – dm03514 2012-02-22 12:47:44

回答

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) 

也許你需要重置連接,但我認爲它正在測試之間重置。

+0

是的,這就是我一直在考慮過程中becnhmark – Rory 2012-02-23 11:42:19

+1

這將是很好的實施選項,每個測試多次運行+1爲statsd。 pystatsd模塊非常易於使用。石墨有一些你必須習慣的怪癖,不熟悉opentsdb – 2013-08-26 19:09:25

3

使用諸如graphiteopentsdb之類的東西與statsd之類的東西結合使用,可以讓您測量任何內容並實時繪製它們。最好的部分是它可以讓你的工程師輕鬆地繪製他們需要的任何東西。與collectd聯繫在一起,您可以根據內存/ CPU使用情況和數據庫查詢來繪製您的應用程序。

這裏是從blog article上Etsy的如何使用石墨的樣本圖像:

etsy graphite example

+0

做 – Endophage 2012-02-23 06:41:13