【问题标题】:Launch multiple Chrome Browser simultaneously using two testNG.XML Files使用两个 testNG.XML 文件同时启动多个 Chrome 浏览器
【发布时间】:2017-08-29 22:16:52
【问题描述】:

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

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

当 testng1.xml 和 testng2.xml 文件各自只有测试方法时,会启动两个 chrome 浏览器。但是如果 testng1.xml 文件有超过 1 个测试手段,则只有在 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>

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

【问题讨论】:

  • 可能是因为在第二次测试中缺少名为 browser 的参数。请在第二次测试中添加浏览器参数再试一次。
  • 请给我们看一下浏览器实例化代码sn-p。我猜测问题仅在于那部分。
  • 在第一个测试方法中,应该启动浏览器,在第二个测试方法中,我需要执行一些其他操作,例如:导航到 stackoverflow.com。所以无需再次打开浏览器。
  • @MohanKumar - 您的浏览器实例化代码在 @Test 方法中。所以我不太确定你想做什么。您能帮忙为您的代码添加更多上下文吗?如果您能帮助为您的两个类添加完整的代码 sn-p 那就太好了(您可以消除所有复杂性,只需将其缩减为 webdriver 的实例化和加载 url)
  • @KrishnanMahadevan - 我已经更新了代码,如果有任何其他问题,请告诉我们。

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


【解决方案1】:

为了让您并行分离您的 @Test 方法,您需要将属性 parallel 设置为 &lt;suite&gt; 标记中的以下值之一

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

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

但是,根据您在 cmets 中向我解释的内容,您的测试代码需要进行一些修复。您尚未展示如何在测试类中的两个或多个 @Test 方法之间共享 WebDriver 实例。

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

TestNG 默认情况下(例如通过 maven surefire 插件运行时)不会并行运行多个套件。要了解如何并行运行多个套件(&lt;suite&gt;),请参阅我的博文here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    相关资源
    最近更新 更多