2012-02-22 29 views
5

Tôi có một ứng dụng web Django phức tạp có nhiều năm công việc đưa vào đó. Nó có thể cần tối ưu hóa đôi khi. Có một số hoạt động phổ biến/dòng mà tôi có thể kịch bản với (nói) khách hàng thử nghiệm của django. Có một số chương trình đó, đưa ra một kịch bản python như thế, sẽ chạy sau đó, và báo cáo về số liệu hiệu suất cụ thể khác nhau django, như 'số lượng truy vấn sql chạy'.Bộ thử nghiệm hiệu suất Django sẽ báo cáo về số liệu (truy vấn db, v.v.)

Về cơ bản một cái gì đó giống như một bộ kiểm tra unittest, nhưng thay vì báo cáo "0 thử nghiệm thất bại", nó sẽ thông báo "X truy vấn db đã được thực hiện"

tôi có thể viết này bản thân mình, nó không hẳn là một vấn đề phức tạp, nhưng tôi tự hỏi có ai đã làm nó trước đây không.

Tôi biết về Thanh công cụ gỡ lỗi Django, có thể thực hiện rất nhiều điều này, nhưng có thêm 'dòng lệnh' và hoạt động trên nhiều trang, thay vì làm mới một trang. Tương tự như vậy nhận được các truy vấn thực tế là tương đối dễ dàng. Nhưng có ai đã bọc toàn bộ nội dung trong một kịch bản/thư viện không?

+1

đây là một câu hỏi tương tự giải thích làm thế nào để xem các truy vấn được thực hiện bởi django. http://stackoverflow.com/questions/7918751/capture-sql-queries-via-django-debug-toolbar – dm03514

Trả lời

2

Bạn có thể tạo tổ tiên TestCase, như PerformanceTestCase, sử dụng setUp() để bắt đầu hẹn giờ và tearDown() để đo thời gian thực hiện và truy vấn sql, rồi xuất ở bất cứ nơi nào bạn muốn.

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) 

Có thể bạn cần phải đặt lại kết nối, nhưng tôi nghĩ rằng nó đang được đặt lại giữa các lần kiểm tra.

+0

Vâng đó là những gì tôi đã cân nhắc thực hiện – Rory

+1

Sẽ thật tuyệt nếu thực hiện tùy chọn chạy từng thử nghiệm nhiều lần trong becnhmark –

3

Sử dụng một cái gì đó như graphite hoặc opentsdb kết hợp với một cái gì đó như statsd cho số liệu thống kê không chặn cho phép bạn đo bất cứ điều gì và vẽ chúng trong thời gian thực. Phần tốt nhất là nó cho phép các kỹ sư của bạn dễ dàng âm mưu bất cứ điều gì họ cần. Kết nối với collectd, bạn có thể vẽ đồ thị ứng dụng của mình dựa trên việc sử dụng bộ nhớ/CPU, truy vấn db.

Đây là một hình ảnh mẫu từ một blog article về cách Etsy đang sử dụng graphite:

etsy graphite example

+0

1 cho số liệu thống kêd. Mô-đun pystatsd thực sự dễ làm việc. Graphite có một số quirks bạn phải làm quen, không quen thuộc với opentsdb – Endophage

Các vấn đề liên quan