3

フォルダーにいくつかの.tファイルがあります。各テスト スクリプトは、Selenium の独自のインスタンスを起動するため、独自のブラウザーを開きます。これらは、別のモジュール内のページ オブジェクトに命令を渡します。ページ オブジェクトは、ほとんどのテスト アサーションが発生する場所です。

を使用してそれらを並行して実行しますprove -j2 testfolder。これを行うと、Selenium 呼び出しに応答して 2 つのブラウザーが開いているのがわかりますが、テスト結果とブラウザー アクションは、2 番目のスクリプトが最初のスクリプトの最初の呼び出しの直前までしか実行されないことを示しており、Test::More最初のスクリプトが終了するまでハングします。終了した。

ページ オブジェクト モデルはおせっかいです。各ファイルの先頭に裸のpass()呼び出しを配置し​​て.tみましたが、最初のスクリプト全体が完了するまで、2 番目のスクリプトのテスト ケースが試行されないことを確認しました。

testX.tファイルは次のようになります。

use strict;
use warnings;
use Test::More tests => 40;
use Selenium::Remote::Driver;
use MyPage::Object; # test execution module

my $sel = new Driver( 'browser_name' => $browser,'
                      'remote_server_addr' => $host,
                      'port' => "80", );

pass("Debug test case - let's see when this passes");

my $user = new MyPage::Object( text => "test string", sel => $sel);
$user->verify_text;
.
.

Object.pm外観は次のとおりです。

use strict;
use warnings;
use Selenium::Remote::Driver;
use Selenium::Remote::WebElement qw(get_text);

package Object;

sub new {
    my $class = shift;
    my $self = bless { @_ }, $class;
    return $self;
}

sub verify_text {
    my ($self, $text_to_verify) = @_;
    my $webElement = $self->{sel}->find_element("//*$xpath") or warn $!; 
    my $returnedtext = get_text($webElement) or warn $!;
    Test::More::ok($returnedtext =~ /\Q$text_to_verify/, "text matches");
}

1;

これが出力です。最初のテストの実行中に、次のように表示されます。

===(       4;12   4/40  0/? )===========================================

最初のスクリプトのテスト ケースが検証されると、最初の数字のペアと 2 番目のペアの左側の数字が増加します。この後、2 番目のスクリプトが開始されると、出力は次のように変わります。

testfolder\test2.t .. 4/35

テスト ケースが実行されると、左側の数値が増加します。

これらを並行して実行すると、それぞれのアサーションが同時に実行されるのではないでしょうか? これは珍しいことですか、それとも で並列ジョブがどのように動作することになっているのproveでしょうか?

これは、64 ビット Windows 7、ActiveState Perl v5.16.1 のコマンド ラインから実行しています。CPAN は、Prove が最新 (3.28) であることを示しています。

4

1 に答える 1