Selenium Grid- 讓自動化分布式執行變得可能

什么是?Selenium?Grid?

Selenium?Grid?是 Selenium 的三大組件之一,允許用戶同時在不同的機器和系統上測試不同瀏覽器。
也就是說 Selenium Grid 支持分布式的測試執行。它可以讓你的測試用例在一個分布式的執行環境中運行。

由上圖可見,測試腳本會通過 selenium hub 節點分發給不同的 node 節點,而不同的 node 節點所在的操作系統和搭載的瀏覽器類型可以是不同的,接下來我們看下 hub 節點和 node 節點具體分別有什么作用:

hub 節點
中心節點,或總控節點
管理各個 node 節點的注冊信息和狀態信息
接收并轉發客戶端(測試腳本)請求到合適的 node 節點
node 節點
子節點,或代理節點
負責注冊配置信息到 hub 節點(平臺、瀏覽器、瀏覽器版本等)
負責接收來自 hub 節點的轉發的請求以執行測試腳本
也可單獨作為遠程節點執行測試腳本
環境準備

環境說明:
本地端系統為 win10,搭載 V68 版本的 Chrome 瀏覽器,IP 地址為 192.168.1.222
遠程端系統為?win7,搭載 V56 版本的 Firefox 瀏覽器,IP 地址為 192.168.140.130
兩臺主機能夠相互 ping 通
hub 節點和 node1 節點都是在本地端工作,node2 節點在遠程端工作
環境準備步驟:
測試機器安裝 JDK,配置環境變量
下載 selenium-server-standalone-x.x.x.jar
https://npm.taobao.org/mirrors/selenium
下載瀏覽器驅動
Chrome:https://npm.taobao.org/mirrors/chromedriver
Firefox:https://npm.taobao.org/mirrors/geckodriver/
IE:https://npm.taobao.org/mirrors/selenium 注:IE 驅動和 selenium 依賴在一起
配置運行
1、本地端啟動 hub
java -jar selenium-server-standalone-3.141.59.jar -role hub -port 8888 -maxSession 10
參數解釋:

Java -jar selenium-server-standalone-3.141.59.jar 運行 jar 包
-role hub 以 hub 的角色運行
-port 8888 指定 hub 運行的端口(默認為 4444)
-maxSession 10 最大的處理會話
2、查看 hub 的運行狀態
瀏覽器中輸入 http://localhost:8888/grid/console 進入到到 hub 的 console 控制臺

3、啟動 node1

node1 節點工作在本地端,配置的瀏覽器為 V68 的 Chrome

java -Dwebdriver.chrome.driver="chromedriver.exe" -jar selenium-server-standalone-3.141.59.jar -role node -hub "http://192.168.4.4:8888/grid/register" -port 5558 -browser "browserName=chrome,maxInstances=2,version=68,platform=WINDOWS"

參數解釋:

-Dwebdriver.chrome.driver="chromedriver.exe" 指定 chromeDriver 驅動所在的路徑(本地)
-jar selenium-server-standalone-3.141.59.jar 運行 jar 包
-role node 以 node 角色執行
-hub "http://192.168.1.222:8888/grid/register" 指定要鏈接的 hub 地址,這樣 node 才能和 hub 通訊連接上
-port 5558 node 的執行端口
-browser "browserName=chrome,maxInstances=2,version=68,platform=WINDOWS"
browserName=chrome 運行的瀏覽器名稱
maxInstances=2 最多支持兩個瀏覽器實例
version=68 瀏覽器版本號
platform=WINDOWS 平臺名稱
運行之后的效果:

瀏覽器再次刷新訪問 hub 的 console 端

4、啟動遠程端的 node2 節點

node2 節點工作在遠程端,配置的瀏覽器為 V56 的 Chrome

啟動配置為

java  -Dwebdriver.firefox.driver="geckodriver.exe" -jar selenium-server-standalone-3.141.59.jar -role node -hub "http://192.168.140.1:8888/grid/register" -port 5558  -browser "browserName=firefox,maxInstances=2,version=56,platform=WINDOWS"

瀏覽器再次刷新訪問 hub 的 console 端,可以看到兩個 node 節點已經成功注冊到 hub 節點上

?執行腳本


// 期望能力對象DesiredCapabilities capabilities = new DesiredCapabilities();//配置測試的瀏覽器,配置Chrome則會啟動本地node1節點瀏覽器進行測試,配置Firefox則會啟動遠程端的Firefox進行測試capabilities.setBrowserName(BrowserType.CHROME);// hub節點String url = "http://192.168.1.222:8888/wd/hub";//和hub建立通訊,把相應配置傳給hub,hub會根據配置選擇注冊的node節點,打開相應的瀏覽器進行測試WebDriver driver = new RemoteWebDriver(new URL(url), capabilities);driver.get("http://www.baidu.com");driver.findElement(By.id("kw")).sendKeys("檸檬班軟件測試");Thread.sleep(10000);driver.quit();

