性能分析与代码覆盖率测试

性能分析

对代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 profile,cProfile 与 hotshot 等。其中 Profiler 是 python 自带的一组程序,能够描述程序运行时候的性能,并提供各种统计帮助用户定位程序的性能瓶颈。Python 标准模块提供三种 profilers:cProfile,profile 以及 hotshot。

cprofile 的使用非常简单,只需要在使用之前进行 import 即可。具体实例如下:

import cProfile

def CountLetters(file_name,n,stopName,verbName):
    //内容不足为外人道也 哈哈可以自己随便写
cProfile.run("CountLetters('../gone_with_the_wind.txt',10, None, None)")

程序的运行结果如下:

图 1. 性能分析结果

上图有个字打错啦 调用不是待用

参数官方解释:

其中输出每列的具体解释如下:

●ncalls:表示函数调用的次数;

●tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;

●percall:(第一个 percall)等于 tottime/ncalls;

●cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;

●percall:(第二个 percall)即函数运行一次的平均时间,等于 cumtime/ncalls;

●filename:lineno(function):每个函数调用的具体信息;

如果需要将输出以日志的形式保存,只需要在调用的时候加入另外一个参数。如

profile.run("CountLetters('../gone_with_the_wind.txt',10, None, None)","testprof")

接着说

代码覆盖率测试

coverage.py是一个用来统计python程序代码覆盖率的工具。它使用起来非常简单,并且支持最终生成界面友好的html报告。在最新版本中,还提供了分支覆盖的功能。

通过pip安装

pip install coverage

Coverage Command Line 

命令行使用说明: 详见:http://nedbatchelder.com/code/coverage/cmd.html

最关键核心的几个参数使用如下:

1. run

执行代码覆盖率统计,只需要通过coverage的run参数执行被统计代码即可。

$ coverage run Count.py arg1 arg2

跑完后,会自动生成一个覆盖率统计结果文件(data file):.coverage。arg1,arg2是啥可以自己查那个链接,因为我还没看。

2. report

有了覆盖率统计结果文件,只需要再运行report参数,就可以在命令里看到统计的结果。

$ coverage report


Name       Stmts   Miss  Cover
------------------------------
Count.py     260    212    18%

3. html

最帅最酷的功能了,直接生成html的测试报告。

$ coverage html -d covhtml

生成的报告非常酷,直接关联代码,高亮显示覆盖和未覆盖的代码,支持排序。可以在这个地址预览一下:

file:///F:/ASE/project28_10/basic/covhtml/index.html

file:///F:/ASE/project28_10/basic/covhtml/Count_py.html

效果如下:

算了不放图啦 自己点开链接

发现链接点不开,还是放图吧

其中红色的就是未覆盖的。

也可以直接点击下图中的

注:coverage run test.py命令运行的文件,会统计项目中包括测试文件本身在内的所有文件,run参数的子参数—source可以指定要统计的文件:$ coverage run --source=totest.py test.py 可以只统计totest.py文件。

猜你喜欢

转载自blog.csdn.net/qq_36097393/article/details/83514059