【问题标题】:parallel test with appium & selenium grid使用 appium 和 selenium 网格进行并行测试
【发布时间】:2016-09-25 21:20:18
【问题描述】:

我正在尝试使用 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();
}

【问题讨论】:

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


    【解决方案1】:

    我也遇到了同样的问题,但被解决了

    第一步:在你的环境变量中添加 appium (..\Appium\node_modules.bin) Step2:为每个节点制作不同的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
    

    并在你的代码中添加 deviceName:'你的设备名称,它来自 cmd 中的 adb devices'

    这真的对我有用。

    【讨论】:

    • 你好,你能告诉我你的代码吗?我真的不明白。因为如果我有 2 个设备,我应该把哪一个放在 deviceName 中?我应该创建 2 个驱动程序(每个设备一个),但它不会并行,它将在一个设备上运行测试,然后在另一个设备上运行
    • 您可以使用 testng.xml 来指定两个设备名称,并像普通 selenium 网格一样并行运行它们。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-01-13
      • 2020-09-30
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多