我在安装了Appium和Xcode的Mac上运行自动化框架。我想一次在多个模拟器中运行我的测试用例。如何在同一台机器上打开多个模拟器?
答案 0 :(得分: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计算机作为节点。
答案 1 :(得分:0)
从Xcode 9和Appium 1.7开始,现在可以实现。关键是≡
能力。每个模拟器都需要自己的端口。
以下是一个例子,我使用ruby,但在其他语言中也是如此:
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
数组中指定的模拟器数量,并对每个模拟器运行10次测试。我还写了一个更复杂的基准测试脚本。在3到4个模拟器之间,我的性能提升不到10%,因此运行4个以上并不值得,但我想这取决于你的系统。
当您启动越来越多的模拟器时,您可能会耗尽系统资源。以下是您处理该问题的方法:https://stackoverflow.com/a/46819409/310121