1

コマンドラインオプションとして設定するか、JSON構成で設定するかに関係なく、ハブまたはノード、またはその両方に設定するかどうかに関係なく、Selenium Grid2をmaxSessionパラメーターに準拠させることができないようです。グリッドはそれを完全に無視します。バグ チケットを開く前に、これが正しく行われていることを確認したいと思います。

これは、最新のselenium-server-standalone-jarおよびselenium-webdriver NPM モジュールを利用する node.js アプリケーションです。プロセスは大まかに次のように分類されます。

1) ローカルで実行されているセレン グリッド ハブを開始します。

var jar = require("selenium-server-standalone-jar"),
    hub = require("selenium-webdriver/remote").SeleniumServer(jar.path, {
        loopback: true,
        port:     4444,
        args:     [ "-role hub", "-hubConfig " + config_path ]
    });

そのハブ構成ファイルは次のようになります。

{
    "host": null,
    "port": 4444,
    "newSessionWaitTimeout": -1,
    "throwOnCapabilityNotPresent": true,
    "nodePolling": 5000,
    "cleanUpCycle": 5000,
    "timeout": 300000,
    "browserTimeout": 0,
    "maxSession": 1
}

2) ローカルで実行されているセレン グリッド ノードを開始します。

var hub = require("selenium-webdriver/remote").SeleniumServer(jar.path, {
        loopback: true,
        port:     5555,
        args:     [ "-role node", "-nodeConfig " + config_path ]
    });

ノード構成は次のようになります。

{
    "capabilities": [
        {
            "browserName": "firefox",
            "maxInstances": 1,
            "seleniumProtocol": "WebDriver"
        }
    ],
    "configuration": {
        "maxSession": 1,
        "port": 5555,
        "host": "127.0.0.1",
        "register": true,
        "registerCycle": 5000,
        "hubPort": 4444,
        "hubHost": "127.0.0.1"
    }
}

したがって、この時点で、maxSession=1 で実行されているハブと、maxSession=1 および maxInstances=1 (Firefox の場合) で実行されているノードがあります。これは、アプリケーションが長期的に機能する方法ではありません。セッションを制限できることをSelenium Gridに実証させようとしているだけです。

3) 5 つの子プロセスを開始し、それぞれがハブ サーバーを使用して独自の webdriver を使用します。

それぞれがブラウザ アクションを実行し、終了する前に Web ドライバを閉じます。

私が期待すること:グリッドは、それらの子プロセスが開くことができるブラウザーの数を制限する必要があります。その結果、子プロセスが順番待ちになるかどうか。

私が実際に見たもの:一連の Firefox ウィンドウが開き (閉じる前に最大 30 まで上昇させました)、maxSession と maxInstance の構成を完全に無視して、それらのステップを並行して実行し始めます。

更新 2016-04-14

この問題を SeleniumServer クラスに分離しました。コンストラクターに指定した「args」オプションが無視されているようです。これは、テストの実行中に localhost:4444/grid/console に到達できないことを説明しています。スタンドアロン サーバー jar が「ハブ」ロールで実行されていません。

child_process.exec を使用して jar を直接 (役割と JSON 構成を使用して) 実行すると、すべてが多かれ少なかれ正しく機能し始めることを確認しましたが、ハブの準備とキュウリの間に競合状態が存在するという点で、このアプローチには問題があります。テストが Web ドライバーをそれに接続しようとします。理想的には、計画どおりに SeleniumServer を使用したいと考えています。私が間違っているかもしれないこと、またはそれをどのように動作させることができるかについてのアドバイスは、大歓迎です。

4

3 に答える 3

1

args 配列を形成する方法に問題があったことがわかりました。パラメータの名前と値が別々の項目であることを期待しているため、[ "-role hub", "-hubConfig " + config_path ]機能しませんが、[ "-role", "hub", "-hubConfig", config_path ]おそらく機能します。

おそらく、ハブの start() が 30 秒後にタイムアウトするという新しい問題が発生したためだと思いますが、少なくとも 30 秒の間にグリッド/コンソールをロードして、構成が正しいことを確認できます。@djangofan と @nash に感謝します。

于 2016-04-14T21:36:15.350 に答える
0

testNG.xml ファイルを thread-count="10" (または実行するインスタンスの数: 2、3、4 など) で更新します。

testNG を使用して、テストを並行して実行しています。@Factory と @DataProvider は、プログラムでテストを生成します。私は同じ問題に遭遇していました。さまざまな回避策を試した後、testng.xml ファイルを thread-count="10" で更新したところ、うまくいきました。

ハブ構成として使用される .JSON ファイル設定と同期することはできませんでしたが、目的を達成するのに役立ちました。ここに私の完全なtestNG.xmlファイルがあります( @Factory がどのように機能するかとして、私は parallel="methods" を行います)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="SuiteMain" parallel="methods" thread-count="10">
    <test name="maintest">
        <classes>
            <class name="test.java.MainDriverScript"></class>
        </classes>
    </test>
</suite>
于 2016-03-21T19:39:22.810 に答える