使用appium在多个iOS模拟器上并行执行

时间:2016-03-06 23:46:23

标签: selenium-webdriver appium

我有一个在MAC中运行的自动化框架,通过Appium打开模拟器。我想打开多个iOS模拟器,以便同时运行不同的测试用例,我有哪些选项?

3 个答案:

答案 0 :(得分:1)

从Xcode 9和Appium 1.7开始,现在可以实现。关键是wdaLocalPort能力。每个模拟器都需要自己的端口。

以下是一个例子,我使用ruby,但在其他语言中也是如此:

require 'appium_lib'

opts = {
  caps: {
    automationName: 'XCUITest',
    platformName: 'iOS',
    deviceName: 'iPhone 7',
    wdaLocalPort: 8001,
    app: 'Example.app',
  },
}

10.times do
  driver = Appium::Driver.new(opts, true)
  driver.start_driver.manage.timeouts.implicit_wait = 10
  driver.find_element(:name, 'Button').click
  driver.driver_quit
end

我无法实现并发性,因此您必须在第一个脚本的同时手动执行下一个脚本。

require 'appium_lib'

opts = {
  caps: {
    automationName: 'XCUITest',
    platformName: 'iOS',
    deviceName: 'iPhone 8',
    wdaLocalPort: 8002,
    app: 'Example.app',
  },
}

10.times do
  driver = Appium::Driver.new(opts, true)
  driver.start_driver.manage.timeouts.implicit_wait = 10
  driver.find_element(:name, 'Button').click
  driver.driver_quit
end

我还没有玩过这么多,但是当我使用两个模拟器时,我同时运行了两次测试。看看它的扩展程度会很有趣。

编辑:事实证明我可能会为实现并发而烦恼:

require 'appium_lib'

device_names = [
  'iPhone 6',
  'iPhone 6s',
  'iPhone 7',
  'iPhone 8',
]

def test(device_name, port)
  opts = {
    caps: {
      automationName: 'XCUITest',
      platformName: 'iOS',
      deviceName: device_name,
      wdaLocalPort: port,
      app: 'Example.app',
    },
  }
  driver = Appium::Driver.new(opts, true)
  driver.start_driver.manage.timeouts.implicit_wait = 10
  driver.find_element(:name, 'Button').click
  driver.driver_quit
end

device_names.each_with_index do |device_name, i|
  fork {
    10.times do
      test(device_name, 8000+i)
    end
  }
end

Process.waitall

以上内容将启动您在device_names数组中指定的模拟器数量,并对每个模拟器运行10次测试。我还写了一个更复杂的基准测试脚本。在3到4个模拟器之间,我的性能提升不到10%,因此运行4个以上并不值得,但我想这取决于你的系统。

当您启动越来越多的模拟器时,您可能会耗尽系统资源。以下是您处理该问题的方法:https://stackoverflow.com/a/46819409/310121

答案 1 :(得分:0)

1 mac中1个设备的appium的技术限制可以通过使用Sauce Lab's移动云来解决,该移动云同时运行多个模拟器/设备。您需要注册/注册才能使用它们

答案 2 :(得分:0)

检查此库https://github.com/facebook/FBSimulatorControl,它将使您能够在同一主机中运行多个IOS模拟器。