0

任意の数のセレン グリッド ノードで同じテストスイートを並行して実行しようとしています。

  • テスト スイートは Selenium IDE で作成され、バッチ コンバーターを使用して testng としてエクスポートされました。
  • アイデアは、テストスイートを一度作成してから、その特定のスイートを並行して実行する任意の数のノードを起動することです
  • 現在、1 つのハブが実行されており、そのハブに 2 つのリモコンが接続されています。
  • 私のtestng.xmlは次のようになります

    <suite name="mysuite1" verbose="20" annotations="JDK" parallel="tests" thread-count="20" >
    
    <parameter name="selenium.host" value="localhost"></parameter>
    <parameter name="selenium.port" value="4444"></parameter>
    <parameter name="selenium.browser" value="*firefox"></parameter>
    <parameter name="selenium.restartSession" value="false"></parameter>
    
    
    <test name="mytest1" preserve-order="true">
        <parameter name="selenium.port" value="5557"></parameter> 
        <parameter name="selenium.browser" value="*firefox"></parameter> 
        <parameter name="selenium.url" value="http://localhost:8080"></parameter> 
        <classes>
            <class name="my.testsuite1" />
            <class name="my.testsuite2" />
        </classes>
    </test>
    

  • build.xml で使用しているターゲットは次のようになります

    <target name="run-parallel" depends="compile" description="Run-Parallel">
    <echo>${host}</echo>
    <java classpathref="runtime.classpath" classname="org.testng.TestNG" failonerror="true">
        <sysproperty key="java.security.policy" file="lib/testng.policy"/>
        <sysproperty key="webSite" value="${webSite}" />
        <sysproperty key="seleniumHost" value="${host}" />
        <sysproperty key="seleniumPort" value="${port}" />
        <sysproperty key="browser" value="${browser}" />
    
        <arg value="-d" />
        <arg value="${basedir}/target/reports" />
        <arg value="-suitename" />
        <arg value="suite1" />
    
        <arg value="-parallel"/>
        <arg value="tests"/>
        <arg value="-threadcount"/>
        <arg value="20"/>
    
        <arg value="testng.xml"/>
    </java>
    

私の問題:

  • 上記のテスト スイートを実行すると、1 つのリモート コントロールだけがテストを実行し、2 つ目のリモート コントロールはアイドル状態のままです。
  • 現在、「selenium.port」を使用してリモートコントロールを直接アドレス指定していることは知っていますが、テストをリモートコントロールに割り当てるこの厳格な方法を回避する方法を探しています
  • 要素を追加すると、要素 (my.testsuite1-4) 内にリストされているすべてのクラスがランダムな順序で実行されます。

    <test name="mytest2" preserve-order="true">
    <parameter name="selenium.port" value="5558"></parameter> 
    <parameter name="selenium.browser" value="*firefox"></parameter> 
    <parameter name="selenium.url" value="http://localhost:8080"></parameter> 
    <classes>
        <class name="my.testsuite3" />
        <class name="my.testsuite4" />
    </classes>
    

私の質問:

  • 任意の数の実行中のリモート コントロールでスケジュールされるように、テストスイートを適切に定義するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

2

すべてのテストが Selenium Grid ハブにアクセスする必要があります。ハブは、要求された機能に基づいてノードにディスパッチする責任があります。テストを並行して実行すると、実行順序を定義できなくなります。各テストは分離する必要があります。これには、DB の変更など、バックエンドで必要になる可能性のあるデータが含まれます。

于 2011-09-14T14:25:16.897 に答える