2016-03-15 28 views

回答

0

由於Xcode 9和Appium 1.7,現在可以實現了。關鍵是wdaLocalPort的能力。每個模擬器都需要自己的端口。

下面是一個例子,我使用的紅寶石,但它會在其他語言的相似,以及:

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

相關問題