PHP7.0.33所需全部资料已上传,可到资源中下载
不同情况使用的覆盖率统计工具
odp项目
(odp简介:https://blog.csdn.net/weixin_30696427/article/details/99293717)
php引擎类型:
- PHP-FPM:使用PATest || php-code-coverage || xcache
- HHVM:使用php-code-coverage || phpunit
非odp项目
PATest || xcache
各覆盖率工具比较

获取php版本
xstp环境搭建中,默认安装的是php启动方式,未设置环境变量路径,无法通过php -v的方式得到,需要写一个小网页输出出来。(直接在/webroot/scope/init.php里面var_dump(phpinfo())一下就行
PHP7版本php-code-coverage使用
虽然一开始php-code-coverage的引入是为解决hhvm启动方式的覆盖率统计,但并不意味着php-code-coverage只适应于hhvm启动方式,对于php启动方式也是可以使用的,只不过php启动方式的前提是,需要安装xdebug扩展!!!
开启xdebug开关
- 修改${odp_home}/php/etc/php.ini文件,加载xdebug扩展并开启覆盖率统计开关,如下图所示:(此处xstp所搭建php环境的对应路径:/home/work/odp/php/etc/php.ini)
zend_extension = /home/work/odp/php/ext/xdebug.so
xdebug.coverage_enable = 1

- 重启php-fpm:/home/work/odp/php/sbin/php-fpm start
验证是否开启成功,cd /home/work/odp/php/bin && ./php -m | grep xdebug
输出以下内容即为成功。

确认php版本和xdebug版本匹配
查看phpinfo()输出,可以看到php当前全部信息,包括扩展的xdebug版本信息。

php版本为7.0.33时,需要的xdebug版本为2.8.1,我生成了一份,有需要的可以用,对xdebug.so进行替换,地址为 /home/work/odp/php/ext/,替换后重启php-fpm。
需要其他版本的参照下面的网址进行操作:
https://xdebug.org/wizard
复制phpinfo输出的网页全部内容到此网址,可以查看xdebug配置和php是否相符(不相符提示没有作为zend扩展)。如果不相符,需要按照提示修改。
确认工程入口文件,加工具包
需要注意,在模块的主入口需要引入php-code-coverage统计覆盖率,因此,要考虑自己的模块主入口是否只有index.php文件。或者是否是index.php文件。
如果有多个 需要在多个地方加覆盖率统计。
因此,首先确认自己接口的入口都在哪个文件中(此处如有困难可以和相关rd确认),并确认自己想要统计覆盖率的文件夹或者文件。
比如scopeserver模块,请求之后的代码运行路径为:
请求-》index.php-》controller-》action(每个action都走一下ActionBase.php)-》model/page(这里return出去)
因此,入口文件为:
/home/work/odp/webroot/scope/index.php
/home/work/odp/app/scope/library/scope/ActionBase.php
/home/work/odp/app/scope/library/scope/ActionBaseNew.php
/home/work/odp/app/scope/library/scope/ActionBaseAdmin.php
将工具包中的vendor.tar.gz解压至与被测工程入口文件(一般为index.php)同级目录下
(webroot下对应的index.php同级目录)

确认需要统计的文件是否调用了含有exit函数
(1)由于php的覆盖率统计比较特殊 如果源码中含有exit函数 整个源码的覆盖率是统计不到的 (只要代码结构解析到就不能了 不管走没走到)
(2)如果a.php 调用了b.php 如果b.php里也有exit 那么a的覆盖率就也统计不到。除非通过白名单的方式 指定只统计a.php
所以 指定白名单的语句需要 从addDirectory 改成addFileToWhiteList ,是为了限定要扫描的接口文件
修改入口文件(index.php等),引入php-code-coverage工具
在入口文件中修改,引入php-code-coverage,启动和关闭覆盖率收集。
在一个流程里面只开启或者关闭php-code-coverage一次,比如,请求-》index.php-》controller-》action(每个action都走一下ActionBase.php)-》model/page(这里return出去)
修改index或者
因此,入口文件为:

index.php文件可以直接用工具包中的替换,按照下图修改其中的路径即可。
- 从4.0开始,php-code-coverage引入了namespace,因此调用时需要加上命名空间
- 从3.0开始,php-code-coverage强制配置白名单,因此必须生成Filter并配置白名单
按照红框里面的位置新建文件夹coverage,php7也需要!!!

合并cov文件
最后执行命令 合并cov文件
~/odp/php/bin/php mergeCov.php cov-html/ coverage/test.xml coverage/*.cov
此命令一共三个参数,第一个参数是生成文件存放的文件夹名称,第二个是原始文件所在位置/
最终的结果 在 cov-html下的index.html 以及dashboard.html中
踩过的坑
工具选择
首先,需要确认php版本和启动方式,选择对应的覆盖率工具
自动化case运行失败
搭建完系统后,跑自动化case,网页显示正常(josn格式),但是case识别到的元素为int,因此执行失败
问题原因:暂未找到原因。排查了xdebug版本和php版本匹配问题,php版本是7.0.33,xdebug版本是 2.9.0,换掉xdebug成php7压缩包里面的版本后,显示版本不匹配。
解决方式:重新搭建了一套环境进行xdebug工具扩展,运行良好。
服务正常,未能获取到报告
问题原因:
内存不足问题
该问题连带下面的超时问题,都是因为扫描文件过多造成的,即白名单里面包含的文件过多,按照下面的操作把内存和超时时间改大了就行了

vim /home/work/php/etc/php.ini 把128改成256,或者更大 重启php-fpm /home/work/odp/php/sbin/php-fpm restart

超时问题

谁说php7不超时的,这不就来了吗,改
1)修改php超时时间:
修改文件:/home/work/odp/php/etc/php.ini
修改字段:max_execution_time

注意:修改之后要重启php-fpm,执行命令:/home/work/odp/php/sbin/php-fpm start
2)修改nginx超时时间:
主要包括两部分:fastcgi与proxy相关的时间设置
修改文件:/home/work/odp/webserver/conf/nginx.conf
修改fastcgi相关字段:

修改proxy相关字段:

或使用毫秒:

3)修改ral配置:
修改文件:/home/work/odp/conf/ral/ral.conf
修改字段:

改完之后还把生成的文件改成了只有.cov才通过

报告显示格式错误问题
原因是需要在原来的文件夹里面打开index.html文件,因此需要将生成的cov-tml文件夹压缩然后sz出来,在里面打开index.html。而不能只sz出index.html文件。此处还应该注意,打包的时候 tar zcvf test.tar.gz ./test/ 而不是 tar zcvf test.tar.gz ./test/*,否则也会显示不全
合格的报告格式:

错误的报告格式:


本文介绍了在不同情况(如ODP项目和非ODP项目)下使用PHP覆盖率统计工具,包括PATest、php-code-coverage和xcache。详细讲解了PHP7版本下php-code-coverage的配置,如开启xdebug、匹配php和xdebug版本,并分享了在自动化测试过程中遇到的内存不足、超时和报告格式错误等问题及其解决方案。

3365

被折叠的 条评论
为什么被折叠?



