如何使用硒网格对appium运行并行测试?

时间:2018-08-06 13:45:50

标签: ruby selenium cucumber appium selenium-grid

我在机器上尝试了两个不同的appium服务器,并在一台服务器上开始了针对iOS的测试,而在另一台服务器上开始了Android测试。我也尝试在两台服务器中执行,以在不同的iOS中进行测试。

但是问题是,当我执行两个iOS时,应该在iOS1中进行的测试并非总是在iOS1上运行,然后随机运行,然后在iOS2上执行,然后在iOS2上执行,而并非总是如此。然后,我无法以这种格式并行执行测试。

对于Android + iOS,仅适用于iOS的测试。

我如何才能将appium与Ruby并行执行测试,如果不能并行运行,怎么能在线运行?

1 个答案:

答案 0 :(得分:2)

您需要正确的功能定义和要求。

从我的旧笔记(不幸的是,对于Android)来看:

停止/杀死Selenium Server,所有Appium实例和所有测试(Ruby / Cucumber)。

启动Selenium服务器

java -jar selenium-server-standalone-3.6.0.jar -role hub

保存SM_G900F.json

{
  "capabilities":
  [
    {
      "applicationName":"SM_G900F",
      "browserName":"android",
      "deviceName":"SM_G900F",
      "version":"7.0",
      "maxInstances":1,
      "platform":"Android"
    }
  ],
  "configuration":
  {
    "cleanUpCycle":2000,
    "timeout":30000,
    "proxy":"org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "url":"http://127.0.0.1:80801/wd/hub",
    "maxSession":6,
    "port":"80801",
    "bootstrap-port":"80802",
    "host": "localhost",
    "register": true,
    "registerCycle": 5000,
    "hubPort": "4444",
    "hubHost": "localhost"
  }
}

请确保更改8080180802以便为每个设备释放端口!

运行鸦片

appium --nodeconfig /path_to/SM_G900F.json -p 80801 --default-capabilities '{"udid":"BOGAA1BBB412"}'

adb devices给您带来惊喜的地方,然后再次更改80801

检查设备是否在http://127.0.0.1:4444/wd/console上正确注册

最后是红宝石:

require 'appium_lib'
opts_dut = {
    caps: {
        platformName: :android,
        version: '7.0',
        deviceName: '*',
        appPackage: 'your.package',
        appActivity: 'your.MainActivity',
        noReset: true,
        autoLaunch: false,
        automationName: 'uiautomator2'
    },
    appium_lib: {
        server_url: 'http://127.0.0.1:4444/wd/hub',
        wait_timeout: 300,
        wait_interval: 100,
        newCommandTimeout: 3000
    }
}
@T = Appium::Driver.new(opts_dut, true).start_driver
@T.find_elements(:uiautomator, "new UiSelector().textMatches(\"(?is).*SEND.*\"))")
puts @T.page_source
@T.quit

如果我记得很好,则请求deviceName和/或version只会很好。因此,如果您启动多个节点并正确指定deviceNameversion,则可以多次请求该节点,甚至可以并行请求。如果如上例所示使用通配符*,则表示任何deviceName,因此仅请求version 7.0。即使测试失败,也请确保运行@T.quit以释放设备(在挂接后将其放入)。