我刚刚在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集成
答案 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
,但避免收集证明本身的覆盖范围。