使用XDebug调试及单元测试覆盖率分析
php  /  管理员 发布于 6年前   207
一、安装篇(XDebug 和PHPUnit) A:安装XDebug: Xdebug网下载xdebug dll文件,存放到php加载的ext目录下(可以选择重命名,比如php_xdebug.dll,然后打开php.ini文件,添加配置 [xdebug] zend_extension_ts = php_xdebug.dll xdebug.profiler_enable = on xdebug.trace_output_dir = D:\PHPAPP\XDebug xdebug.profiler_output_dir=D:\PHPAPP\XDebug xdebug需要采用zend引擎加载的方式加载,所以用zend_extension_ts或是zend_extension, ts是thread_safety, 目前5.3以上才支持zend_extension加载,<5.3的用zend_extension_ts加载(或者你可以查看phpinfo是否启用了zts),然后重启apache,查看phpinfo,就发现XDebug选项了。 可以看到xdebug.profiler_enable,xdebug.profiler_output_dir,xdebug.trace_output_dir这三个是我们刚刚配置的项,可以安装自己的需要配置剩余项,xdebug.profiler_enable:开启性能分析, 开启这个之后会在xdebug.profiler_output_dir这个目录下生成cachegrind.out.XXX的分析文件,如果指定了xdebug.profiler_output_name这个,则输出来的文件就会是指定的名字.xxx的格式(此方法不适合分析,原因稍后说明), xdebug.trace_options:这个是开启跟踪项, 开启该项之后,会在xdebug.trace_output_dir下生产跟踪文件,注意该项会影响运行速度,因为他需要记录跟踪过程中的一系列事件。 关于XDebug还有一点需要注意的:XDebug是调试的,也就是说配置了XDebug那程序运行的就是一个Debug状态,所以这时候zend_optimizer就不能用了,总不能让程序即调试状态又处于优化状态哈。 更多关于XDebug的,大家去网上发掘吧~~然后一起探讨哈 友情提醒:对于使用集成环境的同学,比如Wamp,它拥有两个PHP.ini配置文件,一个在Apache下,一个在PHP下,Apache下是影响web的,而PHP下是影响命令行的,所以・・・・(感谢俊哥的提醒) B:安装PHPUnit: 关于PHPUnit的安装过程,网上也已经很多了,之前自己为了终于安装成功之后也小写了篇安装篇(http://user.qzone.qq.com/414073277/blog/1292122868),所以这里就不再赘述了,网上的一些安装教程大都能完成安装。就简单说下过程: PHPUnit安装用的是pear的安装方式,所以如果机子没有安装过pear包需要先安装下,一般在php安装的时候在其安装目录下都有一个go-pear.bat文件,直接执行即可完成安装,【这里安装需要注意扩展exif,这个扩展会用到mbstring扩展中的方法,所以mbstring的加载顺序需要再exif之上。】完成pear的安装之后就可以执行pear,查看pear的命令参数, 然后依次执行: pear channel-discover pear.phpunit.de pear install Calldeps phpunit/PHPUnit 需要注意的是现在最新版的phpunit是3.5的・・但是这个只有pear的版本是1.6以上及PHP5.2.X才会安装得到最新版・否则是安装的是第一次的版本(不过不影响使用)。 安装好后就可以执行phpunit查看相关信息: 可以看到有―coverage-html Ccoverage-clover Ccoverage-source这三个选项・就是因为在XDebug安装成功之后才能用,这三个对于导出覆盖率文件可是很重要的选项。 二、PHPUnit 单元测试覆盖率分析 单元测试,最重要的指标之一就是覆盖率。这点虽然Zend Studio上可以很清晰的看出来,可是要导出成一分文档就不太好使了,所以这时候XDebug就又可以帮上忙了,使用的时候也挺简单,调用命令即可: phpunit Ccoverage-html D:\PHPAPP\XDebug\ YouTest 这样就会将生成的覆盖文件(html格式的)放在D:\PHPAPP\XDebug\目录下了, 然后就可以在放置的目录下找到一堆的html文件,运行下index.html 就可以看到这样的图了,英文字母很简单・・意思也明了就不解释了,说明一点: 测试结果说明:一共有5种,上图的例子出现了两种。 . :代表正确 F :代表断言错误 E :代表PHP程序错误或是异常 I : 代表没有实现的方法 S : 代表是跳过的方法 生产的覆盖文件说明: Classes: 只有一个类中的所有方法都被覆盖的时候,这个类才算是被测试完的 Functions/Methods :只有一个方法或是函数的所有有效的语句代码都被执行到了才算这个方法或是函数是被测试完的 Lines: 总行数将会不饱行注释,空行, 标签, 及类及方法的声明。 使用phpunit Ccoverage-clover D:\PHPAPP\XDebug\first.xml YouTest 生产的将会是一个xml格式的文件,这个格式的文件效果不明显,没有html格式的好,这边的效果被我删掉了所以么有效果图可看,第三个覆盖文件的参数我没测试过,大家有兴趣可以试试。 三、程序执行性能分析 XDebug除了有效的帮助分析单元测试覆盖率之外,还可以帮组分析程序执行的瓶颈所在,开启分析的功能: xdebug.profiler_enable = on xdebug.profiler_output_dir=D:\PHPAPP\XDebug 设置上面两项,然后执行你要分析的程序,就会在上面的目录下看到cachegrind.out.XXX的文件,这个文件直接打开就是一些记录,需要借助第三方的cachegrind查看工具才行,一个好用的工具是winCacheGrind,查看起来很方便。 可以看到执行的总时间,及每个函数执行的时间。 因为这个工具在打开文件的时候,只能打开cachegrind.out.*的文件,所以待分析的文件必须是这个名字的,所以为了省去重命名,这也就是为啥我说不建议修改xdebug.profiler_output_name这个选项的原因。 XDebug除了上述方式外,还有自己的一些函数库提供,可以在你程序的代码段任何地方执行,具体的请看http://xdebug.org/docs/all_functions 您可能感兴趣的文章:
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号