Ruby 如何使用selenium网格与appium运行并行测试?

Ruby 如何使用selenium网格与appium运行并行测试?,ruby,selenium,cucumber,appium,selenium-grid,Ruby,Selenium,Cucumber,Appium,Selenium Grid,我在我的机器上试用了两台不同的appium服务器,在一台服务器上启动iOS测试,在另一台服务器上启动Android测试。我也尝试在两台服务器上执行,以在不同的iOS中进行测试 但问题是,当我执行两个iOS时,应该在iOS1中进行的测试在iOS中进行,但并不总是有时间在iOS1和shuffle上运行,然后在iOS2上执行,否则,所有测试都会陷入混乱。那么我不能以这种格式并行执行测试 对于Android+iOS,只有对iOS的测试才能进行 如何使用appium和Ruby并行执行测试,如果无法并行运行

我在我的机器上试用了两台不同的appium服务器,在一台服务器上启动iOS测试,在另一台服务器上启动Android测试。我也尝试在两台服务器上执行,以在不同的iOS中进行测试

但问题是,当我执行两个iOS时,应该在iOS1中进行的测试在iOS中进行,但并不总是有时间在iOS1和shuffle上运行,然后在iOS2上执行,否则,所有测试都会陷入混乱。那么我不能以这种格式并行执行测试

对于Android+iOS,只有对iOS的测试才能进行


如何使用appium和Ruby并行执行测试,如果无法并行运行,如何在线运行?

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

从我的旧笔记(不幸的是Android):

停止/杀死Selenium服务器、所有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"
  }
}
确保将
80801
80802
更改为每个设备的空闲端口

运行应用程序:

appium --nodeconfig /path_to/SM_G900F.json -p 80801 --default-capabilities '{"udid":"BOGAA1BBB412"}'
其中udid是
adb设备
提供给您的,并且再次更改
801

检查设备是否在上正确注册

最后在ruby中:

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
只能很好地工作。因此,如果您启动多个节点并正确指定
deviceName
version
,那么您可以多次请求它,即使是并行的。如果使用通配符
*
,如上述示例所示,则表示任何
设备名称
,因此仅请求
版本
<7.0。确保运行
@T.quit
以释放设备,即使您的测试失败(挂接后将其放入)

说到使用ruby的Appium,你是在使用Cucumber Gherkin ruby设置吗?@Vighnespai,我在使用这个设置