Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Appium Запуск тестов параллельно на iOS Android

maven
java
mobile
appium
android
testng
ios
Теги: #<Tag:0x00007fedb8692668> #<Tag:0x00007fedb86924b0> #<Tag:0x00007fedb8692320> #<Tag:0x00007fedb8692168> #<Tag:0x00007fedb8691fd8> #<Tag:0x00007fedb8691df8> #<Tag:0x00007fedb8691c40>

(Pavlo Bida) #21

Денис, это не лог, а только стектрейс. Чтобы попытатся вам помочь - мне надо увидеть полный лог запуска тестов.


(Oleksiy Chubey) #22

Привіт
А sustemPort у вас для кожного пристрою свій унікальний?
https://appiumpro.com/editions/28 - раджу перечитати цю статтю від Jonathan Lipps.
По великому рахунку для кожного пристрою Appium тестам потрібно 3 порти (server port, driver port та web port), але це якщо hybrid application і для ios/android.
З повагою,
Олексій


(Denys) #23

Привет
Спасибо за совет.

Да, используются уникальные порты.


(Taras) #24

у него не создаеться новий инстанс для каждого потока, в том то и проблема)


(Taras) #25

driver = new AppiumDriverFactory().getDriver(platformName, new URL(serverUrl), capabilities); просто колаеться для одного и того же driver обьекта столько раз сколько средов


(Pavlo Bida) #26

Тест:

public class MyTestCase extends MyTestBase{

    @Test
    public void test1() {
        System.out.println("Thread: " + Thread.currentThread().getId() + ", driver id: " + getDriver());
        int addValue = new Random().nextInt(100);
        System.out.println("Adding " + addValue + " to driver in thread " + Thread.currentThread().getId());
        setDriver(getDriver() + addValue);
        System.out.println("Thread: " + Thread.currentThread().getId() + ", driver id: " + getDriver());
    }

}

class MyTestBase {

    private int driver;

    @BeforeClass
    public void setup() {
        driver = new Random().nextInt(100);
    }

    protected int getDriver() {
        return driver;
    }

    protected void setDriver(int driver) {
        this.driver = driver;
    }

}

testng.xml:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="demoqa" parallel="tests">

    <test name="1">
        <classes>
            <class name="common.MyTestCase"/>
        </classes>
    </test>

    <test name="2">
        <classes>
            <class name="common.MyTestCase"/>
        </classes>
    </test>
</suite>

Output:

Thread: 14, driver id: 84
Thread: 13, driver id: 29
Adding 94 to driver in thread 14
Adding 32 to driver in thread 13
Thread: 14, driver id: 178
Thread: 13, driver id: 61

Вывод: для каждого потока создается свой отдельный и независимый инстанс драйвера.


(Denys) #27

Так, всё решилось с помощью запуска через Selenium Grid. Так как в данной задаче было 2 эмулятора, создаем 2 appium сервера через node(Перед этим настраиваем их под ваш проект). Указываем разные порты эмуляторам при запуске серверов.

appium --nodeconfig /path/to/nodeconfig.json -p 4723 --suppress-adb-kill-server --bootstrap-port 4823 --chromedriver-port 4923 -U emulator-5556

appium --nodeconfig /path/to/nodeconfig.json -p 4724 --suppress-adb-kill-server --bootstrap-port 4824 --chromedriver-port 4924 -U emulator-5554

После раним тесты)

Отдельное спасибо @Pavlo_Bida за помощь в решении этой задачи.