5

システムの安定性テストのために、Windows で 100 以上の perl スクリプト (元従業員が作成) を実行する必要があります。各スクリプトにはいくつかの関数があり、各関数は特定の Linux コマンドをバックエンド システムに送信し、結果を取得します。結果はログ ファイルに書き込まれます (現在、各スクリプトには 1 つのログ ファイルがあります)。結果は「成功」「失敗」です。

これらの perl スクリプトを 1 つずつ実行すると、時間が無駄になります。自動化するためにバッチ ファイルを作成することを考えていますが、結果ファイルを解析してテスト レポートを生成する必要があります。オンラインで検索したところ、Test::HarnessTest::MoreTest::Mostなどのいくつかのテスト フレームワークが適しているようです。私の理解に基づくと、それらは .t ファイルのみを使用し、スクリプトは通常の perl スクリプト (.pl) であり、標準の perl テスト スクリプト (.t スクリプト) ではありません。たとえば、Test::Harness を使用している場合、すべての perl スクリプトを .pl から .t に変更し、それらを t フォルダーに配置する必要がありますか? Test::Harness で関数を呼び出す方法は? テスト プロセスを自動化し、Test::Harness のようにテスト レポートを生成するためのより良い方法を誰かが提案できますか? 例は非常に役立つと思います。

4

2 に答える 2

2

Test::Harness and friends は、ログ ファイルの代わりに TAP データを出力するように 100 個すべてのスクリプトを変更する場合を除き、このタスクには適切な選択ではありません。

すべての Perl スクリプトを実行する Perl スクリプトを作成しないのはなぜですか?

use strict;
use warnings;

my $script_dir = "/path/to/dir/full/of/scripts";
opendir my $dh, $script_dir or die "Can't open dir $script_dir: $!";

my @scripts = grep { /\.pl$/ } readdir $dh;
foreach my $script( @scripts ) { 
    print "Running $script\n";
    system 'perl', $script;
}

forkand exec(またはParallel::ForkManager 、さらに良い)を使用してこれを並列化することもできますが、それがシステムにとって理にかなっていると仮定します。

于 2013-05-17T20:03:00.170 に答える
1

私たちの一人はここで混乱しています。これらの (100 以上の) perl スクリプトは単体テストではありませんか?

私が正しければ、読み続けてください。

Test::*あなたが言及したものは、あなたが探しているものではありません。

それぞれを実行するにはmain.pl、またはが必要なだけのように思えます。.battest.pl

だから、あなたは正しい道を進んでいるようです。すべてのテストを同じディレクトリに配置できる場合は、次のようなことができます。

my $tests_directory = "/some/path/test_dir";
opendir my $dh, $tests_directory or die"$!";
my @tests = grep { $_ !~ /^\./{1,2}$/ } readdir $dh; 

for my $test (@tests) {
    system('perl', $test);
}
于 2013-05-17T20:06:45.653 に答える