下面描述的问题是我几周来一直在努力解决的问题。我正在尝试使用 2个真实的Android物理设备上的testng.xml文件运行我的appium并行测试。所以,这是故事: 我的Eclipse项目中有2个包(每个真正的android设备的每个包),每个包包含几个只属于该包的页面对象类(如主页,查找游轮,选择选项,付款等)和一个这是一个实际(冒烟)测试的类。当我从Appium UI打开appium服务器并手动启动它时,每个移动设备的每个 smoke 测试运行都非常顺畅。但问题来自于我决定在其适当的移动设备上并行运行每次冒烟测试。使用TestNG.xml文件并不适合我。发生了什么是testNG.xml文件需要一个冒烟测试脚本并且仅在一个Android设备上运行它(随机选择它们甚至认为adb设备显示两个android设备正确连接),而不是第二个冒烟测试脚本并在同一个Android设备上运行它。我在远程Selenium Grid上注册了2个appium服务器实例 - 没有帮助;我在本地Selenium Grid上注册了2个appium服务器实例 - 没有帮助;我已经从脚本中以编程方式打开了2个appium服务器实例 - 没有帮助。如果有人已经在真正的Android设备上执行了并行appium / selenium测试,请提供建议。以下是我的testNG.xml文件的技术说明
我已经尝试过testNG.xml文件的变种:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel = "classes" thread-count = "2" verbose = "1">
<test name = "SomeTest">
<classes>
<class name="package1.SamsungGalaxyTab4Smoke_Test"/>
<class name="package2.SamsungGalaxyS5SmokeTest"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
*******************************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel = "methods" thread-count = "2" verbose = "1">
<test name = "SomeTest">
<classes>
<class name="package1.SamsungGalaxyTab4Smoke_Test"/>
<class name="package2.SamsungGalaxyS5SmokeTest"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
********************************************************************************
<?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" verbose = "1">
<test name = "Test1">
<classes>
<class name="package1.SamsungGalaxyTab4SmokeTest"/>
</classes>
</test>
<test>
<classes>
<class name="package2.SamsungGalaxyS5SmokeTest"/>
</test> <!-- Test -->
</suite> <!-- Suite -->
以下是冒烟测试所需的功能并启动服务器脚本:
第一个Android设备
@BeforeMethod
public void setup() throws Exception, IOException, MalformedURLException {
ServerArguments serverArguments = new ServerArguments();
serverArguments.setArgument("--address", "10.100.225.196");
serverArguments.setArgument("--local-timezone", true);
serverArguments.setArgument("--port", "5008");
serverArguments.setArgument("--session-override", true);
AppiumServer appiumserver = new AppiumServer(serverArguments);
if (appiumserver.isServerRunning()){
appiumserver.stopServer();
}
appiumserver.startServer();
if (appiumserver.isServerRunning()){
System.out.println("Appium server for Galaxy S5 has been started successfully" );
}else {
System.out.println("Appium server for Galaxy S5 has not been started successfully" );
}
Thread.sleep(10000);
DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Appium");
cap.setCapability(MobileCapabilityType.DEVICE_NAME, "Android device");
cap.setCapability("--udid", "69d3br21");
cap.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "5.1.1");
cap.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");
cap.setCapability(MobileCapabilityType.TAKES_SCREENSHOT, true);
cap.setCapability(AndroidMobileCapabilityType.DEVICE_READY_TIMEOUT, 60);
driver2 = new RemoteWebDriver(new URL("http://10.100.225.196:5008/wd/hub"), cap);
第二个Android设备
@BeforeMethod
public void setup() throws Exception, IOException, MalformedURLException {
ServerArguments serverArguments = new ServerArguments();
serverArguments.setArgument("--address", "10.100.225.196");
serverArguments.setArgument("--local-timezone", true);
serverArguments.setArgument("--port", "4723");
serverArguments.setArgument("--session-override", true);
AppiumServer appiumserver = new AppiumServer(serverArguments);
if (appiumserver.isServerRunning()){
appiumserver.stopServer();
}
appiumserver.startServer();
if (appiumserver.isServerRunning()){
System.out.println("Appium server for Galaxy Tab4 has been started successfully" );
}else {
System.out.println("Appium server for Galaxy Tab4 has not been started successfully" );
}
Thread.sleep(10000);
DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Appium");
cap.setCapability(MobileCapabilityType.DEVICE_NAME, "GalaxyTab4");
cap.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
cap.setCapability("--udid", "d66f5f10");
cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "5.1.1");
cap.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");
cap.setCapability(MobileCapabilityType.TAKES_SCREENSHOT, true);
cap.setCapability(AndroidMobileCapabilityType.DEVICE_READY_TIMEOUT, 60);
driver = new RemoteWebDriver(new URL("http://10.100.225.196:4723/wd/hub"), cap);
正如我之前解释的那样,问题是testNG.xml只在一台设备上运行 smoke 测试,而不是同时在两台设备上并行运行。如果出现问题,请给我一个提示。