Java 如何使用相同的数据提供程序并行运行selenium测试

Java 如何使用相同的数据提供程序并行运行selenium测试,java,selenium-webdriver,testng,testng-dataprovider,Java,Selenium Webdriver,Testng,Testng Dataprovider,我有一个场景,需要使用相同的数据提供程序并行运行selenium测试。据我所知,这是可能的,但无法让它工作。我有一个集线器和一个节点在一台机器上运行,另一个节点在另一台机器上运行 我的数据提供者 // Data provider for Storage Rule Suite @DataProvider(name = "StorageRuleDataProvider", parallel =true) public static Object[][] getStorageData(Method m

我有一个场景,需要使用相同的数据提供程序并行运行selenium测试。据我所知,这是可能的,但无法让它工作。我有一个集线器和一个节点在一台机器上运行,另一个节点在另一台机器上运行

我的数据提供者

// Data provider for Storage Rule Suite
@DataProvider(name = "StorageRuleDataProvider", parallel =true)
public static Object[][] getStorageData(Method m) {
    return TestUtil.getData(m.getName(), TestBase.storageSuite);
}
我的测试

@Test(groups = { "CreateNewStorageRule" }, dependsOnGroups = { "StoragePage" }, dataProviderClass = TestDataProvider.class, dataProvider = "StorageRuleDataProvider", threadPoolSize = 20)
public void createNewStorageRuleTest(Hashtable<String, String> data){}
@Test(groups={“CreateNewStorageRule”},dependsOnGroups={“StoragePage”},dataProviderClass=TestDataProvider.class,dataProvider=“StorageRuleDataProvider”,threadPoolSize=20)
public void createNewStorageRuleTest(哈希表数据){}
XML

<suite name="Storage Rule Suite" parallel="tests" data-provider-thread-count="20"  >


当我在xml文件中运行测试时,我在每个节点上打开了两组浏览器,但当它尝试登录时,有时它在一个浏览器中输入两次凭据,而在另一个浏览器中什么也不输入,有时在一个浏览器中什么也不输入。

首先,必须使用
parallel=“methods”
以并行运行@Test方法。第二:我遇到了一个类似的问题,在同一个浏览器中执行了更多的测试方法,我通过使我的WebDriver线程安全解决了这个问题。

您所描述的是非线程安全Selenium测试自动化框架的经典示例。在大多数情况下,您可以通过为每个测试类提供一个驱动程序实例,并在单个线程中运行该类中的所有测试来解决这个问题

然而,若您想在多个并行线程中运行单个测试类的内容,则需要重新设计框架中的is-a&has-a关系。下面是一个详细的示例,说明了如何做到这一点:

尽管如此,这可能会给测试自动化增加额外的工作和额外的竞争力。我会三思而后行,为什么要并行运行使用数据提供程序的Selenium测试方法,并尝试回答这个问题,如果您真的需要这样做的话


根据我的经验,如果您开始将数据提供者与Selenium相结合,您可能会在整体测试方法上遇到问题。也许您试图在UI级别上实现太多的自动化,而不是将测试向下推到API级别。

有很多方法可以使其线程安全。下面是我针对类似问题提出的Stackoverflow问题:这里您可以看到一个关于如何使WebDriver线程安全的示例。