如何在 Python 中对单元测试进行时间分析?
How can I time-profile unittests in Python?
我有一个测试套件和正在测试的代码。如果我将 from memory_profiler import profile
放在适当文件的顶部,用 @profile
修饰我想要分析的函数,并用 python TestThing.py
以标准方式修饰 运行,我会得到很好的结果-逐行结果。
但是 line_profiler 并没有以这种方式打包,我能够用它分析任何东西的唯一方法是 kernprof -l -v thing.py
。如果我在我的单元测试中使用它,none 的测试是 运行(真的不足为奇),并且不会生成任何结果。我如何以类似于 memory_profiler 的方式对我的测试和它们使用的代码进行时间分析?
当然可以 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.
或者,你可以包装一个 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 _
您只需要用要剖析的函数修饰(标记)一个或多个测试,最后会得到逐行报告。
PS:我是这个插件的作者,非常感谢您的反馈。
我有一个测试套件和正在测试的代码。如果我将 from memory_profiler import profile
放在适当文件的顶部,用 @profile
修饰我想要分析的函数,并用 python TestThing.py
以标准方式修饰 运行,我会得到很好的结果-逐行结果。
但是 line_profiler 并没有以这种方式打包,我能够用它分析任何东西的唯一方法是 kernprof -l -v thing.py
。如果我在我的单元测试中使用它,none 的测试是 运行(真的不足为奇),并且不会生成任何结果。我如何以类似于 memory_profiler 的方式对我的测试和它们使用的代码进行时间分析?
当然可以 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.
或者,你可以包装一个 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 _
您只需要用要剖析的函数修饰(标记)一个或多个测试,最后会得到逐行报告。
PS:我是这个插件的作者,非常感谢您的反馈。