2

我正在尝试使用 appium 和 selenium 网格在 2 台设备上运行并行测试,但由于某种原因,它仅在第一个节点服务器(和第一个设备)上运行,但在第二个服务器上没有任何反应。

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

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

谢谢您的帮助 !

这是我的文件:

第一个服务器 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"
  }
}

运行硒网格:

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();
}
4

2 回答 2

0

问题是因为您既没有在 DesiredCapabilities 中提供任何独特的东西,也没有添加自定义 CapabilityMatcher。默认情况下,网格仅使用浏览器名称、版本和平台来决定将测试路由到哪个节点。

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

您可以在我的博客文章中阅读更多相关信息

于 2016-05-29T03:00:14.267 回答
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

对于节点1

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

并在您的代码中添加设备名称:'您的设备名称出现在 cmd 中的 adb 设备上'

这真的对我有用。

于 2016-05-30T09:45:09.173 回答