背景
Selenium玩的比較6的同學比較清楚:在Selenium中三大組件中有包含了Selenium Grid,而其作用就是分布式執行測試用例。主要的應用場景在於:
- 縮短測試執行時間,提高自動化測試效率
- 多瀏覽器的兼容性測試。
Selenium只是針對於web平台的自動化,然而移動端平台的兼容性測試所涉及到機型眾多,多設備並發測試需求更加迫切。而Appium Grid恰好就是基於Selenium Grid這一模式發展而來,可以很好的滿足我們的需求。
Google爬到一張原理圖,大家可以來看下:
Grid模式下有兩個非常重要的組件:
- hub 跟交換機的角色類似,通過網線連通到各種設備。官方的解釋是:hub用來管理各個節點的注冊和狀態信息,並且接受遠程客戶端代碼的請求調用,然后把請求的命令再轉發給節點來執行。
- node 節點,執行腳本代碼,通過上圖可以看到,hub將請求發給node去執行,這里的node就是Appium Server端 。
環境/工具准備
- selenium-server-standalone-3.12.0.jar
- 夜神模擬器多開
- Appium Desktop V1.8.2
- nodejs安裝包
實踐步驟
開啟hub
selenium-server-standalone-3.12.0.jar這支文件可以從 http://selenium-release.storage.googleapis.com/index.html 進行下載
下載完成之后直接再dos環境下去執行:
-role參數表示指定當前角色是為hub
當然除了-role參數還有很多其他的參數可以提供
此時可以在瀏覽器中輸入 http://127.0.0.1:4444/grid/console 進行訪問,默認hub起來的端口為4444
此頁面為hub的控制管理頁面,當前沒有node節點鏈接上
node注冊
首先開啟模擬器(這里以夜神模擬器舉例,其他的模擬器/真機類似),保證adb devices是可以檢測到設備
當前deviceName為127.0.0.1:62001
新建test1.json文件,在json中的配置即為node注冊到hub所需要的信息(注意在#后面的內容需要刪除掉,我這邊是為了方便進行釋義)
{
"capabilities":
[
{
"deviceName": "127.0.0.1:62001", #此為adb devices檢測到的設備名
"version":"4.4.2", #模擬器/真機的系統版本
"maxInstances": 1, #最多的實例個數
"platform":"ANDROID", #測試平台:Android
"browserName": "" #測試普通App可置為空,如果是測試瀏覽器如chrome就可以寫上
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"hub":"127.0.0.1:4444/grid/register", #hub的注冊接口地址
"url":"http://127.0.0.1:4723/wd/hub", #Appium Server的默認訪問路徑
"host": "127.0.0.1", #Appium Server的IP地址
"port": 4723, #Appium Server端口號
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444, #hub端口號
"hubHost": "127.0.0.1", #hub IP地址,這里是在本機上啟動的,如果是在另外的機器上需要用其外部的IP地址,比如:192.168.1.111這種
"hubProtocol": "http" #協議,默認為http
}
}
安裝nodejs(Appium desktop版本默認沒有提供命令行啟動的方式,需要安裝nodejs支持)
進入到Appium的js啟動腳本路徑,我的路徑為
C:\Users\Administrator\AppData\Local\Programs\Appium\resources\app\node_modules\appium\build\lib\main.js
通過執行如下Appium啟動指令
node main.js -a 127.0.0.1 -p 4723 -bp 4725 -U 127.0.0.1:62001 --nodeconfig D:\svn_lemon\test1.json
- -a參數表示Appium Server的工作IP地址
- -p參數表示Appium Server的端口號
- -bp參數表示bootstrap的監聽端口號
- -U參數表示Appium鏈接到哪台設備上
- --nodeconfig后面接node節點配置文件
可以看到第一個Appium Server節點已經成功注冊上
刷新瀏覽器即可得到節點相關信息
注冊另外的節點
以此類推,使用夜神模擬器多開功能開啟第二台夜神模擬器,第二個node節點的json配置:
{
"capabilities":
[
{
"deviceName": "127.0.0.1:62025",
"version":"5.1.1",
"maxInstances": 1,
"platform":"ANDROID",
"browserName": ""
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"hub":"127.0.0.1:4444/grid/register",
"url":"http://127.0.0.1:4724/wd/hub",
"host": "127.0.0.1",
"port": 4724,
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "127.0.0.1",
"hubProtocol": "http"
}
}
執行命令:
node main.js -a 127.0.0.1 -p 4724 -bp 4726 -U 127.0.0.1:62025 --nodeconfig D:\svn_lemon\test2.json
總結
目前我們的hub能夠管理多個節點,但是需要注意的是我們只是用Grid搭建好了分布式測試環境,不能直接一個腳本扔給hub就可以開始在node上並發測試。怎么對接到我們的腳本,能夠讓我們的腳本分發到不同node去執行,多個node節點並發執行測試用例這些問題我們還沒有解決,后續的文章我們為大家補充,大家可以持續關注。