Selenium: параллельный запуск тестов с использованием сетки

Я пытаюсь выполнить один и тот же набор тестов параллельно на произвольном количестве узлов селеновой сетки.

  • Набор тестов был создан с помощью 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>
    

  • The target I'm using in the build.xml looks like this

    <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>
    

My problem:

  • Когда я выполняю приведенный выше набор тестов, только один пульт дистанционного управления выполняет тест, в то время как мой второй пульт остается бездействующим.
  • Я знаю, что в настоящее время обращаюсь к пультам дистанционного управления напрямую, используя "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>
    

My question:

  • Как я могу правильно определить набор тестов, чтобы он был запланирован на любое количество запущенных удаленных элементов управления?

Спасибо!


person Emre Sen    schedule 12.09.2011    source источник


Ответы (1)


Все ваши тесты должны иметь доступ к хабу Selenium Grid. Концентратор отвечает за отправку на узлы на основе запрошенных возможностей. Если вы запускаете тесты параллельно, вы теряете возможность определять порядок выполнения. Каждый тест должен быть изолированным. Сюда входят любые данные, которые могут вам понадобиться на вашем сервере, например, модификации БД.

person nirvdrum    schedule 14.09.2011