通過上述配置及腳本我們能夠啟動本地 node1 節點和 node2 節點分別進行測試,單 node 節點只能支持一款瀏覽器進行測試,如何讓 node 節點可以支持多款瀏覽器呢?

答案就是在配置 node 節點的時候傳入的參數配置兼容多款瀏覽器即可。

node 節點配置兼容不同瀏覽器
node 節點可以配置單一瀏覽器,如 Chrome、Firefox、IE 等等,也可以配置兼容多款瀏覽器

這樣只要符合 node 節點配置中的任何一個,hub 會將客戶端的執行請求發送過來

java -Dwebdriver.ie.driver="IEDriverServer.exe" -Dwebdriver.chrome.driver="chromedriver.exe" -Dwebdriver.firefox.driver="geckodriver.exe" -jar selenium-server-standalone-3.141.59.jar -role node -hub "http://192.168.140.1:8888/grid/register" -port 5555  -browser "browserName=internet explorer,maxInstances=4,version=11,platform=WINDOWS" -browser "browserName=chrome,maxInstances=2,version=68,platform=WINDOWS" -browser "browserName=firefox,maxInstances=3,version=56,platform=WINDOWS"

現在 node1 節點和 node2 節點采用相同的啟動參數配置啟動

我們可以看到,grid 的 console 控制臺顯示兩個 node 節點都可以支持多瀏覽器測試

node 節點啟動方式二

之前啟動的方式是通過命令行或者 bat 腳本啟動 node 節點,官方提供了兩種方式,其二就是通過 JSON 配置文件啟動

java -jar selenium-server-standalone-3.141.59.jar -role node -nodeConfig node.json

node.json 配置文件如下:


