如何在Python中对单元测试进行时间分析?

时间:2017-10-02 23:05:23

标签: python unit-testing memory-profiling line-profiler

我有一个测试套件和正在测试的代码。如果我将@profile放在相应文件的顶部,装饰我希望使用python TestThing.py进行分析的函数,并使用kernprof -l -v thing.py的标准方式运行,我会逐行完成结果

但是line_profiler并没有以这种方式进入包中,而且我能用它来分析任何内容的唯一方法是使用{{1}}。如果我在我的单元测试中使用它,则不会运行任何测试(不足为奇,真的如此),并且不会生成任何结果。如何以类似于memory_profiler的方式对我的测试及其使用的代码进行时间分析?

2 个答案:

答案 0 :(得分:0)

当然,你可以import line_profiler

import line_profiler

profiler = line_profiler.LineProfiler()


@profiler
def foo():
    for i in range(10):
        print(i)


foo()

profiler.dump_stats('foo.lprof')

结果存储在foo.lprof。

或者,你可以像decorator一样包装memory_profiler,调用后打印结果:

def profile_and_show(func):
    profiler = line_profiler.LineProfiler(func)
    def _(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        finally:
            lstats = profiler.get_stats()
            line_profiler.show_text(lstats.timings, lstats.unit)
    return _

答案 1 :(得分:0)

请检查pytest-line-profiler

您只需要用要分析的函数装饰(标记)一个或多个测试,并在最后得到逐行报告。

PS:我是这个插件的作者,非常感谢您的反馈。