これは、並列テストランナー(Seleniumまたはその他のタイプのテスト用)を実装する方法に関する別の簡単なチュートリアルです。
最初のコード:
1: #!C:/Perl64/bin/perl
2: use strict;
3: use warnings;
4: use File::Find::Rule;
5:
6: my $start_dir = shift || 'C:\Tests';
7: my $count = 0;
8:
9: my @subdirs = File::Find::Rule->directory->in($start_dir);
10:
11: my @files = File::Find::Rule->file()
12: ->name( '*.pl' ) # Only get perl files
13: ->in( $subdirs[0] );
14: foreach my $test (@files) {
15: system(1, $test);
16: print "Executing Test: " . $test . " Sequence #: " . $count . "\n";
17: print "My Father Is: " . $$ . "\n"; # process that started me
18: $count++;
19: }
20: exit(0);
ここでの魔法は15行目で実行されています。この特別な形式のperl関数システムを使用すると、起動するプロセスを待たずに続行するように強制でき、[ほぼ]同時に複数のテストを効果的に生成できます。
Perlドキュメントから:
system(1, @args)
spawns an external process and immediately returns its process designator, without waiting for it to terminate.
上記のスクリプトは、以下を出力します。
Executing Test: C:\Temp\test_template.pl Sequence #: 0
My Father Is: 8692
Executing Test: C:\Temp\test_template2.pl Sequence #: 1
My Father Is: 8692
Executing Test: C:\Temp\test_template3.pl Sequence #: 2
My Father Is: 8692
Executing Test: C:\Temp\test_template4.pl Sequence #: 3
My Father Is: 8692
次の画像は、実行中のperl.exeプロセスによってWindowsタスクマネージャーに示されているように、デバッガーでテストランナーが停止したが、生成された4つのプロセスがまだ実行されている(理論的には自動テストを実行している)ことを示しています。
Perlのシステム関数を使用して、複数の自動テストを同時に起動するために必要なのはこれだけです。