{"capabilities":[{"browserName": "firefox","maxInstances": 5,"seleniumProtocol": "WebDriver","webdriver.firefox.driver":"firefox.exe",#"firefox_binary":"D:\\Program Files\\Mozilla Firefox\\firefox.exe","platform":"WINDOWS"},{"browserName": "chrome","maxInstances": 5,"seleniumProtocol": "WebDriver","webdriver.chrome.driver":"chromedriver.exe","platform":"WINDOWS"},{"browserName": "internet explorer","maxInstances": 5,"seleniumProtocol": "WebDriver","platform":"WINDOWS"}],"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy","maxSession": 5,"port": -1,"register": true,"registerCycle": 5000,"hub": "http://192.168.1.222:8888","nodeStatusCheckTimeout": 5000,"nodePolling": 5000,"role": "node","unregisterIfStillDownAfter": 60000,"downPollingLimit": 2,"debug": false,"servlets" : [],"withoutServlets": [],"custom": {}}

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

?

這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42922.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42922.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42922.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux:基礎知識及命令[圖表]

lsof:查找文件 普通文件、目錄、進程(/proc)、輸入輸出設備(/dev)、網絡字節流socket、鏈接文件、管道文件 基本用法 lsof:列出所有打開的文件。lsof /path/to/file:列出打開指定文件的所有進程。lsof -…

大話光學原理:4.散射:瑞利、拉曼、米氏和布里淵

這是一縷柔和的光,在空氣的舞臺上輕盈地跳躍。它悠然自得,在寧靜的空間中緩緩前行。然而,一片細薄透明的介質擋住了它的腳步,它毫無預兆地撞上了這片障礙。在這短暫的接觸中,它被分解成無數微小的粒子,被迫…

增強現實(AR)與虛擬現實(VR)的區別?

隨著科技的飛速發展,增強現實(AR)與虛擬現實(VR)技術在各個領域展現出巨大的潛力和應用前景。這兩種技術雖然在體驗和實現方式上有所不同,但都為用戶提供了全新的感知體驗。本文將詳細解析AR和VR的概念、區…

機器視覺/自然語言/生成式人工智能綜合應用實驗平臺-實訓平臺-教學平臺

AIGC是人工智能1.0時代進入2.0時代的重要標志,MIT 科技評論也將Al合成數據列為2022年十大突破性技術之一,甚至將生成性Al(Generative Al) 稱為是AI領域過去十年最具前景的進展。同時,AIGC領域崗位需求數量暴漲。高校方面在人工智能專業與機器…

javascript 處理###分隔的字符串

在 JavaScript 中,可以使用 split 方法將字符串按 ### 分隔成數組。以下是一個示例代碼,展示了如何處理由 ### 分隔的字符串: 示例代碼 // 示例字符串 let str "part1###part2###part3###part4";// 使用 split 方法按 ### 分隔字…

DEJA_VU3D - Cesium功能集 之 122-體元渲染(官方Voxels)

前言 編寫這個專欄主要目的是對工作之中基于Cesium實現過的功能進行整合,有自己琢磨實現的,也有參考其他大神后整理實現的,初步算了算現在有差不多實現小140個左右的功能,后續也會不斷的追加,工作原因可能無法像以前那樣周更2-3篇,但是閑下來還是會不定期的更新,Cesium…

tensorflow張量生成以及常用函數

張量tensor:多維數組(列表) 階:張量的維數 維數 階 名字 例子 0-D 0 標量 scalar s 1, 2, 3 1-D 1 向量 vector…

How do I format markdown chatgpt response in tkinter frame python?

題意:怎樣在Tkinter框架中使用Python來格式化Markdown格式的ChatGPT響應? 問題背景: Chatgpt sometimes responds in markdown language. Sometimes the respond contains ** ** which means the text in between should be bold and ### te…

Python數據分析-天氣類型預測分析

一、研究背景 近年來,隨著全球氣候變化的加劇,天氣預報和氣象預測變得越來越重要。準確的天氣預測不僅能夠幫助人們做好日常生活的安排,還能在農業生產、防災減災等方面起到關鍵作用。隨著大數據技術和機器學習算法的快速發展,利…

科普文:深入理解負載均衡(四層負載均衡、七層負載均衡)

概敘 網絡模型:OSI七層模型、TCP/IP四層模型、現實的五層模型 應用層:對軟件提供接口以使程序能使用網絡服務,如事務處理程序、文件傳送協議和網絡管理等。(HTTP、Telnet、FTP、SMTP) 表示層:程序和網絡之…

基于vue的地圖特效(飛線和標注)

這段代碼的主要功能是在頁面加載完成后,初始化一個 echarts 地圖圖表,并配置了相關的地理數據、散點數據、線條數據以及樣式效果,最后在指定的 div 元素中進行展示。 需要再vue中的框架實現,不能單獨直接運行。 標注 type: effe…

Python30 使用Gensim庫實現Word2Vec對文本進行處理

1.Word2Vec Word2Vec 是一種將詞語表示為向量的技術,能夠捕捉詞語之間的語義關系。它由 Google 的 Tomas Mikolov 等人在 2013 年提出,廣泛應用于自然語言處理任務中。其核心概念主要包括: 詞嵌入(Word Embeddings) …

使用昇騰芯片進行多卡訓推時使用hccl_tools.py為npu分配ip報錯問題解決辦法

目錄 問題描述問題產生原因解決辦法最終執行并驗證參考網站命令擴展 問題描述 昇騰芯片(910b/310p等)進行多卡訓練或者推理時需要先獲取并配置每張npu的ip信息,因此需要執行類似下面問題: python mindformers/tools/hccl_tools.…

[AI 大模型] Meta LLaMA-2

文章目錄 [AI 大模型] Meta LLaMA-2簡介模型架構發展新技術和優勢示例 [AI 大模型] Meta LLaMA-2 簡介 Meta LLaMA-2 是 Meta 推出的第二代開源大型語言模型(LLM),旨在為研究和商業應用提供強大的自然語言處理能力。 LLaMA-2 系列模型包括從…

Python實現串口通信(Python+Stm32)詳解

Python實現串口通信(PythonStm32)詳解 引言 在現代的嵌入式系統開發和自動化控制中,串口通信是一種非常常見的通信方式。Python作為一種易于學習且功能強大的編程語言,結合Stm32微控制器,能夠實現高效、靈活的串口通…

Python29 Tensorflow的基本知識和使用

1. TensorFlow TensorFlow 是一個開源的機器學習框架,由 Google Brain 團隊開發。它用于數據流圖的計算,尤其擅長深度學習任務。在 TensorFlow 中,數據流圖(Data Flow Graph)是其核心概念之一,它定義了計算…

Blackbox AI : 全新的人工智能編碼助手 您的高效AI開發全能助手

🎬 鴿芷咕:個人主頁 🔥 個人專欄: 《C干貨基地》《粉絲福利》 ??生活的理想,就是為了理想的生活! 引入 提起AI 智能編碼助手,相信到了如今大家都不陌生。其對我們開發的代碼時的效率有顯著的提升,可以說…

效果驚人!LivePortrait開源數字人技術,讓靜態照片生動起來

不得了了,快手已經不是眾人所知的那個短視頻娛樂平臺了。 可靈AI視頻的風口尚未過去,又推出了LivePortrait--開源的數字人項目。LivePortrait讓你的照片動起來,合成逼真的動態人像視頻,阿里通義EMO不再是唯一選擇。 讓圖像動起來 LivePortrait 主要提供了對眼睛和嘴唇動作的…

Mattermost:一個強大的開源協作平臺

Mattermost是一個強大的開源協作平臺,基于云原生架構,為企業級用戶提供安全、可擴展且自托管的消息傳遞解決方案。 一、平臺特點 開源與定制性:Mattermost是一個開源項目,用戶可以根據自身需求定制界面、添加功能或擴展其功能&am…

[大師C語言(第四十一篇)]C語言指針數組與數組指針技術詳解

C語言中的指針和數組是兩個核心概念,它們在許多高級編程任務中扮演著重要角色。本文將深入探討C語言中的指針數組與數組指針,包括它們的基本概念、使用場景和技術細節。我們將通過詳細的解釋和實用的代碼案例來展示如何有效地使用這些技術。 第一部分&a…