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

大概就是這樣


↙↙↙阅读原文可查看相关链接,并与作者交流