使用两个testNG.XML文件同时启动多个Chrome浏览器

时间:2017-08-29 11:50:07

标签: xml selenium selenium-webdriver testng selenium-chromedriver

我打算同时为两个testng.xml文件启动Chrome浏览器。每个testng.xml文件都有两个以上的测试。

然后,我将两个xml文件合并到名为 parentsuite.xml 文件的单个套件文件中。

当testng1.xml和testng2.xml文件各自只有test方法时,会启动两个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>

注意:如何在不使用网格概念的情况下解决此问题。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

为了让您平行拆分@Test种方法,您需要将属性parallel设置为<suite>标记中的以下值之一

  • methods - 这会导致所有@Test方法并行运行。
  • tests - 这会导致<test>个标记并行运行,但每个@Test标记中存在的<test>方法将按顺序运行
  • classes - 这将导致TestNG并行运行所有测试类(测试类本质上是一个包含一个或多个@Test方法的类),但仍然是@Test方法按顺序运行。
  • instances - 只有在@Factory带注释的构造函数时才会涉及。

因此,您可以根据需要选择其中一个并行执行策略,让TestNG并行运行测试。

但所有的说法和完成,按照您在评论中向我解释的内容,您的测试代码需要一些修复。您尚未展示如何在测试类中的两个或多个WebDriver方法之间共享@Test个实例。

因此,有可能一旦启用并行执行,您将看到新问题。

默认情况下,

TestNG(例如,通过maven surefire插件运行时)并不会并行运行多个套件。要了解如何并行运行多个套件(<suite>),请参阅我的博文here