2014-12-04 30 views
0

目前,我正在设置Selenium Grid以在集线器上运行测试套件并在节点上分发这些测试。Selenium Grid 2:本地集线器和2个本地节点

这个想法是让测试在集线器上执行并分布在10个节点上以进一步执行它们。对于初学者和评估网格,我建立了一个本地中心和2个本地节点。

在我的测试类中,我有4个测试,使用RemoteDriver运行测试并将集线器作为URL和配置的功能传递,它会在Node1上执行所有四个测试,并且不会将其分发到Node2。另外,它在Node1上连续运行所有4个测试。有人知道这里可能是错的吗?请找到下面的设置。

集线器配置:

C:\Proto\Selserversidedjars>java 
    -jar selenium-server-standalone-2.44.0.jar 
    -role hub -hubConfig DefaultHub.json 

节点1种配置:

C:\Proto\Selserversidedjars>java 
    -jar selenium-server-standalone-2.44.0.jar 
    -role node 
    -hub http://localhost:4444/grid/register 

节点2配置:

C:\Proto\Selserversidedjars>java 
    -jar selenium-server-standalone-2.44.0.jar 
    -role node 
    -nodeConfig DefaultNode1.json 
    -port 6666 

Defaulthub.json:

{ 
    "host": null, 
    "port": 4444, 
    "newSessionWaitTimeout": -1, 
    "servlets" : [], 
    "prioritizer": null, 
    "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher", 
    "throwOnCapabilityNotPresent": true, 
    "nodePolling": 5000, 

    "cleanUpCycle": 5000, 
    "timeout": 300000, 
    "browserTimeout": 0, 
    "maxSession": 5, 
    "jettyMaxThreads":-1 
} 

DefaultNode1.json:

{ 
    "capabilities": 
     [ 
     { 
      "browserName": "*firefox", 
      "maxInstances": 5, 
      "seleniumProtocol": "Selenium" 
     }, 
     { 
      "browserName": "*googlechrome", 
      "maxInstances": 5, 
      "seleniumProtocol": "Selenium" 
     }, 
     { 
      "browserName": "*iexplore", 
      "maxInstances": 1, 
      "seleniumProtocol": "Selenium" 
     }, 
     { 
      "browserName": "firefox", 
      "maxInstances": 5, 
      "seleniumProtocol": "WebDriver" 
     }, 
     { 
      "browserName": "chrome", 
      "maxInstances": 5, 
      "seleniumProtocol": "WebDriver" 
     }, 
     { 
      "browserName": "internet explorer", 
      "maxInstances": 1, 
      "seleniumProtocol": "WebDriver" 
     } 
     ], 
    "configuration": 
    { 
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", 
    "maxSession": 5, 
    "port": 6666, 
    "host": ip, 
    "register": true, 
    "registerCycle": 5000, 
    "hubPort": 4444, 
    "hubHost": ip 
    } 
} 

这些配置设置之后,现在,我的轮毂上启动4444端口,节点1在5555开始,节点2在6666在我的TestNG进行启动,我想执行4个测试。鉴于我有多个测试在单个类中运行,是否可以将这些测试分布在单个节点上的多个节点或多个实例上?

任何有关“如何在Node1上执行多个实例并在这种情况下向Node2分发测试(假设超过10个测试)”的帮助,我们将不胜感激。

在此先感谢!

回答

0

连续或平行运行取决于你如何触发你的测试,只是不使用网格自动发生。网格只是帮助在各种节点上分发测试 - 如果测试是串行发送的,它将串行分发,如果并行发送,它将分发到各个节点上。

您可能会考虑使用TestNG来并行运行测试,或者您可以冒险实现自己的并行性。

你提到你的单个类有多个测试 - 使用testng,你可以将parallel属性设置为将触发单个线程中的每个测试的方法,这些测试将被发送到网格,并且集线器将负责提取一个免费节点并执行测试。

注意编写线程安全驱动程序启动代码,以便每个线程都有自己的驱动程序实例。

+0

感谢您的快速回复!你能解释一下threadsafe驱动启动代码吗? – startedFromTheBottom 2014-12-05 22:01:13

+0

测试套件中使用parallel =“tests”vs parallel =“methods”的区别是什么?我们在每个测试类中都有方法和方法之后有多个测试。 – startedFromTheBottom 2014-12-16 03:50:58

+0

请提出新问题,而不是在评论中 - 帮助人们搜索答案。测试代表xml中的标记,它可以包含任意数量的类,方法等。方法是每个@Test方法 – 2014-12-16 06:12:38