Как последовательно запускать тестовые узлы TestNG, но все внутри классов параллельно для разных возможностей браузера?

Я хочу запустить свой пакет автоматизации (реализованный с использованием Selenium Webdriver (Java) + TestNG + Maven) параллельно с несколькими возможностями браузера. Я могу запустить его параллельно для разных возможностей, используя приведенный ниже образец testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="5" name="Functional Test Suite" parallel="tests">
    <test name="Windows-FF-37.0" preserve-order="true" >
        <parameter name="browser" value="Firefox"/>
        <parameter name="version" value="37.0"/>
        <parameter name="os" value="Windows"/>
        <parameter name="os_version" value="8.1"/>
        <parameter name="device" value=""/>
        <classes>
            <class name="uat.mycompany.tests.FirstTest"/>
            <class name="uat.mycompany.tests.SecondTest"/>
            <class name="uat.mycompany.tests.ThirdTest"/>
            <class name="uat.mycompany.tests.FourthTest"/>
        </classes>
    </test>
    <test name="MAC-Yosemite-Chrome-36.0" preserve-order="true">
        <parameter name="browser" value="Chrome"/>
        <parameter name="version" value="36.0"/>
        <parameter name="os" value="OS X"/>
        <parameter name="os_version" value="Yosemite"/>
        <parameter name="device" value=""/>
        <classes>
            <class name="uat.mycompany.tests.FirstTest"/>
            <class name="uat.mycompany.tests.SecondTest"/>
            <class name="uat.mycompany.tests.ThirdTest"/>
            <class name="uat.mycompany.tests.FourthTest"/>
        </classes>
    </test>
</suite>

Но когда я запускаю этот testng.xml, он начинается с «FirstTest» на обеих виртуальных машинах; один с Chrome + Mac, а другой с конфигурацией Forefox + Windows. Я НЕ хочу этого, потому что данные, измененные одним сценарием, не позволяют выполнить другой сценарий.

Мое требование - запускать все классы из одного узла параллельно, а узлы - последовательно. В качестве обходного пути я всегда могу поместить имена классов в разном порядке в разные тестовые узлы, но, поскольку у меня есть сотни тестовых классов, это неосуществимое решение.

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


person Vijay    schedule 10.07.2015    source источник


Ответы (3)


Вы можете выполнить следующие шаги:

  • Определите 2 разных набора (файлы XML) для разных тестов.
  • для каждого набора упоминания: thread-count="4" parallel="classes"
  • Создайте третий пакет (файл xml) для последовательного запуска двух вышеуказанных файлов (не упоминайте количество потоков и параметры параллельности для пакета).

Первый XML-файл:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="5" name="Functional Test Suite1" parallel="classes">
    <test name="Windows-FF-37.0" preserve-order="true" >
        <parameter name="browser" value="Firefox"/>
        <parameter name="version" value="37.0"/>
        <parameter name="os" value="Windows"/>
        <parameter name="os_version" value="8.1"/>
        <parameter name="device" value=""/>
        <classes>
            <class name="uat.mycompany.tests.FirstTest"/>
            <class name="uat.mycompany.tests.SecondTest"/>
            <class name="uat.mycompany.tests.ThirdTest"/>
            <class name="uat.mycompany.tests.FourthTest"/>
        </classes>
    </test>
</suite>

Второй файл XML:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="5" name="Functional Test Suite2" parallel="classes">
    <test name="MAC-Yosemite-Chrome-36.0" preserve-order="true">
        <parameter name="browser" value="Chrome"/>
        <parameter name="version" value="36.0"/>
        <parameter name="os" value="OS X"/>
        <parameter name="os_version" value="Yosemite"/>
        <parameter name="device" value=""/>
        <classes>
            <class name="uat.mycompany.tests.FirstTest"/>
            <class name="uat.mycompany.tests.SecondTest"/>
            <class name="uat.mycompany.tests.ThirdTest"/>
            <class name="uat.mycompany.tests.FourthTest"/>
        </classes>
    </test>
</suite>

Третий файл XML (необходимо выполнить этот файл):

<suite name="suite of suites">
    <suite-files>
        <suite-file path="Functional Test Suite1.xml" />
        <suite-file path="Functional Test Suite2.xml" />
    </suite-files>
</suite>
person HemaSundar    schedule 12.07.2015

Для приведенного выше примера установите <suite thread-count="4" name="Functional Test Suite" parallel="classes">

Если вы установите thread-count меньше, чем количество classes внутри test, тогда tests будет работать последовательно, но classes будет работать параллельно. После того, как все тесты classes будут выполнены в test, начнется следующий test.

person 9ikhan    schedule 12.07.2015
comment
Привет, 9ikhan, я пробовал разными способами, используя ваше предложение, но каждый раз он запускает только один поток. установите thread-count = 4 parallel = classes, но это не помогло. Я пробовал это раньше. Пожалуйста, дайте мне знать, если вы думаете о другом решении. - person Vijay; 14.07.2015

Вы можете написать код, как показано ниже, это будет работать.

person Raghav N    schedule 11.07.2015