2017-03-03 108 views
0

我有连接到两个Android设备的Windows 7,我使用Selenium和Appium自动化应用程序,但无法在两个设备中同时运行测试。下面是我使用的代码以及来自testng.xml的内容。让我知道我错在哪里。下面的代码运行良好,但它将应用程序安装在第一个设备上,然后在第二个设备上,我想要实现的是在两个设备上同时安装应用程序。任何帮助赞赏。在TestNG Appium Selenium中运行并行测试

package ca.automation.com;

import org.testng.annotations.Test; 

import com.relevantcodes.extentreports.ExtentReports; 
import com.relevantcodes.extentreports.ExtentTest; 
import com.relevantcodes.extentreports.LogStatus; 

import io.appium.java_client.android.AndroidDriver; 

import org.testng.annotations.BeforeSuite; 
import org.testng.annotations.BeforeTest; 

import java.io.File; 
import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.List; 
import java.util.concurrent.TimeUnit; 

import org.junit.Assert; 
import org.openqa.selenium.By; 
import org.openqa.selenium.NoSuchElementException; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.ie.InternetExplorerDriver; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.WebDriverWait; 

public class StackOverflow { 

    WebDriver driver1; 
    WebDriver driver2; 
// ExtentReports report; 
// ExtentTest logger; 
// Boolean present; 
    File app = new File("App\\app_US_IT_Ananta.apk"); 


    @BeforeSuite 
    public void startReport(){ 
//  report=new ExtentReports("C:\\Anuj\\MobileAppResults.html"); 

    } 

    @Test (priority =0) 
    public void installapp() { 
     //  logger=report.startTest("VerifyAppInstalltion"); 

     DesiredCapabilities capabilities = new DesiredCapabilities(); 
     capabilities.setCapability("udid", "1015fadb1a274005"); 
     //  capabilities.setCapability("udid", "ee92ba92"); 
     capabilities.setCapability("deviceName","Android Emulator"); 
     capabilities.setCapability("platformVersion", "4.4"); 
     capabilities.setCapability("autoAcceptAlerts", true); 
     capabilities.setCapability("app", app.getAbsolutePath()); 
     try { 
      driver1 = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Test (priority =0) 
    public void installapp1() { 
     DesiredCapabilities capabilities1 = new DesiredCapabilities(); 
     capabilities1.setCapability("udid", "ee92ba92"); 
     capabilities1.setCapability("deviceName","Android Emulator"); 
     capabilities1.setCapability("platformVersion", "4.4"); 
     capabilities1.setCapability("autoAcceptAlerts", true); 
     capabilities1.setCapability("app", app.getAbsolutePath()); 
     try { 
      driver2 = new AndroidDriver(new URL("http://127.0.0.1:4730/wd/hub"), capabilities1); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

的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="Test"> 
    <classes> 
     <class name="ca.automation.com.StackOverflow"/> 
    </classes> 
    </test> <!-- Test --> 

+0

你应该使用来自TestNG的'Assert',而不是JUnit – juherr

回答

1

变化parallel="tests"parallel="methods"因为你必须并行执行的方法,因为它在你的情况。

另外,并行运行测试不会完全是100%同时执行。两种设备的执行之间会有一些滞后。尝试一个完整的脚本,并附加几个步骤。这样我们可以很容易地确定测试是同时运行的。

+0

谢谢Anish;现在,例如,如果我有8个@Test ng注释我想在第一个Android设备上执行4个并在第二个上执行4个,那么这个parallel =“methods”将起作用吗? –

+0

@AnujShrivastav你应该开一个新的问题,因为这些新的输入会改变最初的问题。 – juherr