使用appium& amp;并行测试硒网格

时间:2016-05-27 13:44:42

标签: android selenium parallel-processing appium selenium-grid2

我尝试使用appium& amp ;;尝试在2台设备上运行并行测试selenium grid但由于某种原因它只在第一个节点服务器(和第一个设备)上运行,但在第二个服务器上没有任何事情发生。

此外,如果我关闭第一台服务器并运行测试,那么测试将在第二台服务器上运行,因此服务器不会出现任何问题。

为了将其设置为并行,我必须提供一些参数吗?

感谢您的帮助!

以下是我的文件:

第一个服务器json文件:

{
  "capabilities":
  [
    {
      "browserName": "SamsungS6",
      "deviceName": "04157df40862d02f",
      "version":"6.0.1",
      "maxInstances": 3,
      "platform":"ANDROID"
    }
  ],
  "configuration":
  {
    "cleanUpCycle":2000,
    "timeout":30000,
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "url":"http://localhost:4491/wd/hub",
    "host": "localhost",
    "port": 4491,
    "maxSession": 5,
    "register": true,
    "registerCycle": 5000,
    "hubPort": 4433,
    "hubHost": "localhost"
   }
}

第二个服务器json文件:

{
  "capabilities":
  [
    {
      "browserName": "OnePlusOne",
      "deviceName": "14b2b276",
      "version":"6.0.1",
      "maxInstances": 3,
      "platform":"ANDROID",
      "platformName":"ANDROID"
    }
  ],
  "configuration":
  {
    "cleanUpCycle":2000,
    "timeout":30000,
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "url":"http://localhost:4490/wd/hub",
    "host": "localhost",
    "port": 4490,
    "maxSession": 5,
    "register": true,
    "registerCycle": 5000,
    "hubPort": 4433,
    "hubHost": "localhost"
  }
}

运行selenium网格:

java -jar selenium-server.jar -role hub -port 4433 

运行第一个场景

node.exe node_modules\appium\bin\appium.js --nodeconfig myfirstscenario.json -p 4490 -U 14b2b276 -bp 5490 --chromedriver-port 6490

运行第二种方案

node.exe node_modules\appium\bin\appium.js --nodeconfig mysecondscenario.json -p 4491 -U 04157df40862d02f -bp 5491 --chromedriver-port 6491

测试

@BeforeTest(alwaysRun = true)
public void setUp(){

    try {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "ANDROID");
        capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "");
        capabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, appPackage);
        capabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, appActivity);

        driver = new AndroidDriver(new URL("http://localhost:4433/wd/hub"), capabilities);
        new WebDriverWait(driver, 60);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }

}

@Test
public void test(){
    System.out.println("hello world");

    try {
        sleep(6000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}


@AfterTest(alwaysRun = true)
public void closeDriver(){
    driver.quit();
}

2 个答案:

答案 0 :(得分:0)

问题是因为您没有提供DesiredCapabilities中唯一的任何内容,也没有添加自定义的CapabilityMatcher。默认情况下,Grid仅使用browserName,version和platform来决定将测试路由到哪个节点。

这是解决问题的一种方法。将名为“applicationName”的新密钥添加到nodeConfig.json,并分别设置“OnePlusOne”和“SamsungS6”的值。然后,在测试中将所需的名为“applicationName”的新功能添加到所需的功能中,然后分别设置“OnePlusOne”和“SamsungS6”的值。在此之后,您的测试将被路由到正确的设备。

您可以在我的博文here中了解更多相关信息。

答案 1 :(得分:0)

我也面临同样的问题,但已经通过

解决了

步骤1:在环境变量中添加appium(.. \ Appium \ node_modules.bin) 第2步:为每个节点制作差异json。

节点1的

 {   "capabilities":
    [
      {
        "version":"6.0",
        "maxInstances": 1,
        "platform":"ANDROID",
        "newCommandTimeout":"30",
        "deviceReadyTimeout":5
      }
    ],   "configuration":   {
    "cleanUpCycle":2000,
    "timeout":10800,
    "url":"http://127.0.0.1:4723/wd/hub",
    "host": "127.0.0.1",
    "port": 4723,
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "maxSession": 1,
    "register": true,
    "registerCycle": 5000,
    "hubPort": 4444,
    "hubHost": "127.0.0.1"   } }
节点2的

 {
  "capabilities":
    [
      {
        "version":"5.0.2",
        "maxInstances": 1,
        "platform":"ANDROID",
        "newCommandTimeout":"30",
        "deviceReadyTimeout":5
      }
    ],
  "configuration":
  {
    "cleanUpCycle":2000,
    "timeout":10800,
    "url":"http://127.0.0.1:4733/wd/hub",
    "host": "127.0.0.1",
    "port": 4733,
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "maxSession": 1,
    "register": true,
    "registerCycle": 5000,
    "hubPort": 4444,
    "hubHost": "127.0.0.1"
  }
}

现在要运行集线器,我已经在批处理文件中进行了

java -jar %cd%\selenium-server-standalone-2.52.0.jar -role hub http://127.0.0.1:4444/grid/console

for node1

appium -a 127.0.0.1 -p 4723 --no-reset --bootstrap-port 4728 -U 192.168.56.101:5555 --nodeconfig %cd%\5555appium1.json

和节点2

appium -a 127.0.0.1 -p 4733 --no-reset --bootstrap-port 4738 -U 4d00af03525c80a1 --nodeconfig %cd%\4d00appium2.json

并在您的代码中添加deviceName:'您的设备名称来自add设备cmd'

这对我有用。