Selenium: параллельный запуск тестового набора с использованием сетки - PullRequest
0 голосов
/ 12 сентября 2011

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

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

  • Цель, которую я использую в сборке.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>
    

Моя проблема:

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

Мой вопрос:

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

Спасибо!

1 Ответ

2 голосов
/ 14 сентября 2011

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

...