如何为PHP配置Jenkins覆盖率报告?

4

我正在努力设置代码覆盖率。 请问我该怎么做,如何设置才能获得覆盖率地图/报告?

我有一个运行的单元测试。在“后构建操作”下,我必须勾选哪些复选框? 我需要安装插件吗?这个单元测试是在php 5.3.2中运行的,我使用的是symfony 1.4.5。

在cibuild脚本中,我运行:

php "test/unit/RbcTest.php"

这里是实际的测试代码:

<?php
  require_once dirname(__FILE__).'/../bootstrap/unit.php';
  require_once 'PHP/CodeCoverage/Autoload.php';
  set_include_path ('phoenix/lib/');
  $coverage = new PHP_CodeCoverage;
  $coverage->start('strtolowerTest.php');
  $coverage->stop();
  $writer = new PHP_CodeCoverage_Report_Clover;
  $writer->process($coverage, 'phoenix/test/clover.xml');
  $writer = new PHP_CodeCoverage_Report_HTML;
  $writer->process($coverage, 'phoenix/test/code-coverage-report');
?>

<?php //strtolowerTest.php
echo "1. for strlower";
require_once 'phoenix/lib/vendor/symfony/lib/vendor/lime/lime.php';
echo "2. for strlower";
require_once 'phoenix/lib/validator/myValidatorString.class.php';
echo "3. for strlower";
require_once 'phoenix/lib/vendor/symfony/lib/validator/sfValidatorString.class.php';
$t = new lime_test(2,  new lime_output_color());
$t->is(myValidatorString::doCleanEmail('blabla-32.mtmail..com'), 'blabla@mtmail.com');
$t->is(myValidatorString::doClean('@#*+??%^!~blabla-===32.mtmail..com'), 'blabla@mtmail.com');
$t->is(myValidatorString::slugify('sensio   labs'), 'sensio-labs');
$t->is(myValidatorString::slugify('paris,france'), 'paris-france');
$t->is(myValidatorString::slugify('  sensio'), 'sensio');
$t->is(myValidatorString::slugify('sensio  '), 'sensio');
$t->is(myValidatorString::slugify(''), 'n-a', '::slugify() converts the empty string to n-a');
$t->is(myValidatorString::slugify(' - '), 'n-a', '::slugify() converts a string that only contains non-ASCII characters to n-a');

$t->diag('hello world');
$t->ok(true, 'test something');
?> 

请帮忙

当我查看Jenkins中的控制台构建时,以下是输出内容:

PHPUnit 3.6.10 by Sebastian Bergmann.

Class test/phpunit/unit/RbcTest could not be found in /var/lib/jenkins/workspace/b32b733b59ba6be9884da7427bee5c95/phoenix/test/phpunit/unit/RbcTest.php.Publishing Clover coverage report...
Publishing Clover HTML report...
Publishing Clover XML report...
Publishing Clover coverage results...
Code coverage enforcement failed for the following metrics:
    Methods
    Conditionals
Setting Build to unstable.
Build step 'Publish Clover Coverage Report' changed build result to UNSTABLE
Publishing Clover coverage report...
Publishing Clover XML report...
Publishing Clover coverage results...
Code coverage enforcement failed for the following metrics:
    Methods
Setting Build to unstable.
[ci-game] evaluating rule: Build result
[ci-game] evaluating rule: Increased number of failed tests
[ci-game] evaluating rule: Increased number of passed tests
[ci-game] evaluating rule: Decreased number of failed tests
[ci-game] evaluating rule: Decreased number of passed tests
[ci-game] evaluating rule: PMD violation
[ci-game] evaluating rule: pylint violation
[ci-game] evaluating rule: CPD violation
[ci-game] evaluating rule: Checkstyle violation
[ci-game] evaluating rule: FindBugs violation
[ci-game] evaluating rule: FXCop violation
[ci-game] evaluating rule: Simian violation
[ci-game] evaluating rule: StyleCop violation
[ci-game] evaluating rule: HIGH priority PMD warnings
[ci-game] evaluating rule: NORMAL priority PMD warnings
[ci-game] evaluating rule: LOW priority PMD warnings
[ci-game] evaluating rule: Changed number of compiler warnings
[ci-game] evaluating rule: Changed number of checkstyle warnings
Finished: UNSTABLE



 <?php
 class myValidatorString extends sfValidatorString
 {
    static public function slugify($text)
   {
       echo "in myvalidatorstring for class sfValidatorString.class.php";
       // replace all non letters or digits by -
       $text = preg_replace('/\W+/', '-', $text);

       // trim and lowercase
       $text = strtolower(trim($text, '-'));

       if (empty($text))
       {
        return 'n-a';
       }
       return $text;
   }
 }

谢谢

2个回答

6

谢谢,已安装PHP_CodeCoverage。接下来该怎么做呢?如何让我的Jenkins生成代码覆盖率报告?谢谢。 - charlie_cat
安装PHPUnit并按照文档设置CC。您需要为其编写单元测试,或者可以尝试在没有单元测试的情况下使用CC。不过我没有这样做过。 - David Harkness
谢谢,我已经编写了单元测试并安装了PHPUnit。我配置了Jenkins生成clover.xml文件,但无论我如何定义路径,它都会出现错误!请参见主帖中的错误消息。 - charlie_cat
请注意错误信息Class test/phpunit/unit/RbcTest could not be found in /var/lib/jenkins/workspace/b32b733b59ba6be9884da7427bee5c95/phoenix/test/phpunit/unit/RbcTest.php. 您重写了使用PHPUnit的单元测试吗? PHPUnit非常关注测试用例的编写方式。 - David Harkness
谢谢,我注意到了,但是你的意思是我必须使用PHPUnit编写我的测试吗?在我的一个测试中,我有:class myValidatorString extends sfValidatorString,而后者在另一个目录中:phoenix/lib/vendor/symfony/lib/validator/sfValidatorString.class.php。如何让我的测试可以访问那个类?我会在主贴中发布我的测试。谢谢 :) - charlie_cat
显示剩余5条评论

0

对于 PHP,您可以使用 Clover PHP 插件。安装该插件后,您将获得额外的作业配置选项来设置所有内容(请参阅插件的描述)。


我运行了wget http://myhost.net:12343/jnlpJars/jenkins-cli.jar并已经得到了文件。接下来我执行:java -jar jenkins-cli.jar -s http://myhost.net:1234 install-plugin cloverphp,但是出现了错误:Invalid or corrupt jarfile jenkins-cli.jar ??? 请帮忙解决?谢谢! - charlie_cat
1
您可以通过网页界面安装插件。只需转到“管理Jenkins”->“管理插件”。 - Lars Kotthoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接