Django性能测试套件,它将报告指标(数据库查询等)

时间:2012-02-22 12:27:13

标签: python django performance django-orm

我有一个复杂的Django Web应用程序,其中包含许多人年的工作。有时可能需要优化。我可以编写几个常见的操作/流程(例如)django的测试客户端。是否有一些程序,如果有这样的python脚本,将运行,并报告各种django特定的性能指标,如'运行的SQL查询数'。

基本上类似于单元测试套件,但不是报告“0测试失败”,而是报告“X db查询已经完成”

我自己可以写这个,这不是一个复杂的问题,但我想知道以前有人做过。

我知道Django Debug Toolbar,它可以做很多这样的事情,但是有更多的“命令行”并且可以在许多页面上工作,而不是一次页面刷新。同样地获得实际查询相对容易。但有没有人把整个事情包裹在脚本/库中?

2 个答案:

答案 0 :(得分:3)

你可以创建一个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)

也许你需要重置连接,但我认为它是在测试之间重置的。

答案 1 :(得分:3)

使用graphiteopentsdb之类的内容与statsd之类的内容结合使用非阻塞统计信息,以便您可以测量任何内容,并实时绘制它们。最好的部分是它可以让您的工程师轻松地绘制他们需要的任何东西。与collectd联系起来,您可以根据内存/ CPU使用情况,数据库查询来绘制应用程序。

以下是blog article关于etsy如何使用石墨的示例图像:

etsy graphite example