ruby - 如何使用 selenium 网格对 appium 运行并行测试?
问题描述
我在我的机器上尝试了两台不同的 appium 服务器,在一台服务器上启动 iOS 测试,在另一台服务器上启动 Android 测试。我也尝试在两台服务器上执行以在不同的 iOS 中进行测试。
但问题是,当我执行两个 iOS 时,应该在 iOS1 中发生的测试在 iOS 中发生,但并不总是有时间在 iOS1 上运行并随机播放,然后在 iOS2 上执行,如果没有,所有的测试都会变得混乱。然后我不能以这种格式并行执行测试。
对于 Android + iOS,仅对 iOS 进行测试即可。
如何使用 appium 和 Ruby 并行执行我的测试,如果不能并行运行,我该如何在线运行?
解决方案
您需要适当的功能定义和请求。
从我的旧笔记(不幸的是Android):
停止/杀死 Selenium 服务器、所有 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:
appium --nodeconfig /path_to/SM_G900F.json -p 80801 --default-capabilities '{"udid":"BOGAA1BBB412"}'
udid 在哪里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
那么您甚至可以并行多次请求它。如果您*
在上面的示例中使用通配符,则表示 any deviceName
,因此只version
7.0
请求。@T.quit
即使您的测试失败,请确保运行以释放设备(在挂钩后将其放入)。
推荐阅读
- javascript - 在下一个路由调用中,在一个处理函数中的请求对象上设置的值丢失(未定义)
- python - 如何在 /accounts/register 处修复 UnboundLocalError
- php - 如何根据从另一个外键/ Laravel 6显示的外键显示表格
- python - Jupyter Notebook 500 内部服务器错误属性错误模块“打字”没有属性“AsyncGenerator”
- azure - 如何在 Azure Function 的 EventHubTrigger 连接字符串中为本地环境设置代理
- python - 用于在 python 中循环时匹配字母、数字和特殊章程的正则表达式
- python - 根据 df1 中的值在 df2 中保留一列
- node.js - 尝试在 Docker 中更新 NPM:代码 EISDIR
- python - 使用 SQLite3 TypeError 在 Python 中出现参数错误:+ 的不支持的操作数类型:'sqlite3.Cursor' 和 'str'
- c# - 在以前的属性中选择 null