【发布时间】:2021-01-10 17:43:19
【问题描述】:
我正在查看一些 perl 模块,我发现在 t 文件夹下进行大量测试是一种标准,扩展名为 .t。
这些脚本可以直接用perl <test>.t执行。
我想做一个小框架来测试一个应用程序。我想做很多简单的测试。然后是一个主脚本,它调用此测试来一次验证所有内容,但仍然能够单独运行小测试,而无需手动禁用主脚本中的其他测试。
我的问题是我应该怎么做这个电话?正如How do I run a Perl script from within a Perl script? 中所建议的那样,应该避免这种进程间通信,而是使用模块,但这会导致无法直接运行测试。
我的猜测是做如下事情。在我需要在 selenium 脚本中提供一些参数的示例中 这是文件夹结构:
├── main_script.pl
└── t
├── 00-Test_1.t
├── 01-Test_2.t
├── 02-Test_3.t
└── 03-Test_4.t
我会这样称呼他们:
system($^X, "./t/00-Test_1.t", "-b $browser", "-s $server", "-d $debug");
my $results = capture($^X, "./t/00-Test_1.t", "-b $browser", "-s $server", "-d $debug";
$log->info("Result is $results");
每个测试都会有这样的内容:
my ($browser, $server, $debug);
GetOptions(
'debug|d' => \$debug,
'debug|d' => \$trace,
'trace|t' => \$browser,
'server|s=s' => \$server,
) or die "[ERROR] Invalid options passed to $0\n";
这是一种正确的方法,还是有更适合使用模块的方法?
【问题讨论】:
-
您已经拥有
prove实用程序来一次运行多个测试。如果你想控制他们的行为,你可能想看看现有的框架之一,如 Test::Class 或 Test::Class::Moose 来编写你的测试。如果你想运送到 CPAN,它会拉进来额外的依赖项,但对于专有的东西来说它很棒。 -
@simbabque 我一直在看它。但我认为通过使用您无法从主脚本中获取结果,例如从中制作报告。
标签: perl automated-tests ipc