Я пытаюсь запустить два разных теста параллельно на двух разных устройствах.Я выполняю следующие шаги для запуска тестовых случаев:
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>
Выше кода должны запускаться оба теста независимо друг от друга.Но этого не происходит.Любая помощь будет оценена.