如何运行使用同一个数据提供者并行测试selenium

How to run selenium test in parallel using the same dataprovider

我有一个场景,我需要使用相同的数据提供程序运行 我的 selenium 测试并行。根据我的阅读,这是可能的,但无法做到 work.I 在一台机器上有一个集线器和一个节点 运行ning,在另一台机器上有另一个节点 运行ning。

我的数据提供者

// 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){}

XML

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

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

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

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

但是,如果您想在多个并行线程中运行 单个测试class 的内容,您需要重新设计框架中的is-a 和has-a 关系。这是如何完成此操作的详细示例:

http://automatictester.co.uk/2015/04/11/parallel-execution-on-method-level-in-selenium-testng-framework

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

根据我的经验,如果您开始将数据提供程序与 Selenium 结合使用,您可能会遇到整体测试方法的问题。也许您尝试在 UI 级别上进行过多的自动化,而不是将测试向下推到堆栈中,例如API级。