如何使用selenium网格在多个浏览器中并行或串行运行测试套件

时间:2015-07-22 14:40:29

标签: xml selenium testng selenium-grid

如何使用selenium网格在多个浏览器中并行或串行运行测试套件。 我有3个xml文件,一个chrome.xml(包含我在chrome中运行的所有测试),以及一个firefox.xml(包含我在firefox中运行的所有测试),testng.xml包含两个作为套件。

  

Chrome.xml

 <suite name="Chrome">
<listeners>
    <listener class-name="ww5.listener.Listener" />
</listeners>
<test name="v5">
  <parameter name="browser" value="chrome"/>
  <classes>
        <class name="ww5.testcases.version.version" ></class> 
        <class name="ww5.testcases.loginSuite.LoginTest" ></class> 
        <class name="ww5.testcases.loginSuite.LogoutTest" ></class>
   </classes>
</test>
</suite>
  

firefox.xml

<suite name="Firefox">
<listeners>
    <listener class-name="ww5.listener.Listener" />
</listeners>
<test name="v5">
  <parameter name="browser" value="firefox"/>
  <classes>
        <class name="ww5.testcases.version.version" ></class> 
        <class name="ww5.testcases.loginSuite.LoginTest" ></class> 
        <class name="ww5.testcases.loginSuite.LogoutTest" ></class>
   </classes>
</test>
</suite>
  

的testng.xml

<suite name="My Project" parallel="tests">   
<listeners>
    <listener class-name="ww5.listener.Listener" />
</listeners>
  <suite-files>
     <suite-file path="./Chrome.xml" />
     <suite-file path="./firefox.xml" />
 </suite-files>
</suite>

感谢高级,我正在使用页面对象模型,因此每个浏览器的套件文件的原因。

1 个答案:

答案 0 :(得分:1)

  1. 使您的WebDriver线程安全。
  2. @BeforeTest中初始化您的WebDriver并使用quit()中的@AfterTest
  3. 您可以在我的一个问题下找到一个示例:Parameterized Selenium Tests in Parallel with TestNG

    <强>更新

    如何使您的WebDriver线程安全:

      private List<WebDriver> webDriverPool = Collections.synchronizedList(new ArrayList<WebDriver>());
      private ThreadLocal<WebDriver> driverThread;
    
      @BeforeTest()
      public void beforeTest() {
          //...
          this.driverThread   = new ThreadLocal<WebDriver>() {
            @Override
            protected WebDriver initialValue() {
              WebDriver webDriver = new RemoteWebDriver(...);
              webDriverPool.add(webDriver);
              return webDriver;
            }
          };
      }
    
      @AfterTest(alwaysRun = true)
      public void afterTest() {
        for (WebDriver driver : this.webDriverPool) {
          driver.quit();
        }
      }
    
      // Use this method instead of driver.get()
      public WebDriver getDriver() {
        return this.driverThread.get();
      }
    
    }