Appium Grid並發測試


背景

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節點並發執行測試用例這些問題我們還沒有解決,后續的文章我們為大家補充,大家可以持續關注。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM