1

複数のブラウザで並行して実行されるperlスクリプトがありました。sub setup()実行を継続するこのスクリプトを設定する必要があります。セットアップ()がサブの終わりに遭遇すると問題に直面します}

コードは次のとおりです。

    my @browser = ('*firefox','*iexplore');
   my $i = @browser;  
$pm = new Parallel::ForkManager($i);

    foreach $browser (@browser){

    $pid =  $pm->start and next;

    $sel = WWW::Selenium->new( host => $host , port => 4444, browser => $browser, browser_url => $url,);
    $sel->start();
    print("\n Execution : ".$browser."\n");
    $sel->open("/");


    $pm->finish();

    }
4

3 に答える 3

0

では、テストを並行して実行するには何が必要ですか?必要なのは、並列テストランナーだけです。私たちにとって幸いなことに、Perlはインターネット(および自動化)のスイスアーミーナイフです。この実装では、1つのモジュールとperlのfork()を使用します。

最初のモジュールはここから入手できます:File :: Find ::Rule2
番目のモジュールはPerlディストリビューションに付属しています

File :: Find :: Ruleを使用して、ディレクトリを解析し、プロセス内のファイルのリスト(配列)を作成します。並列fork()で実行される複数のテストを管理するため。

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' ) # Get only perl files  
13:                ->in( $subdirs[0] );  
14:    
15:  foreach my $test (@files) {  
16:    my $pid = fork;  
17:    die "fork failed" unless defined $pid;  
18:      
19:    if ($pid == 0) { # We Got a Child  
20:      print "Executing Test: " . $test . " Sequence #: " . $count . "\n";  
21:      my $exit_code = system($test);  
22:      print "Done Executing Test: " . $test . " Sequence #: " . $count . "\n";  
23:      print "Exit Code: " . ($exit_code >> 8) . "\n";  
24:      exit ($exit_code >> 8);  
25:    }  
26:    $count++;    
27:  }  
28:  exit(0);  

C:\ Temp \ディレクトリにある2つの.plファイルを使用して上記のスクリプトを実行すると、次の出力が得られます。

 Executing Test: C:\Temp\test1.pl Sequence #: 0  
 Executing Test: C:\Temp\test2.pl Sequence #: 1  
 Done Executing Test: C:\Temp\test2.pl Sequence #: 1  
 Exit Code: 2  
 Done Executing Test: C:\Temp\test1.pl Sequence #: 0  
 Exit Code: 1  

これは、上記のスクリプトが実行していることです
。1.ディレクトリを渡すか、デフォルトとしてC:\ Tests \を使用します
。2。サブディレクトリのリストを作成します。3
。各ディレクトリに移動し、ファイルのリストを取得します
。4.それぞれをフォークします。それらのファイルの1つ(それらが終了することを確認してください)

于 2013-01-11T21:15:59.610 に答える
0

起動方法とシャットダウン方法を使用できます。参考までにこれを確認してください。

Test ::ClassSetupメソッドへのパラメーターの受け渡し

于 2012-05-22T05:53:44.397 に答える
0

これは、並列テストランナー(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のシステム関数を使用して、複数の自動テストを同時に起動するために必要なのはこれだけです。

于 2013-01-11T21:20:47.897 に答える