Параллельное тестирование на реальных Android-устройствах с помощью Appium

Я пытаюсь провести параллельные тесты веб-браузера на двух реальных устройствах Android, используя Appium и TestNG.

Мой код:

public class ParaTests {

private AppiumDriverLocalService service;
private AppiumServiceBuilder builder;
private AppiumDriverLocalService service2;
private AppiumServiceBuilder builder2;
private DesiredCapabilities cap;
public static AppiumDriver<WebElement> driver;


@BeforeSuite
public void startServer() {


    builder = new AppiumServiceBuilder();
    builder.withIPAddress("127.0.0.1");
    builder.usingPort(4726);


    //Start the first server with the builder
    service = AppiumDriverLocalService.buildService(builder);
    service.start();

    builder2 = new AppiumServiceBuilder();
    builder2.withIPAddress("127.0.0.1");
    builder2.usingPort(4727);

    //Start the second server with the builder
    service2 = AppiumDriverLocalService.buildService(builder2);
    service2.start();

}



@BeforeTest
@org.testng.annotations.Parameters("device")
public void setUp(String device) throws MalformedURLException {

    if(device.equalsIgnoreCase("pixel 2")){
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("deviceName", "Pixel 2");
        capabilities.setCapability("platformVersion", "8.1.0");
        capabilities.setCapability("udid", "Fty4654541A00532");
        capabilities.setCapability("systemPort", "4726");
        capabilities.setCapability("browserName", "chrome");
        capabilities.setCapability("deviceOrientation", "portrait");


        driver = new AndroidDriver<>(new URL("http://127.0.0.1:4726/wd/hub"), capabilities);
        driver.manage().timeouts().implicitlyWait(20L, TimeUnit.SECONDS);
    }

    if(device.equalsIgnoreCase("nexus 5")){
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("deviceName", "Nexus 5");
        capabilities.setCapability("platformVersion", "4.4");
        capabilities.setCapability("udid", "039fsef3543g8");
        capabilities.setCapability("systemPort", "4727");
        capabilities.setCapability("browserName", "chrome");
        capabilities.setCapability("deviceOrientation", "portrait");


        driver = new AndroidDriver<>(new URL("http://127.0.0.1:4727/wd/hub"), capabilities);
        driver.manage().timeouts().implicitlyWait(20L, TimeUnit.SECONDS);

    }

}


@Test
public void mobileTest() throws MalformedURLException{


    driver.get("https://www.testing7858494.com");
    JavascriptExecutor jse = (JavascriptExecutor) driver;

    driver.findElementByClassName("mobile-menu-icon").click(); 


    jse.executeScript("window.scrollBy(0,400)", "");
    driver.findElementById("menu-item-613").click();
    jse.executeScript("window.scrollBy(0,800)", "");
    driver.findElementById("input_6_1").sendKeys("Test");
    driver.findElementById("input_6_7").sendKeys("123456789");
    driver.findElementById("input_6_3").sendKeys("test1234567.com");
    driver.findElementById("input_6_4").sendKeys("Automated mobile web browser testing");

       System.out.println("Script has finished execution.");
       driver.quit();

}

@AfterTest
public void stopServer() {
    service.stop();
    service2.stop();
}
}

И мой testNG XML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="tests">


 <test name="Pixel2Test">

 <parameter name="device" value="pixel 2" />

 <classes>

 <class name="Testing.ParaTests" />

 </classes>

 </test>

  <test name="NexusTest">

 <parameter name="device" value="nexus 5" />

 <classes>

 <class name="Testing.ParaTests" />

 </classes>

 </test>

 <!-- Test -->
</suite> <!-- Suite -->

Когда я запускаю это как набор testNG, запускаются оба сервера Appium, и каждое из мобильных устройств подключается к ожидаемым. Однако сам по себе тест запускается только на одном устройстве, часто два раза. Как заставить эти тесты запускаться одновременно на обоих отдельных устройствах? Я что-то упускаю? Я думал, что возможности udid и systemPort позволят убедиться, что каждое устройство подключено к правильному серверу, и тест может быть запущен на обоих устройствах.


person BIGJOHN    schedule 01.03.2018    source источник


Ответы (2)


У меня была такая же проблема с параллельными тестами реальных устройств TestNG + Appium + Android из-за статического поля.

общедоступный статический драйвер AppiumDriver

Попробуйте сделать драйвер не статичным.

person Remie    schedule 27.02.2019

Вы не указали количество потоков в TestNG.xml для поддержки параллельного выполнения. Пожалуйста, добавьте количество потоков, как указано ниже.

<suite name="Suite" parallel="tests" thread-count="2" >
person Muzzamil    schedule 27.02.2019