【一、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 /use/bin/composer
4、chmod 777 /use/bin/composer
 
 
【四、安装phpcov 和 phpunit】 
1、不能用root用户安装,需要用其他用户(adducer wl11)
2、在一个公共地方(主要考虑权限,要wl11和root都有权限)创建一个php_cov文件夹
3、创建一个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
require_once './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->log = '/www/data/phpcoverage/dsp_admin/log.sqlite’;        //暂时没用,待确定。
 
 
$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、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生成的报告截图
  

 

【Linux】php7.2.8 + xdebug + composer + php代码覆盖率 + jenkins配置 (实操记录,亲测可用)的更多相关文章

  1. linux无界面模式安装selenium+chrome+chromedriver并成功完成脚本(亲测可用)

    环境:docker centos 7.4 能通外网 写好的selenium脚本. 具体步骤: 一:安装selenium  这是最简单的 直接利用 pip3 install selenium 二 安装c ...

  2. Java代码中执行Linux命令,亲测可用

    前提需要知道怎么在linux怎么新建java文件和怎么编译,否则请先学其他知识!! import java.io.*;public class Test{ public static void mai ...

  3. windows下的java项目打jar分别编写在windows与linux下运行的脚本( 本人亲测可用!)

    前言: 最近公司做了一个工具,要将这个工具打包成一个可运行的程序,编写start.bat和start.sh在windows和linux下都可以运行. 在网上找了很多资料,最后终于找到一个可靠的资料,记 ...

  4. 在Jenkins远程链接Linux系统,然后执行shell命令-亲测可用【转】

    版权声明:本文为博主原创文章,未经博主允许不得转载.部分为转载其他人的,如要使用,也请提前通知一声 https://blog.csdn.net/a136332462/article/details/7 ...

  5. Linux下nginx反向代理服务器安装与配置实操

    1.我们只要实现访问nginx服务器能跳转到不同的服务器即可,我本地测试是这样的, 在nginx服务器里面搭建了2个tomcat,2个tomcat端口分别是8080和8081,当我输入我nginx服务 ...

  6. Comet4J推技术在SSHE三大框架中应用-linux下亲测可用

    Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询.长连接.自动选择三种工作模式. 下载地址 co ...

  7. Linux下通过crontab及expect实现自动化处理 --亲测可用

    #!/usr/bin/expect -fspawn /home/scripts/bckup.shexpect "Enter password: "  send "WWQQ ...

  8. Linux 下 将使用Python-Django开发的web应用布置到服务器上(亲测有效)

    写在前面: Django是一个卓越的新一代Web框架,相信使用Python的人对此并不陌生,但将我们完成的web应用布置到到服务器上并不是一件容易的事情. Django详细的教程可以参考http:// ...

  9. linux解压缩文件名乱码问题 亲测可用

    unar 这个工具会自动检测文件的编码,也可以通过-e来指定:unar file.zip 即可解压出中文文件.

随机推荐

  1. MiniUI学习笔记1-表单控件

    1.输入框样式 class="mini-textbox" //普通输入框 class="mini-password" //密码输入框 class="m ...

  2. Codeforces Round #426 (Div. 2) - A

    题目链接:http://codeforces.com/contest/834/problem/A 题意:给定4个图标,某些图标经过顺时针/逆时针旋转90°后能得到另外一些图标.现在给你开始的图标和结束 ...

  3. 体验一把haskell

    这几天做到PAT一道比较数据大小的题PAT1065,题目不难,应该说是一道送分题,就是开数组,然后模拟人工计算的过程进行计算,再比较下就行.做完之后,联想到haskell的Integer类型是无限大的 ...

  4. man(2) readv writev

    #include <sys/uio.h> ssize_t readv(int fd, const struct iovec *iov, int iovcnt); unix高级环境编程中的定 ...

  5. php内置函数分析之trim()

    官方手册中: 类似函数还有两个:ltrim() 和 rtrim().分别处理字符串的左侧.右侧. trim()的具体实现位于:ext/standard/string.c /* {{{ proto st ...

  6. 六、MyBatis-缓存机制

    MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制.缓存可以极大的提升查询效率.MyBatis系统中默认定义了两级缓存, 一级 缓存和 二级缓存.– 1.默认情况下,只有一级缓 ...

  7. [BZOJ] IOI2015 Boxes纪念品盒

    问题描述 IOI2015 开幕式正在进行最后一个环节.按计划在开幕式期间,每个代表队都将收到由主办方发放的一个装有纪念品的盒子.然而所有志愿者都被精彩的开幕式所吸引,除 Aman外其他人完全忘记了发放 ...

  8. hdu 4845 : 拯救大兵瑞恩 (bfs+状态压缩)

    题目链接 #include<bits/stdc++.h> using namespace std; typedef long long LL; int n,m,p,s,k; ,,,-}; ...

  9. hdu 6053: TrickGCD (2017 多校第二场 1009) 【莫比乌斯 容斥原理】

    题目链接 定义f[n]表示n是最大公约数情况下的计数,F[n]为n是公约数情况下的计数 (可以和 http://www.cnblogs.com/Just--Do--It/p/7197788.html  ...

  10. c#类的定义,c#中的关健字,C#标识符

    什么是类:一种数数据结构,存储数据成员,方法成员,和其它的内容,便 于方便 谳用C#语法: class 类名{ //TODO} C#中关键字(小写)不能作为方法名,类名,命名空间名等, static ...