我在机器上尝试了两个不同的appium服务器,并在一台服务器上开始了针对iOS的测试,而在另一台服务器上开始了Android测试。我也尝试在两台服务器中执行,以在不同的iOS中进行测试。
但是问题是,当我执行两个iOS时,应该在iOS1中进行的测试并非总是在iOS1上运行,然后随机运行,然后在iOS2上执行,然后在iOS2上执行,而并非总是如此。然后,我无法以这种格式并行执行测试。
对于Android + iOS,仅适用于iOS的测试。
我如何才能将appium与Ruby并行执行测试,如果不能并行运行,怎么能在线运行?
答案 0 :(得分:2)
您需要正确的功能定义和要求。
从我的旧笔记(不幸的是,对于Android)来看:
停止/杀死Selenium Server,所有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"}'
adb devices
给您带来惊喜的地方,然后再次更改80801
检查设备是否在http://127.0.0.1:4444/wd/console上正确注册
最后是红宝石:
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
,则可以多次请求该节点,甚至可以并行请求。如果如上例所示使用通配符*
,则表示任何deviceName
,因此仅请求version
7.0
。即使测试失败,也请确保运行@T.quit
以释放设备(在挂接后将其放入)。