前提: 1,SonarQube已经安装好且已经安装了sonar-php-plugin,并且在测试服务器上也安装并配置好了sonar-scanner 2,安装了phpunit5.3版本 先安装Composer,直接从官网下载composer.phar文件,然后同目录建立一个composer.cmd文件,内容如下
@php "%~dp0composer.phar" %*
在linux下直接把composer.phar直接放入bin目录,并且改名为composer即可
mv composer.phar composer
chmod a+x composer
这时候,就可以执行composer命令了。
然后建立一个文件composer.json,
内容如下:
{
"require-dev": {
"phpunit/phpunit": "5.3.*"
}
}
通过执行composer install来安装phpunit,它会自动安装phpunit和它依赖的各种组件
然后把D:\Program Files (x86)\php-5.6.9\vendor\bin配置到PATH路径中即可
测试步骤: 1,建立一个顶级目录projectA, 2,在该顶级目录下建立两个目录src和tests,分别用于放置业务代码文件和测试代码文件 3,在该顶级目录下建立一个配置文件sonar-project.properties,内容如下:
sonar.projectKey=org.sonarqube:php-ut-sq-scanner
sonar.projectName=PHP :: PHPUnit :: SonarQube Scanner
sonar.projectVersion=1.0
sonar.sources=src
sonar.tests=tests
sonar.language=php
sonar.sourceEncoding=UTF-8
# Reusing PHPUnit reports
sonar.php.coverage.reportPath=reports/phpunit.coverage.xml
sonar.php.tests.reportPath=reports/phpunit.xml
sonar.sources和sonar.tests必须配置,但可以设置为空,因为我们这里只是把分析报告上传即可,不需要再执行覆盖率检查了。
4,在src下面编写业务类代码 5,在tests下面编写测试类代码 6,在顶级目录下执行
phpunit
这时候就会在顶级目录下得到一个文件夹reports,里面有两个测试报文文件,分别是测试报告和测试覆盖率报告
但需要在顶级目录下有一个phpunit.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<phpunit cacheTokens="false"
colors="false"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
forceCoversAnnotation="false"
mapTestClassNameToCoveredClassName="false"
printerClass="PHPUnit_TextUI_ResultPrinter"
processIsolation="false"
stopOnError="false"
stopOnFailure="false"
stopOnIncomplete="false"
stopOnSkipped="false"
stopOnRisky="false"
testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
timeoutForSmallTests="1"
timeoutForMediumTests="10"
timeoutForLargeTests="60"
verbose="false">
<!-- Here you can define many 'testsuite' elements -->
<testsuites>
<testsuite name="onetestsuite">
<directory suffix=".php">tests</directory>
</testsuite>
</testsuites>
<!-- 代码覆盖率 -->
<filter>
<whitelist addUncoveredFilesFromWhitelist="true">
<directory suffix="Test.php">src</directory>
</whitelist>
</filter>
<!--代码覆盖率报告和单元测试报告-->
<logging>
<log type="coverage-clover" target="reports/phpunit.coverage.xml"/>
<log type="junit" target="reports/phpunit.xml" logIncompleteSkipped="false"/>
</logging>
<!--Set environment variables-->
<php>
<includePath>.</includePath>
<ini name="foo" value="bar"/>
<const name="foo" value="bar"/>
<var name="foo" value="bar"/>
<env name="foo" value="bar"/>
<post name="foo" value="bar"/>
<get name="foo" value="bar"/>
<cookie name="foo" value="bar"/>
<server name="foo" value="bar"/>
<files name="foo" value="bar"/>
<request name="foo" value="bar"/>
</php>
</phpunit>
7,在顶级目录下执行以下命令,就会将两个测试报告文件和src和tests目录下的文件都提交给SonarQube服务器(前提是Sonar已经都配置好了) (D:\sonar-scanner-2.6.1\bin\sonar-scanner.bat这个路径或者在linux就放入PATH环境变量中)
sonar-scanner
重复步骤4~7,就会更新SonarQube端的报告数据。