像nosetests一样的Python基准测试工具?

时间:2013-10-06 14:35:45

标签: python testing benchmarking nosetests

我想要什么

我想为我的Python项目创建一组基准。我希望看到这些基准测试的性能随着我引入新代码而改变。我想以与测试Python相同的方式执行此操作,方法是运行像nosetests这样的实用程序命令并获得格式良好的读数。

我喜欢nosetests

nosetests工具的工作原理是在我的目录结构中搜索名为test_foo.py的任何函数,并运行其中包含的所有函数test_bar()。它运行所有这些函数并打印出它们是否引发了异常。

我想要搜索所有文件bench_foo.py的类似内容并运行所有包含的函数bench_bar()并报告其运行时。

问题

这样的工具是否存在?

如果没有什么好的起点?某些nose来源是否适用于此?

2 个答案:

答案 0 :(得分:3)

nosetests可以运行任何类型的测试,因此您可以决定它们是否测试功能,输入/输出有效性等,或性能或性能分析(或您想要的任何其他内容)。 The Python Profiler是一个很棒的工具,它随Python安装一起提供。

import unittest
import cProfile

class ProfileTest(unittest.TestCase):
    test_run_profiler:
        cProfile.run('foo(bar)')
        cProfile.run('baz(bar)')

您只需在测试中添加一行,或者为测试用例添加测试用于您要分析的所有调用,并且主要来源不会受到测试代码的污染。

如果您只想要执行时间而不是所有分析信息,timeit是另一个有用的工具。

答案 1 :(得分:3)

wheezy文档就如何使用nose做了一个很好的示例。如果您只想获得时间安排,那么重要的部分是使用选项-q进行安静运行,-s以便不捕获输出(因此您将看到报告的输出)和{{1}只运行'计时'测试。

我建议使用py.test进行测试。要使用-m benchmark运行示例,请将wheezy方法的名称更改为runTest,并仅使用以下内容运行此基准:

test_bench_run

py.test -qs -k test_bench benchmark_hello.py -q与鼻子具有相同的效果,-s选择测试名称的模式。“

如果您将基准测试文件放在与正常测试不同的文件或目录中,那么它们当然更容易选择,不需要特殊名称。