【问题标题】:Multiple iOS Simulators on same Appium Session同一个 Appium 会话上的多个 iOS 模拟器
【发布时间】:2016-03-15 14:33:41
【问题描述】:

我有一个在安装了 Appium 和 Xcode 的 Mac 上运行的自动化框架。我想一次在多个模拟器中运行我的测试用例。如何在同一台机器上打开多个模拟器?

【问题讨论】:

    标签: ios appium


    【解决方案1】:

    根据 Appium 文档,一台机器是不可能的 (http://appium.io/slate/en/master/?csharp#appium-platform-support)。很可能是因为 Apple Instruments 一次只允许控制一台设备。

    但是,如果您有 Selenium Grid,这是可能的。您可以在此处找到这些说明:http://appium.readthedocs.org/en/stable/en/advanced-concepts/grid/ 这需要使用多台 OS X 机器作为节点。

    【讨论】:

      【解决方案2】:

      从 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-24
        • 1970-01-01
        • 2017-11-11
        • 1970-01-01
        • 1970-01-01
        • 2017-11-03
        • 2013-08-29
        • 1970-01-01
        相关资源
        最近更新 更多