Сеанс Appium, запущенный на одном устройстве в параллельном исполнении - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь запустить два разных теста параллельно на двух разных устройствах.Я выполняю следующие шаги для запуска тестовых случаев:

1) Откройте два экземпляра сервера appium, используя следующие команды

appium -p 4723 -bp 4724 --chromedriver-port 4725 -U "ZY3223QGDP"
appium -p 4726 -bp 4727 --chromedriver-port 4728 -U "ZY223XJFNS"

Я следовал приведенным ниже инструкциям appium для запуска серверов appium: https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/parallel-tests.md

2) Я создал два класса testng для хранения обоих тестовых случаев.Ниже приведен код как для классов, так и для файла tetng xml.

3) Я печатаю сессию appium в обоих тестовых случаях.Для которых печатаются разные значения.Даже журналы appium предполагают, что оба драйвера appium взаимодействуют с соответствующими серверами.

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

Тест 1

package com.qklab.register;

import java.io.File;
import java.util.HashMap;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.testng.annotations.Test;
import com.qk.automation.framework.AppiumManagerTestng;
import io.appium.java_client.AppiumDriver;

public class DeviceOneAppOne {

    @Test
    public void test1(HashMap<String,Object> testDetail) throws Exception {

        HashMap<String, String> deviceDetails = new HashMap<String, String>();
        deviceDetails.put("app_activity","com.hdfc.retail.netbanking.HDFCBank");
        deviceDetails.put("app_package","com.snapwork.hdfc");
        deviceDetails.put("appium_port","4726");
        deviceDetails.put("appium_ip","0.0.0.0");
        deviceDetails.put("udid","ZY223XJFNS");
        deviceDetails.put("device_name","moto black");
        deviceDetails.put("platform_version","8.1.0");
        deviceDetails.put("platform_name","Android");

        AppiumManagerTestng appiumManager = new AppiumManagerTestng();
        AppiumDriver appiumDriver = appiumManager.getAppiumDriverForTestng(deviceDetails);

            try {

                System.out.println("got session id : " + appiumDriver.getSessionId());

                //Take screenshot
                File srcFile=appiumDriver.getScreenshotAs(OutputType.FILE);
                File targetFile=new File("ZY223XJFNS" +".jpg");
                System.out.println(targetFile.getAbsolutePath());
                FileUtils.copyFile(srcFile,targetFile);

                appiumDriver.findElement(By.xpath("//*[@*[contains(.,'SKIP INTRODUCTION')]]")).click();

            }catch(Exception ex) {
                throw ex;
            }       
    }

}

2) Тест 2

package com.qklab.register;

import java.io.File;
import java.util.HashMap;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.testng.annotations.Test;
import com.qk.automation.framework.AppiumManagerTestng;
import io.appium.java_client.AppiumDriver;


public class DeviceTwoAppTwo {

    @Test
    public void test2(HashMap<String,Object> testDetail) throws Exception {
        HashMap<String, String> deviceDetails = new HashMap<String, String>();
        deviceDetails.put("app_activity","com.atomyes.MainActivity");
        deviceDetails.put("app_package","com.atomyes");
        deviceDetails.put("appium_port","4723");
        deviceDetails.put("appium_ip","0.0.0.0");
        deviceDetails.put("udid","ZY3223QGDP");
        deviceDetails.put("device_name","moto silver");
        deviceDetails.put("platform_version","7.0");
        deviceDetails.put("platform_name","Android");

        AppiumManagerTestng appiumManager = new AppiumManagerTestng();
        AppiumDriver appiumDriver = appiumManager.getAppiumDriverForTestng(deviceDetails);

        try {
            //Take screenshot
            File srcFile=appiumDriver.getScreenshotAs(OutputType.FILE);
            File targetFile=new File("ZY3223QGDP" +".jpg");
            FileUtils.copyFile(srcFile,targetFile);

            appiumDriver.findElement(By.xpath("//*[@text='Skip To Login']")).click();
        }catch(Exception ex) {
            Thread.sleep(10000);
            throw ex;
        }

    }


}

3) Генератор AppiumDriver

package com.qk.automation.framework;

import java.net.URL;
import java.util.HashMap;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;

public class AppiumManagerTestng {

    public AppiumDriver getAppiumDriverForTestng(HashMap<String, String> deviceDetails) throws Exception {
        AppiumDriver driverForTestng = null;
        String app_activity = deviceDetails.get("app_activity");
        String app_package = deviceDetails.get("app_package");
        String appium_port = deviceDetails.get("appium_port");
        String appium_ip = deviceDetails.get("appium_ip");
        String udid = deviceDetails.get("udid");
        String device_name = deviceDetails.get("device_name");
        String platform_version = deviceDetails.get("platform_version");
        String platform_name = deviceDetails.get("platform_name");
            try
            {
                DesiredCapabilities dc = new DesiredCapabilities();
                dc.setCapability(MobileCapabilityType.DEVICE_NAME, device_name);
                dc.setCapability(MobileCapabilityType.PLATFORM_VERSION, platform_version);
                dc.setCapability(MobileCapabilityType.PLATFORM_NAME, platform_name);
                dc.setCapability(MobileCapabilityType.UDID, udid);
                dc.setCapability(MobileCapabilityType.NO_RESET, false);
                //dc.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2");
                dc.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiautomator2");
                dc.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, app_package);
                dc.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, app_activity);
                driverForTestng = new AppiumDriver(new URL("http://" + appium_ip + ":" + appium_port + "/wd/hub"),dc);  
            }

            catch(Exception objDriverException){
                objDriverException.printStackTrace();

            }

        return driverForTestng;
    }

}

4) Testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="tests" thread-count="2">
  <test name="Test1">
    <classes>
      <class name="com.qklab.register.DeviceOneAppOne"> 
       <methods>
        <include name="test1" />
      </methods>
      </class>
    </classes>
  </test>
   <test name="Test2">
    <classes>
      <class name="com.qklab.register.DeviceTwoAppTwo"> 
       <methods>
        <include name="test2" />
      </methods>
      </class>
    </classes>
  </test> 
</suite>

Выше кода должны запускаться оба теста независимо друг от друга.Но этого не происходит.Любая помощь будет оценена.

...