如何在 perl 中运行多个测试脚本并提供另一个测试脚本的参数?

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)

这是一种正确的方法还是有更适合使用模块的方法?

Dav*_*man 6

作为标准 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)

  • @nck 你是什么意思?您可以使用各种可与 `prove` 配合使用的 Tap::Harness:: 模块,也可以创建您自己的模块。例如,https://metacpan.org/pod/TAP::Harness::JUnit。您将看到用 Perl 编写的“证明”和测试在许多主程序不是用 Perl 编写的开源软件中得到了广泛的使用。很好的例子是用 C 语言编写的 Linux 核心实用程序,它们都在 Perl 中进行了测试。 (2认同)