2012-02-22 58 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