使用testNG在多个浏览器实例中并行地在一个类中运行多个测试

时间:2012-07-17 10:50:30

标签: selenium webdriver testng

请告诉我使用Web-driver + TestNG框架的休假方案的示例代码。

一个班级有多个考试。在运行这些测试时,它应该同时在同一浏览器的多个实例(Ex:Firefox)中并行运行所有测试。因此,对于每个测试,它都应该打开一个新的浏览器实例。

1 个答案:

答案 0 :(得分:2)

到目前为止我的解决方案是这样的:

public MyTestClass {
   SupportedBrowser browser;
   private static ThreadLocal<WebDriver> threadLocalDriver = new ThreadLocal<WebDriver>();

   @DataProvider (name = "getBrowsers")
   public Object[][] getBrowsers {
      return Object[][] {
          {
              SupportedBrowser.FIREFOX;
          },
          {
              SupportedBrowser.CHROME;
          }
      };
   }

   @Factory (dataProvider = "getBrowsers")
   public MyTestClass(SupportedBrowser browser) {
      this.browser = browser;
   }

   @BeforeMethod
   public void setup()
   {
      threadLocalDriver.set(browser.getDriver());
   }
   @Test
   public void test1()
   {
       WebDriver driver = threadLocalDriver.get();
       //do stuff
   }
   @AfterMethod
   public void tearDown()
   {
       WebDriver driver = threadLocalDriver.get();
       driver.quit();
   }
}

这是我的枚举:

public enum SupportedBrowser {
    FIREFOX, CHROME;  //add more as needed

    public getDriver() {
       if(this == SupportedBrowser.FIREFOX) {
           return new RemoteDriver(hubAddress, DesiredCapabilities.firefox());  //alternatively could be new FirefoxDriver()
       }
       else {
           return new RemoteDriver(hubAddress, DesiredCapabilities.chrome());
       }

    }
}

请原谅不良的代码约定,我没有在IDE中写这个(虽然我已经使用过这样的东西但它有效)。 该类在每个不同的浏览器之前运行一次。每种方法都有自己独立的驱动程序,确保您的测试可以同时运行。它还允许每个方法采用自己的DataProvider,以防您需要使用不同参数运行多次的测试方法。还要确保将parallel属性设置为testng.xml文件中的“method”级别。

我的代码唯一的问题是确保驱动程序在测试失败时退出。现在,这种方法将关闭失败的测试关闭到selenium网格(使用-timeout)。请参阅我的问题:Sharing driver between @BeforeMethod and @AfterMethod in TestNG

编辑:我现在已经在整个线程中共享驱动程序的代码中添加了一个ThreadLocal变量,因此您可以在@AfterMethod中调用driver.quit()。