【Linux】php7.2.8 + xdebug + composer + php代码覆盖率 + jenkins配置 (实操记录,亲测可用)
【一、linux安装php 7.2.8】
1、wget http://nginx.org/download/nginx-1.9.9.tar.gz # nginx可不安装
3、解压
4、进入php的解压目录(检查)
./configure --prefix=/usr/local/php7.2 --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-xmlrpc --with-xsl --with-zlib --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-zip
5、make && make install
6、cp php.ini-production /usr/local/php7.2/etc/php.ini
7、cp /usr/local/php7.2/etc/php-fpm.conf.default php-fpm.conf
8、cd /usr/local/php7.2/etc/php-fpm.d mv www.conf.default www.conf
9、/usr/local/php/sbin/php-fpm -t test is successful。(如果失败,注意权限)
10、ps -ef |grep php-fpm 有进程说明启动成功
11、加环境变量
PATH=$PATH:/usr/local/php7/bin
export PATH
12、验证 php -v
【二、安装xdebug】
1、git clone git://github.com/xdebug/xdebug.git
2、cd debug
3、find / -name phpize
4、/usr/bin/phpize. (根据上一步find的结果,灵活变通)
5、find / -name php-config
6、./configure --enable-xdebug --with-php-config=/usr/local/php/bin/php-config
7、make & make install
8、/usr/local/php7.2/lib/php.ini 文件新增“zend_extension=/usr/local/php7.2/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so ” 或 “extension=xdebug.so”
(有坑:网上绝大多数讲用的php.ini文件,都说的是etc/php.ini,可这里实际上用的是lib/php.ini文件,etc下改了没用)
9、pkill php-fpm;/usr/local/php7.2/sbin/php-fpm -R 重启php-fpm
10、php -v 检查是否安装成功
【三、安装composer】
1、curl -sS https://getcomposer.org/installer | php
2、php composer.phar --version
Composer version 1.6.5 2018-05-04 11:44:59
3、mv composer.phar /usr/bin/composer
4、chmod 777 /use/bin/composer
【四、安装phpcov 和 phpunit】
1、不能用root用户安装,需要用其他用户(adducer wl11)
2、在一个公共地方(主要考虑权限,要wl11和root都有权限)创建一个php_cov文件夹
3、php_cov目录下创建一个composer.json文件,内容如下 (phpcov的* 会自动匹配合适的版本,不用特殊指定,phpunit须与当前的php版本对应上,对应关系如下)
{
"name": "root/php-code-coverage",
"require-dev": {
"phpunit/phpunit":"6.5.0",
"phpunit/phpcov": "*"
}
}
4、直接在当前目录执行 composer install
5、安装成功,会在当前目录生成一个vendor文件夹,/vendor/bin下有两个相应的软连接
6、php版本需要和phpunit版本对应上,对应关系如下
【五、至此安装成功,使用方法】
1、准备prepend.php文件(建议在 步骤4.2创建的那个文件夹下 php_cov,关注英文标点)
<?php
require_once '/www/php_cov/vendor/autoload.php'; // 根据prepend.php文件的位置不同,配置不同 需要引入【步骤4】生成的vendor/autoload.php文件
$filter = new \SebastianBergmann\CodeCoverage\Filter();
$filter->addFileToWhitelist('/www/php_cov/userinfo.php'); // 需要统计的文件或目录的覆盖率 [addFileToWhitelist | addDirectoryToWhitelist] 重点关注
$coverage = new \SebastianBergmann\CodeCoverage\CodeCoverage(null, $filter);
$coverage->start('<Site coverage>');#开始统计
register_shutdown_function('\shutdownWithCoverage',$coverage);#注册关闭方法
function shutdownWithCoverage($coverage){
$coverage->stop();#停止统计
$cov = '<?php return unserialize(' . var_export(serialize($coverage), true) . ');'; #获取覆盖结果,注意使用了反序列
化
file_put_contents(dirname(__FILE__).'/cov/site.' . date('U') .'.'.uniqid(). '.cov', $cov); # 存放统计出来的cov文件 需要在prepend.php 同级目录创建cov文件夹,文件夹权限开到最大 以防域名访问时写入文件失败。chmod 777 -R cov
}
2、需要覆盖的php代码(实际项目的入口文件,可根据项目nginx的server配置找到项目的入口文件),此处用一个userinfo.php替代项目入口文件
userinfo.php
<?php
include_once("/www/php_cov/prepend.php"); //需要把上一步准备的prepend.php文件引进来
$userinfo = array(
'username'=>'jason',
'password'=>'123456',
);
$result = array(
'code'=>10000,
'message'=>"success",
'data'=>$userinfo,
);
echo json_encode($result);
3、执行php userinfo.php
4、php_cov文件夹下查看生成的统计cov文件

5、生成报告(先进入到vendor同级目录)
./vendor/bin/phpcov merge --clover cov/coverage.xml cov/ -vvv # 在cov目录下生成xml报告
./vendor/bin/phpcov merge --html="cov/coverage_html" cov/ -vvv # 在cov目录下生成html报告
6、最终报告放在cov下
【六、jenkins配置】
1、执行shell中配置:
cur_path=`pwd` # jenkins 的工作目录,这个目录在创建节点的时候指定的。需要把报告放到jenkins的工作目录,才能展示
echo ${cur_path}
cd /www/php_cov/ # 必须是vendor文件夹的上一级目录。
./vendor/bin/phpcov merge --clover ${cur_path}/reports/coverage.xml cov/ -vvv
./vendor/bin/phpcov merge --html="${cur_path}/reports/coverage_html" cov/ -vvv
注意:根据项目实际需求配置,一般的做法是
1、在执行自动化之前,删除site文件:find /www/php_cov/cov/ -name "site*" | xargs rm -rf
2、跑自动化用例
3、生成覆盖率报告(如上配置)
2、增加post-build Actions,因为生成了两个类型的报告,一个xml,一个html,所以报告有两个。
3、jenkins生成的报告截图
浙公网安备 33010602011771号