0

我打算同時爲兩個testng.xml文件啓動Chrome瀏覽器。每個testng.xml文件都有兩個以上的測試。使用兩個testNG.XML文件同時啓動多個Chrome瀏覽器

然後,我在單個套件文件中合併了兩個xml文件,名爲parentsuite.xml文件。

當testng1.xml和testng2.xml文件每個都只有測試方法時,會啓動兩個chrome瀏覽器。但是,如果testng1.xml文件具有多個測試手段,則只有在testng1.xml文件執行完成後纔會啓動第二個chrome瀏覽器。

請看下面的例子。

testng1.xml

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

<suite name="Parallel suite 1" > 
<test name="Browser Setup"> 
    <parameter name="browser" value="Chrome" /> 
    <classes>  
    <class name="com.simpletest.LaunchBrowser"/> 
    </classes> 
</test> 

    <test name="ApplicationSignin"> 
    <paramater name = "username" value="xxxx"/> 
    <parameter name="pwd" value="1111"/> 
    <classes>  
    <class name="com.simpletest.Signin"/> 
    </classes> 
    </test> 
</suite> 

testng2.xml

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

<suite name="Parallel suite 2" > 
    <test name="Browser Setup"> 
    <parameter name="browser" value="Chrome" /> 
     <classes>  
     <class name="com.simpletest.LaunchBrowser"/> 
     </classes> 
    </test> 

    <test name="Application Signin"> 
    <paramater name = "username" value="yyyy"/> 
    <parameter name="pwd" value="2222"/> 
    <classes>  
     <class name="com.simpletest.Signin"/> 
    </classes> 
    </test> 
</suite> 

示例代碼瀏覽器啓動

public class LaunchBrowser 
{ 
    @Test 
    @Parameters("browser") 
    public void startBrowser(String browser) 
    { 
    switch(browser) 
    { 
    case "Chrome": 

     desCapabilities = DesiredCapabilities.chrome(); 
     desCapabilities.setPlatform(Platform.ANY); 
     desCapabilities.setBrowserName(DriverConstants.CHROME_BROWSER); 
     System.setProperty("webdriver.chrome.driver", chromeDriverPath); 
     driver = new ChromeDriver(); 
     driver.manage().window().maximize(); 
     System.out.println("For Browser : " + browser); 
     break; 

    case "Firefox": 
     desCapabilities = DesiredCapabilities.firefox(); 
     desCapabilities.setPlatform(Platform.ANY); 
     desCapabilities.setBrowserName(DriverConstants.FIREFOX_BROWSER); 
     driver = new FirefoxDriver(); 
     driver.manage().window().maximize(); 
     System.out.println("For Browser : " + browser); 
     break; 

    default : 
     System.out.println("Brower choice not available");  

    } 
} 

parentsuite.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 
<suite name="Selenium Test Suite" thread-count="2" preserve-order="true"> 
    <suite-files> 
    <suite-file path="testng1.xml" /> 
    <suite-file path="testng2.xml" /> 
    </suite-files> 
</suite> 

注:如何解決這個問題,而無需使用電網的概念。請幫我解決這個問題。

+0

可能是因爲在第二次測試中缺少名爲瀏覽器的參數。請將瀏覽器參數添加到第二次測試中再試一次。 – Murthi

+0

請向我們展示瀏覽器實例化代碼片段。我猜測問題只在於這一部分。 –

+0

在第一種測試方法中,應該啓動瀏覽器並在第二種測試方法中,我需要執行一些其他操作,例如:導航到stackoverflow.com。所以不需要再次打開瀏覽器。 –

回答

1

爲了讓您分拆並行的@Test方法,你需要的屬性parallel設置爲以下值之一的<suite>標籤

  • methods - 這將導致所有的@Test方法並行運行。
  • tests - 這會導致<test>標籤並行運行,但每個<test>標籤中存在的@Test方法將按順序運行。
  • - 這將導致TestNG並行運行所有測試類(測試類本質上是一個包含一個或多個@Test方法的類),但依然按順序運行@Test方法。
  • instances - 只有在存在@Factory帶註釋的構造函數時纔會涉及。

因此,您可以根據您的需要選擇其中一種並行執行策略,讓TestNG能夠並行運行您的測試。

但是所有的說法和做法,根據你在評論中向我解釋的內容,你的測試代碼需要一些修正。您沒有向您展示如何在測試類中的兩個或多個@Test方法之間共享WebDriver實例。

所以有可能一旦啓用並行執行,你會看到新的問題。

TestNG默認情況下(當通過maven surefire插件運行時,例如)不會並行運行多個套件。爲了學習如何並行運行多個套件(<suite>),請參閱我的博客文章here

相關問題