使用单元测试来衡量Django性能表现

3

单元测试是衡量应用功能的好方法,但我想知道是否有人将其用于初步性能分析?

我的意思是在自动化测试运行中运行一些性能分析工具,保存性能结果,然后将其与某些任意值进行比较,以便发现任何瓶颈。例如,最近我遇到了一个问题,Django标签库使模板解析时间增加了十倍--如果模板解析是在单元测试中构建的,就可以更早地发现它。

是否有任何模块包括这种测量到标准Django和/或Python设置中?如果没有,您有写自己的任何特定建议或注意事项吗?谢谢!


我们的CI监控测试时间,但是分析可能会导致测试时间显著增加。 - oleg
当运行测试时,拥有一个开关来启用/禁用性能分析似乎是明智的选择。您能分享一下您的解决方案吗? - Berislav Lopac
1个回答

2
我将描述一下我们所尝试的,用于在版本发布之间估计初步性能影响的方法。不确定这是否是最佳方法,但它对我们有效。
我们的Python/Django项目中有许多测试。我们使用nose作为测试运行器。正如您所知,它具有内置的命令行选项--with-xunit,可以将测试结果转储到一个符合xUnit格式的xml文件中(顺便说一下,这是由jenkins CI支持的)。
每次发布时,我们都会进行一次测试运行,nose会为我们生成一个xml文件(并将其存储在代码库中)。以下是其中的一部分:
...
<testcase classname="prj.tests.functional.services.workflow.test_getCases.GetCases" name="test_full_access_ok"
          time="1.775"/>
<testcase classname="prj.tests.functional.services.workflow.test_getCases.GetCases"
          name="test_illegal_assigned_flag" time="0.008"/>
<testcase classname="prj.tests.functional.services.workflow.test_getCases.GetCases" name="test_illegal_comments"
          time="0.049"/>
...

正文:
正如您可能已经注意到的那样,所有测试用例都有一个“time”属性。因此,我们所做的就是通过名称将测试用例执行时间与之前和当前的发布进行比较(基本上是比较两个XML文件)。
希望这可以帮助您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接