知道 selenium grid2 可以提供并行化。
可是怎么把它应用到 Appium 上啊,研究了一个礼拜一筹莫展。
希望大家能给点儿思路,谢谢~
并行化做的好痛苦啊!!
----------目前的一些进展,初步实现并行化---------
---希望对大家有所帮助---
步骤:
1.下载 selenium-server-standalone-2.41.0.jar
地址:http://selenium-release.storage.googleapis.com/index.html?path=2.41/
2.启动配置 nodeconfig.json
3.启动命令行启动 hub(已经安装了 java jdk)java -jar selenium-server-standalone-2.41.0.jar -role hub
4.启动 appium server
5.能在 http://localhost:4444/grid/consolehub 上注册的 node中找到
6.执行测试脚本。
detail:
1.如何配置 nodeconfig.json
感谢 @seveniruby 在 3 楼提供重要思路---修改 nodeconfig 文件。
感谢 @arnox 在 9 楼提到
{
Grid node config file:
https://github.com/appium/appium/blob/master/docs/en/grid.md
}
ps:官方的文档 grid.md 中"host": ,没有加上双引号的,估计是它的疏漏。应改为"host": ""
感谢 @vigossjjj 在 19 楼的 nodeconfig.json 源码
2.测试脚本修改
self.driver = webdriver.Remote(
command_executor='http://*.*.*.*:4723/wd/hub',
desired_capabilities={
'browserName': '',
'device': 'iPhone Simulator',
'platform': 'Mac',
'version': '7.1',
'app': app_remote
})
ps:command_executor 中 *.*.*.*写的是要执行此测试用例的 node(appium server) 的 ip 地址.
存在的问题:
1.hub 端不知道如何获取 node 的测试信息
2.如果执行的测试用例触发 app 漏洞,如何定位 app 出错位置 愁人啊!
希望大家给点思路。
需要对 Appium 的源码进行更改吗?
nodeconfig 参数可以做到. 不过比较坑的是, 因为 appium 会固定占用 2 个端口, 所以几个 pc 理论上只能用来同时控制一个手机.
所以为了避免冲突, 你需要调整对应的端口数字, 4723 和 4724. 这两个端口在参数里面貌似不能完全修改, 所以还需要修改代码
当然不知道新版本怎么样了
#3 楼 @seveniruby 虽然不是很懂,不过先谢谢。。……_^
我想法是一个 Server(hub) 然后 有多个 Client,每个 Client 控制一个手机或者模拟器。n 个 client 分别执行不同的测试用例......以达到并行测试的目的。
所以不是很明白 “几个 pc 理论上只能用来同时控制一个手机” 是什么意思?
我是用 appium.dmg 安装的,不是通过命令行,这样还可以修改 nodeconfig 参数 或者修改代码吗?(是不是最好修改了代码后通过命令行安装?)
并行化这个问题纠结了好久,实在是不知道从何下手,谢谢了~
是这个文件吗?可是找不到它啊
下个月等 1.0 放出来, 我会做个完整的 grid 模型给大家做参考.
#7 楼 @seveniruby 嗯~ 太好了!
因为马上就是毕设的中期检查,所以想抓紧把并行化做出来。我只是想实现一台 PC 一部手机就好。如果 appium server 是 grid 里的 client ,那 hub 的角色由谁来充当呢?
Grid node config file:
https://github.com/appium/appium/blob/master/docs/en/grid.md
Grid Hub 你需要自己启用啊,和 selenium Grid2.0 hub 启用一样的
#11 楼 @seveniruby 不用改代码 我一直用的好好的 #11 楼 @seveniruby
#12 楼 @vigossjjj 你是通过参数配置修改端口的吗
#12 楼 @vigossjjj 你好,我尝试了一下编写 nodeconfig.json 文件,我已经启动了 hub 端口默认 4444.但是启动 appium server 的时候报错。你的 nodeconfig 文件是怎么写的啊。
报错信息为:
好难过啊!
报错问题已解决:代码第 17 行 把 127.0.0.1 改为 “127.0.0.1” 也就是加上双引号。
ps:官方的文档 grid.md 中是没有加上双引号的,估计是它的疏漏。
#17 楼 @lucktail @seveniruby 多手机连接肯定没问题的,用了半年了.....
#19 楼 @vigossjjj 嗯 谢了~ 那个 “browserName”:“IOS_TestAnget1” 是什么意思啊 我的 “browserName” 是空着的
#19 楼 @vigossjjj 我是之前看 appium 的 google groups 里面提到, 说是因为端口会导致一个 pc 只能同时连接一个手机端. 你有没有看过, 如果是同时连接多个手机的时候, 端口是如何分配的? adb forward 的端口会根据你配置的启动端口一直 +1 吗
#21 楼 @seveniruby Android 的没研究,iOS 的本身一台机器也只能实例一个 instrument 也就是一个 iphone 我是多台 Mac 分布执行 #21 楼 @seveniruby
#23 楼 @vigossjjj 晕 他的问题是一个电脑要连接多个手机吧
我也在弄这块,请问楼主实现了吗?
#23 楼 @seveniruby 你可以试试用多个端口启动多个服务 一个手机指一个 server 端口
服务器本森会开 2 个端口, 4723 和 4724, 麻烦的是 4724 必须和手机里面的 app 启动的端口保持一致, 所以估计还是需要代码. appium 估计也会考虑这个问题吧
#30 楼 @benlooking 可以自己新建一个 nodeconfig.json 文件。 目前一台电脑只能连接一部手机
这个问题,有人知道怎么解了吗
#3 楼 @seveniruby 请问如何做到一个 PC 机对多个终端设备进行测试?代码应该如何改,nodeconfig.json 文件应该怎么配置?
{
"capabilities":
[
{
"platformName":"iOS",
"platformVersion":"7.1.2",
"deviceName":"iPhone4s",
"app":"com.ios.app"
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":30000,
"proxy":"org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://0.0.0.0:5000/wd/hub",
"host":"0.0.0.0",
"port":5000,
"maxSession":10,
"register":true,
"registerCycle":1000,
"hubPort":4444,
"hubHost":"0.0.0.0"
}
}
#36 楼 @wangcityboy 新版本不需要修改代码了, 通过参数可以设置不同的端口了. iOS 的我不熟悉, 你问其他同学吧. 买不起 iphone
#37 楼 @seveniruby 请问怎样设置参数?
#38 楼 @wangcityboy 请问你弄出来了么?我配置了两份 config.json,然后启动了两个 appium 服务,但是还是不能并行测试啊,mac instrument 只能同时操作一个设备。。和直接配置 appium 启动端口一样,没法实现并行测试。。
#23 楼 @vigossjjj 请问分布执行怎么弄的?最近也在搞这个,发现 mac 只能同时操作一个设备,根本无法并行测试啊。。
#32 楼 @benlooking 同感,grid 也无法实现 ios 的并行测试啊。。。
#6 楼 @seveniruby 请问如何修改代码能实现一台 mac 同时连接多个设备呢?
IOS 没戏!
目前只在 Android 上测试并发成功
#27 楼 @vigossjjj 同你的这个想法
1 device per instruments. So 1 device per MAC. Its an Apple limitation
@a00ium 同求代码?
偶然搜到了这个https://github.com/faidy/appium-android-parallel-exec
准备研究一下
按照上面你们所说的,我的 appium server 还是没能注册成节点
问题出在哪儿了呢
楼主现在解决了吗,一台机器,链接多台手机?
补充:使用 UI Automator2 时,还需在启动 appium server 指定 systemPort。如:
node . --nodeconfig nodeconfig1.json -a 127.0.0.1 -p 4724 -bp 8189 --session-override -U emulator-5556 --default-capabilities '{"systemPort": 10010}'
官方已有说明:https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/parallel-tests.md