Правильно построить конфигурацию проекта при параллельном тестированием автоматизации.

Добрый День.
Environment:

  • Maven
  • Java
  • Appium
  • TestNG

Занимаюсь автоматизацией мобильных приложений(нативных).
Возникло не удобство в использование автоматизации при параллельном выполнение на разных реальных девайсах.
Как у меня сейчас это устроено.
Есть тестовые классы.
Пример : LoginTest.java

<suite name = "Login Suite" parallel="tests" thread-count="2">
<test name="Login Test Nexus_5(4.4.2)">
        <parameter name="DEVICE_NAME" value="Phone_Nexus_5(4.4.2)"/>
        <parameter name="ID" value="****"/>
        <classes>
            <class name="****.mobile.android.tests.LoginTest"/>
        </classes>
    </test>


    <test name="Login Test Nexus_5(6.0.1)">
        <parameter name="DEVICE_NAME" value= "Phone_Nexus_5(6.0.1)"/>
        <parameter name="ID" value="****"/>
        <classes>
             <class name="****.mobile.android.tests.LoginTest"/>
        </classes>
    </test>
</suite> 

Все это успешно запустится.
4-ре девайса не могу ранить одновременно, так как очень не стабильный Wi-Fi в компании и тесты падали из-за этого.
Пришлось разделить для девайсов Nexus и Samsung
У меня в проекте в папке = recources

LoginSuiteNexus
LoginSuiteSamsung
RecordingSuiteNexus
RecordingSuiteSamsung

и так далее.
в конце на выходе две Suites

SuitesNexus
SuitesSamsung

SuitesSamsung - включает все ***.SuiteSamsung.
SuitesNexus - аналогично, только для Nexus.
НА CI отдельными jobs запускаются SuitesNexus и SuitesSamsung последовательно.
Уже на данный момент стало многовато xml - которые для тестовых класов, а дальше будет еще больше так как будут увеличиваться тесты.
Предположил что можно сделать через Data Provider.
Но саму аннотацию Data Provider не возможно навесить на @BeforeClass.
Так вот нужен ваш совет, как быть дальше.

Зарание всем Спасибо

Так в чем заключается ваш вопрос?

@ArtOfLife

LoginSuiteNexus
LoginSuiteSamsung
RecordingSuiteNexus
RecordingSuiteSamsung

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

И будет это выглядеть вот так :

LoginSuiteNexus
LoginSuiteSamsung
LoginSuiteLG
LoginSuiteMotorola

И на выходе будет

SuiteNexus
SuiteSamsung
SuiteMotorola
SuiteLG

Каждая с этих сьют будет включать тесты для разных типов девайсов.
Вопрос, я правильна такая реализация? Или можно упростить!
Меня на данный момент смущает только накопление ***.xmls

Имхо будет ли правильно создать еще одну папку ресурсов
где я буду хранить только Общее Suites.***?
Будет примерно выглядеть вот так

recourcesSuiteTests include

LoginSuiteNexus
LoginSuiteSamsung
LoginSuiteLG
LoginSuiteMotorola
RecordingNexus
RecordingSamsung
RecordingLG
RecordingMotorola

recourcesSuites

SuiteNexus
SuiteSamsung
SuiteMotorola
SuiteLG 

Будет ли так правильно как вариант?

Мне пока не совсем понятно это разделение на suites. Вам надо одни и те же тесты запустить на разных девайсах при общем ограничении в 2 паралелльных потока?

Раз уж вы разбили девайсы по тестовым блокам, что мешает вам добавить еще N блоков для других девайсов в рамках существующего suite? При этом кол-во потоков все так же можно сохранить на уровне 2х.

@ArtOfLife
Вы правы у меня есть ограничение в 2 параллельных потока!
Если я правильно вас понял, то :

<suite name = "Login Suite" parallel="tests" thread-count="2">
<test name="Login Test Nexus_5(4.4.2)">
        <parameter name="DEVICE_NAME" value="Phone_Nexus_5(4.4.2)"/>
        <parameter name="ID" value="****"/>
        <classes>
            <class name="****.mobile.android.tests.LoginTest"/>
        </classes>
    </test>

 <test name="Login Test Nexus_5(6.0.1)">
        <parameter name="DEVICE_NAME" value= "Phone_Nexus_5(6.0.1)"/>
        <parameter name="ID" value="****"/>
        <classes>
             <class name="****.mobile.android.tests.LoginTest"/>
        </classes>
    </test>

 <test name="Login Test Samsung S6">
        <parameter name="DEVICE_NAME" value= "Phone_Samsung S6"/>
        <parameter name="ID" value="****"/>
        <classes>
             <class name="****.mobile.android.tests.LoginTest"/>
        </classes>
    </test>

 <test name="Login Test Samsung Tab S2">
        <parameter name="DEVICE_NAME" value= "Phone_Samsung Tab S2"/>
        <parameter name="ID" value="****"/>
        <classes>
             <class name="****.mobile.android.tests.LoginTest"/>
        </classes>
    </test>
</suite>

И при этом эта Login Suite - запустится два раза параллельно?

Нет. Suite будет запущен единожды. А вот блоки с тегом test будут запущены в параллели в 2 потока. Сначала одна пара, затем другая.

1 лайк

@ArtOfLife
Спасибо за ответ. Я по пробую завтра и отвечу вам сразу.

@ArtOfLife
Спасибо вам огромное за то что откликнулись на тему.