2013-05-17 14 views
5

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

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

+0

理想的には、あなただけではなく、 'SUCCESS'、と' Fail'を印刷する[テスト::その他](http://p3rl.org/Test::More)内の関数を使用するようにテストを変更します。例: 'print $ a eq 'a"の代わりに? "成功\ n": "失敗\ n";それは '$ a、' a '、' Some explanatory text''です。 [TAP](http://testanything.org)形式。 –

答えて

1

私たちのうちの1人はここで混乱しています。これらの(100+)perlスクリプトはunit testsではありません。

私が正しい場合は、読んでください。

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

私にはmain.pl、または.batが必要です。test.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); 
} 
+0

あなたは正しいですが、単体テストではありません。 – ericyoung

+0

@ericyoung - 与えられた例を使用してください。 – chrsblck

2

Test ::ログファイルではなく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; 
} 

あなたも、それはあなたのシステムのために理にかなっていると仮定すると、(より良い、またはParallel::ForkManagerforkexecを使用して、これを並列化することができます。