Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

execution
parallel
maven
java
appium
testng
Теги: #<Tag:0x00007f7b62bc9d98> #<Tag:0x00007f7b62bc9c58> #<Tag:0x00007f7b62bc9ac8> #<Tag:0x00007f7b62bc9988> #<Tag:0x00007f7b62bc90f0> #<Tag:0x00007f7b62bc8fb0>

#1

Добрый День.
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.
Так вот нужен ваш совет, как быть дальше.

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


(Sergey Korol) #2

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


#3

@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 

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


(Sergey Korol) #4

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

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


#6

@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 - запустится два раза параллельно?


(Sergey Korol) #7

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


#8

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


#9

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