在Jenkins中为Perl应用程序测试覆盖率

时间:2013-03-13 20:03:10

标签: perl unit-testing jenkins code-coverage clover

我刚刚在Perl, Code Coverage Example

中描述的Perl中实现了一个很好的测试覆盖范例

但是那需要Module :: Build,现在如果我现有的Perl应用程序没有Module :: Build工具,有没有办法获得单元或功能测试的测试覆盖率?

我看了看:

Clean up from previous test run (optional)
  cover -delete

  #Test run with coverage instrumentation
  PERL5OPT=-MDevel::Cover prove -r t

  #Collect covered and caller information
  #  Run this _before_ running "cover"
  #  Don't run with Devel::Cover enabled
  covered runs
    - or e.g. -
  covered runs --rex_skip_test_file='/your-prove-file.pl$/' \
          --rex_skip_source_file='{app_cpan_deps/}'

  #Post process to generate covered database
  cover -report Html_basic


  %perl -d:Coverage -Iblib/lib test.pl

但这似乎表明在运行应用程序时代码覆盖率。

我希望能够获得Clover或Cobertura兼容输出,因此我可以将其与Jenkins中的email-ext集成

1 个答案:

答案 0 :(得分:3)

Task::Jenkins可能会有所帮助。它有关于如何通过Jenkins发布Devel :: Cover HTML报告的说明,以及有关将其他Perl工具改编为Jenkins的信息。

Jira有关于integrating Devel::Cover into Jenkins的一些说明。

要获取任何Perl进程(测试,应用程序,服务器等)的代码覆盖率,请将PERL5OPT环境变量设置为-MDevel::Cover,这就像将use Devel::Cover放入程序中一样。如果您执行测试的命令是perl something_test,那么您将运行PERL5POT=-MDevel::Cover perl something_test

如果您使用的是prove,请使用HARNESS_PERL_SWITCHES=-MDevel::Cover prove <normal prove arguments>。这告诉prove在运行测试时加载Devel::Cover,但避免收集证明本身的覆盖范围。