Collecting CodeCoverage from symfony lime Tests

Since i use PHPUnit to test my symfony Applications and doing all automated stuff with Jenkins, i lost control over my lime test (e.g. in my plugins).
My Plugins stay in some kind of blackbox (lime isnt very useful with CI tools like Jenkins)

I love the Coverage Reports from PHPUnit (which is using PHP_CodeCoverage for that), which outputs me HTML or Clover, just as i need them.

To achieve the same with all my lime tests, i wrote a simple symfony plugin which, replaces the defaults “test:” tasks of symfony with my own modifed tasks.
Internally i extended the LimeHarness to use PHP_CodeCoverage for its reports:

Here is the Plugin https://github.com/digitalkaoz/rsPHPUnitLimePlugin

simply clone it or install it via pear or use svn.

Git: https://github.com/digitalkaoz/rsPHPUnitLimePlugin.git

Svn: https://svn.github.com/digitalkaoz/rsPHPUnitLimePlugin.git

PEAR: symfony plugins:install rsPHPUnitLimePlugin

After that you can use the tasks the same way (they have i slightly other name and some more options)

Usage

unit test coverage

  • symfony test:phpunit-unit –coverage-clover=log/clover-unit.xml
  • symfony test:phpunit-unit –coverage-html=log/coverage-unit
  • symfony test:phpunit-unit –coverage-folder=lib/
  • symfony test:phpunit-unit –xml=log/junit-unit.xml

functional test coverage

  • symfony test:phpunit-functional –coverage-clover=log/clover-functional.xml frontend
  • symfony test:phpunit-functional –coverage-html=log/coverage-functional frontend
  • symfony test:phpunit-functional –coverage-folder=apps/ frontend
  • symfony test:phpunit-functional –xml=log/junit-functional.xml frontend

plugin test coverage

  • symfony test:phpunit-plugin –coverage-clover=log/clover-functional.xml sfGuardPlugin
  • symfony test:phpunit-plugin –coverage-html=log/coverage-functional sfGuardPlugin
  • symfony test:phpunit-plugin –coverage-folder=plugin/sfGuardPlugin sfGuardPlugin
  • symfony test:phpunit-plugin –xml=log/junit-functional.xml sfGuardPlugin

all test coverage

  • symfony test:phpunit-all –coverage-clover=log/clover-functional.xml
  • symfony test:phpunit-all –coverage-html=log/coverage-functional sfGuardPlugin
  • symfony test:phpunit-all –coverage-folder=./
  • symfony test:phpunit-all –xml=log/junit-functional.xml

They work the same way as before, but they use PHP_CodeCoverage. You get nice HTML Reports and or Clover Reports.

To connect all your Plugin Tests with your default lime tests, simply modify your ProjectConfiguration:

 

  /**
   * reconfigure plugins
   */
  public function setupPlugins()
  {
    if(sfConfig::get('env') == 'prod')
    {
      return;
    }

    $plugins = sfFinder::type('directory')->name('*Plugin*')->maxdepth(0)->in(dirname(__FILE__).'/../plugins');
    $blackList = array('swFunctionalTestGenerationPlugin');

    foreach($plugins as $plugin)
    {
      $plugin = substr($plugin, strripos($plugin, DIRECTORY_SEPARATOR)+1);

      if(isset($this->pluginConfigurations[$plugin]) && !in_array($plugin,$blackList))
      {
        //connect the tests
        $this->pluginConfigurations[$plugin]->connectTests();
      }
    }
  }

To integrate this tests into your Jenkins Jobs simply use following build-step (as allways) :

export SYMFONY=$WORKSPACE/lib/vendor/symfony/lib
cd $WORKSPACE

./symfony test:phpunit-unit --xml=log/junit-results-plugin.xml --coverage-html=doc/coverage-plugin/ --coverage-clover=log/clover-report-plugin.xml --coverage-folder=plugins/

This will test all your unit tests, and writes the coverage to html and clover
in your post-build-actions simply publish your coverage data

Voila, now you can monitor your oldskool lime tests, or your plugins. It works with unit,functional and all test tasks

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>