Nar*_*ren 2 perl code-coverage
我有一个处理我的Perl脚本的代码覆盖的独特要求.
我编写了一些Perl脚本,而这些脚本又使用了一些Perl模块.我的要求是使用它们支持的不同选项运行这些Perl脚本,并评估Perl脚本和Perl模块的代码覆盖率.
所以我使用Devel::Cover,Module::Build并Test::More从CPAN.如果我直接在测试脚本中调用Perl模块中的函数,那就太好了.但是如果我直接调用脚本它就无法工作(在这种情况下,我没有使用Perl模块和脚本的代码覆盖生成).
这是我使用Test :: More的示例测试脚本:
use strict;
use warnings;
use Test::More;
BEGIN { plan tests => 1 }
ok(sub {
my @args = ("ex4200fw","-query-fw","-i","192.168.168.1");
#print "# Executing @args \n";
`@args`;
my $rc = $? >> 8;
#print "# Return code: $rc \n";
$rc == 1
}->(),"Query Juniper EX4200 FW, incorrect IP address.\n");
Run Code Online (Sandbox Code Playgroud)
这里ex4200fw(在路径中)是由我编写的Perl脚本,后者又调用依赖模块updates.pm.
任何示例脚本对我都很有用.
收集您需要的覆盖率统计信息use Devel::Cover.(如果无法直接更改包含脚本的源核心,则可以将其指定-MDevel::Cover为perl的参数.)
因此,在调用其他Perl脚本时,您应该更改"测试脚本"以添加此参数,如下所示:
my @args = ("perl", "-MDevel::Cover", "ex4200fw","-query-fw","-i","192.168.168.1");
Run Code Online (Sandbox Code Playgroud)
或者,您可以PERL5OPT=-MDevel::Cover在执行顶级测试脚本之前指定环境变量.在这种情况下,您不需要更改任何脚本源.这是一个小壳样本:
## run tests and gather coverage statistics
export PERL5OPT=-MDevel::Cover
perl test1.pl
perl test2.pl
...
Run Code Online (Sandbox Code Playgroud)
有一个cover实用程序输出所有已执行的行.您应该在执行所有测试后运行它.默认情况下,标准模块将从报告中排除.