nck*_*nck 3 perl automated-tests ipc
我一直在查看 perl 的一些模块,我发现t在扩展名为.t.
这些脚本可以直接使用perl <test>.t.
我想做一个小框架来测试一个应用程序。我想进行许多简单的测试。然后是一个主脚本,它调用这个测试来一次验证所有内容,但仍然能够单独运行小测试,而无需手动禁用主脚本中的其他测试。
我的问题是我应该怎么做这个电话?正如如何从 Perl 脚本中运行 Perl 脚本中所建议的那样?应该避免这种进程间通信,而是使用模块,但这将无法直接运行测试。
我的猜测是做如下事情。在我需要在 selenium 脚本中提供一些参数的示例中,这是文件夹结构:
??? main_script.pl
??? t
??? 00-Test_1.t
??? 01-Test_2.t
??? 02-Test_3.t
??? 03-Test_4.t
Run Code Online (Sandbox Code Playgroud)
我会这样称呼他们:
??? main_script.pl
??? t
??? 00-Test_1.t
??? 01-Test_2.t
??? 02-Test_3.t
??? 03-Test_4.t
Run Code Online (Sandbox Code Playgroud)
每个测试都会有这样的东西:
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");
Run Code Online (Sandbox Code Playgroud)
这是一种正确的方法还是有更适合使用模块的方法?
作为标准 Perl 发行版的一部分,您已经拥有“一个调用此测试以立即验证所有内容的主脚本,但仍然能够单独运行小测试”。它被称为prove。
运行prove不带参数运行所有测试脚本匹配t/*.t(所以你想在一个测试t/子目录当您运行prove,而不是在同一个目录下),也可以使用prove t/00-Test_1.t运行单个测试脚本。
请注意,prove期望测试脚本以 TAP(“测试任何协议”)格式发出输出,这通常通过在测试脚本中使用Test::More或其他 Test::* 模块来完成。
如果您遵循将特定于应用程序的模块放在lib/子目录中的约定,那么 runningprove -l会将它们添加到@INC以在运行测试脚本时使它们可用。IE,
Root directory (run `prove` from here)
??? lib
| ??? MyProject
| ??? MyModule.pm
??? t
??? 00-Test_1.t
??? 01-Test_2.t
??? 02-Test_3.t
??? 03-Test_4.t
Run Code Online (Sandbox Code Playgroud)