Appium Appium + Selenium Grid2 = Appium Parallel Execution

JJ · 2015年01月16日 · 最后由 测试小书童 回复于 2016年11月11日 · 1640 次阅读
本帖已被设为精华帖!

Hi all,

今天要分享一下我用 appium + selenium grd2 來達到 appium parallel execution 的經驗
我這邊主要試的是 iOS device 的 parallel execution

簡單說一下 selenium grid 的架構,他需要一台 hub 來連接多個 node
hub 用來分配 test 到各個 node 上面去執行,因為 appium 所用的 web driver 是和 selenium 是同一套
所以說 appium 可以用於 selenium grid 上面, 也就是說我可以針對 iOS 或 android 的原生 app 去平行化跑 automation

準備資料:Mac OS*3(1 台 mac mini 搭配裡面 2 個 Mac OS VM),這邊我把 mac mini 當作 hub,另外兩個 Mac OS VM 當作 node 使用
為什麼要各自的 Mac OS VM 呢?因為 Mac OS 的限制,一台 Mac OS 只能跑一台 iOS device
所以我用了 VM,一個 VM 接一台 iOS device;至於 android 就沒有這個限制了,所以說你可以同一台 machine 上面既跑 hub 也跑多個 node 都沒關係

首先在這 3 台 Mac OS 都裝上 appium,怎麼裝 appium 我就不詳細描述了

接著在 mac mini 上面,下載最新版的 selenium grid 2
http://selenium-release.storage.googleapis.com/index.html
我這邊下載的版本是 selenium-server-standalone-2.44.0.jar

在來在另外兩台 Mac OS VM 上面,分別找個位置去建立一個 configuration file
我的 configuration 如下

{

    "capabilities": [

        {

            "browserName": "iphone 6",

            "version": "8.0",

            "maxInstances": 1,

            "platform": "MAC"

        }

    ],

    "configuration": {

        "cleanUpCycle": 2000,

        "timeout":30000,

        "hub": "http://10.1.200.113:4444/grid/register",

        "host": "10.1.201.178",

        "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",

        "maxSession": 1,

        "port": 4723,

        "hubPort": 4444,

        "hubHost": "10.1.200.113",

        "url": "http://10.1.201.178:4723/wd/hub",

        "remoteHost": "http://10.1.201.178:4723",

        "register": true,

        "registerCycle": 5000,

         "role": "node"

    }

}

記得要把相對應的 address 改成你的環境裡面的設定

在來就是執行的部分

在 hub 上面打開 terminal,run 以下的 command

java -jar selenium-server-standa-2.44.0.jar -port 4444 -role hub -nodeTimeout 600

不加-port 4444 也行,因為預設的 port 就是 4444

接著在各個 node 上面先連結你的 testing device,這邊就是 iPhone,連到 node 上面

打開 terminal,run 以下的 command

appium -a 10.1.201.178 -p 4723 -U $(your device's udid) --nodeconfig $(your absolute path to config.json)

其中 10.1.201.178 是你 node 的 ip address,port 是你 appium 要開的 port。這兩個資料要和你的 config.json 裡面設定的要一樣, 記得把各個參數改成你相對應的環境參數,這邊 nodeconfig 的位址記得改成絕對路徑

輸入完之後,你可以從 node 的 terminal 裡面看到

info: --> GET /wd/hub/status {}

info: [debug] Responding to client with success: {"status":0,"value":{"build":{"version":"1.3.4","revision":"c8c79a85fbd6870cd6fc3d66d038a115ebe22efe"}}}

的訊息

接著在 hub 的 terminal 裡面也會看到連結成功的訊息

或者從 hub 機器裡,打開 browser,輸入http://localhost:444

也可以看到這台 hub 所連接的 node 的資訊

如果到這邊都沒問題的話,就可以 run 你的 test case 了

你要測試的 app 記得放在 node 機器裡面,如果你的 app 位置是放在 local 的話

run 你的 test case 就和 run appium 一樣,只是你要把 server address 和 port 改成 hub 的位址資訊

連結到 hub 之後,hub 就會自動的把你的 test case 轉到 node 上面去 run

run 了一次,還沒跑完的時候,在 run 一次 test case,hub 會幫你把 test case 轉到另一台 free 的 node 上面去 run,這樣子就是 appium parallel execution

大概就是這樣

共收到 8 条回复 时间 点赞
匿名 #1 · 2015年01月16日

好高端,我怎么就没想过在 MAC MINI 上面搭 VM 呢。。。这样子的 MAC MINI 内存需要几 G 才能承受得住?

恩,在 Windows 下面跑 Android,我们进行了大量实验,不够稳定。可以试试 Mac 版了

JJ #3 · 2015年01月16日 Author

在 Mac 下的原因就是要同時跑 android 和 iOS
目前開了兩台 VM,使用量也才用了 60GB
原則上目前還沒有跑大量的 case
機器還承受的住

赞。 一直没人写对应的文章,这个算是第一发了

#2 楼 @cosyman 尽量不要再 windows 上去接管。 另外设备太多的时候, 不稳定的原因会增多,有些是网络连接的问题, 可能已经超出 appium 的范畴了

#5 楼 @seveniruby 所以是重写 Appium,还是优化 Selendroid,或者定制个 Appium Grid,如何选择,并做下去都有困难....

#6 楼 @cosyman 不太好回答. 有些操作依赖 adb. 脱离 pc 有点难. 如果不考虑 adb, 可以把架构调整到更好些.
比如不再使用 pc 转发请求到 mobile 端口的方式,而是从 mobile 上直接连接远程服务器.

楼主,你的代码怎么管理多设备的 driver 的?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册