學點Selenium玩點新鮮~,讓分布式測試有更多玩法

?前? 言

我們都知道 Selenium 是一款在 Web 應用測試領域使用的自動化測試工具,而 Selenium Grid 是 Selenium 中的一大組件,通過它能夠實現分布式測試,能夠幫助團隊簡單快速在不同的環境中測試他們的 Web 應用。

分布式執行測試其實并不是一個非常難以理解的概念,簡單來說,就是能夠同時在不同的環境中同時執行測試。通過 Selenium Grid,我們可以通過在客戶端發送命令到遠程端的瀏覽器實例,在遠程端執行 WebDriver 腳本,可以在多臺遠程的機器上并行運行測試。

Selenium Grid 4 新特性介紹

在以往的 Selenium Grid 版本中(V1-V3)其架構都比較簡單。在全新的 Selenium Grid 4 版本中其架構變得有些復雜,但也更加靈活和強大了。

特性一:Hub 和 Node 使用同一個 jar 服務

在之前,我們要配置 Selenium Grid 時需要分別啟動 Hub 和 Node 節點,而在全新的 Selenium Grid 4 版本中 Hub 和 Node 都是用同一個 jar 文件,一旦服務啟動之后將會同時作為 Hub 和 Node 角色。

特性二:架構優化

在之前的 Selenium 版本中,Selenium Grid 由 Hub 和 Node 組成,Hub 作為總控中心負責 Node 節點注冊及轉發請求,Node 節點則負責來自 Hub 的請求及執行測試腳本,具體參考我之前的文章?Selenium Grid- 讓自動化分布式執行變得可能

文章鏈接:http://testingpai.com/article/1596527701728

圖片

如果你想學習自動化測試,我這邊給你推薦一套視頻,這個視頻可以說是B站播放全網第一的接口自動化測試教程,同時在線人數到達1000人,并且還有筆記可以領取及各路大神技術交流:798478386? ????

【已更新】B站講的最詳細的Python接口自動化測試實戰教程全集(實戰最新版)_嗶哩嗶哩_bilibili【已更新】B站講的最詳細的Python接口自動化測試實戰教程全集(實戰最新版)共計200條視頻,包括:1.【接口自動化】目前軟件測試的市場行情以及測試人員能力標準。、2.【接口自動化】全面熟練Requests庫以及底層方法調用邏輯、3.【接口自動化】接口自動化實戰及正則和JsonPath提取器的應用等,UP主更多精彩視頻,請關注UP賬號。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a?在 Selenium Grid 4 版本的全新架構中劃分成了組件:Router、Distributor、Node、Session Map、Session Queue、Event Bus

  • Router - 監聽新會話請求

  • Distributor - 選擇合適的 Node 執行測試

  • Node - 在對應主機執行測試

  • Session Map - 給 Node 節點標記 session ID

  • Session Queue - 維護所有的會話隊列

  • Event Bus - 作為 Grid 各組件通訊橋梁

圖片

?

圖片

特性三:不同的 Gird 運行模式

在 Selenium Grid 3 及之前版本中只能使用 Hub 和 Node 工作模式,Selenium Grid 4 除了提供對經典的 Hub 和 Node 模式支持之外,還引入了另外兩種全新的模式 standalone、fully distributed。

  • Standalone 模式

standalone 模式能夠在一臺機器上面執行完整的分布式功能,是 Selenium Grid 的最簡單的模式,默認情況下,服務會在 http://localhost:4444 地址監聽,我們需要通過 RemoteWebDriver 指向這個地址。

  • Classical 模式

classical 模式也可以稱為 hub 和 node 模式,此項模式比較適用于中小型分布式執行要求,根據需要設置一個服務節點(hub)和多個代理節點(node)。

  • Fully Distributed 模式

對于大型的分布式要求,可以采用完全分布式模式,這是 Selenium Grid 4 中最高級的模式,這種模式下需要自己啟動每個組件。

Standalone 模式使用

在 standalone 模式下,Node 和 Hub 都是運行在相同的 Selenium Grid 服務中

Step1:準備需要的環境

因為后續下載的 Selenium 組件是 jar 文件,所以需要準備 Java 的環境去運行。如果沒有安裝 Java 的環境,可以進入到?https://www.oracle.com/java/technologies/downloads/下載安裝 JDK 并且配置環境變量,配置完成之后進入到命令行終端,輸入以下命令檢測:

java -version

如果 Java 環境配置成功,你會看到相關的 Java 版本信息。

Step2:下載瀏覽器驅動

下一步需要根據你當前的操作系統以及瀏覽器選擇下載合適的驅動。

  • Chrome Driver 地址:https://npm.taobao.org/mirrors/chromedriver

  • Firefox Driver 地址:https://npm.taobao.org/mirrors/geckodriver

驅動下載完成后放置到某個目錄下,并將目錄添加到系統的環境變量中。在 Selenium Grid 服務啟動時將會自動識別。如果不做此操作 Selenium Grid 將無法在在這些瀏覽器上執行測試。

圖片

Step3:創建 Selenium Grid

這一步我們需要下載 Selenium Server 對應地址:https://www.selenium.dev/downloads/

下載完畢之后將其放置到任意的目錄中,接下來在命令行終端運行以下命令啟動 Selenium Grid

java -jar selenium-server-4.1.1.jar standalone

?你將會看到下面的信息輸出,我們可以看到 Chrome 以及 Firefox 都被注冊到了 Grid 中

D:\Selenium Grid>java -jar selenium-server-4.1.1.jar standalone
16:59:31.406 INFO [LogManager$RootLogger.log] - Using the system default encoding
16:59:31.409 INFO [OpenTelemetryTracer.createTracer] - Using OpenTelemetry for tracing
16:59:37.876 INFO [NodeOptions.getSessionFactories] - Detected 8 available processors
16:59:38.046 INFO [NodeOptions.discoverDrivers] - Discovered 2 driver(s)
16:59:38.071 INFO [NodeOptions.report] - Adding Firefox for {"browserName": "firefox"} 8 times
16:59:38.072 INFO [NodeOptions.report] - Adding Chrome for {"browserName": "chrome"} 8 times

我們可以通過訪問 http://localhost:4444/status 看到當前的狀態


{"value": {"ready": true,"message": "Selenium Grid ready.","nodes": [{"id": "4bb7d6f7-466d-4537-87ca-1441023e0fff","uri": "http:\u002f\u002f192.168.56.1:4444","maxSessions": 8,"osInfo": {"arch": "amd64","name": "Windows 10","version": "10.0"},"heartbeatPeriod": 60000,"availability": "UP","version": "4.1.1 (revision e8fcc2cecf)","slots": [{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "b8a3c42e-c8fb-493c-bb3c-7b6deaa2a02a"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "firefox","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "0eaffe11-62a1-4593-a94f-80151a69c24b"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "chrome","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "7c7211bf-58a7-4ddb-9246-effecbf910ce"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "firefox","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "437be3d5-bdf0-44aa-b401-51f7b9136b15"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "chrome","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "f799da78-4ac8-4799-8d4b-50314a954c01"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "chrome","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "10bd31b1-acf6-4006-af7c-47ea448a6a33"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "chrome","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "31c91763-4aef-4379-910c-647266806fce"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "chrome","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "20caece4-cb26-4914-8dfa-80fffd37191f"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "firefox","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "53a12fa7-63a4-474d-bab4-5e6fc6976ff1"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "chrome","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "7d1bb113-1050-482f-bd5d-939362270fdf"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "firefox","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "c4993662-f2f1-46e6-ab6c-6eae7727dd68"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "firefox","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "d9fcf1d0-cba0-4a53-bba4-934f35be8ccb"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "chrome","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "8b8bdd06-4c6f-4344-812a-3429b5d013c7"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "firefox","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "f7ca236a-7c1f-48ba-93e1-25745ed18493"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "chrome","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "3116789e-3fab-4bcc-89fe-9c0b788bb29f"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "firefox","platformName": "WIN10"}},{"id": {"hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff","id": "3abf1ce7-cd89-48ae-a33d-252abd9a29c5"},"lastStarted": "1970-01-01T00:00:00Z","session": null,"stereotype": {"browserName": "firefox","platformName": "WIN10"}}]}]}
}

?我們還可以可以通過在瀏覽器端輸入 http://localhost:4444/grid/console 來查看 Grid 控制臺,也可以看到 standalone 模式下,在 node 節點中有對應的 Chrome 瀏覽器和 Firefox 瀏覽器。

圖片

Step4:使用 Selenium Grid 執行測試

在上述步驟中,我們通過最簡單的 standalone 模式配置好了 hub 以及 node,下一步我們將會執行我們的自動化測試。

在編寫測試腳本時,我們只需要通過 RemoteWebDriver 指向 http://localhost:4444/

@Test
public void testChrome() throws MalformedURLException {DesiredCapabilities caps = new DesiredCapabilities();caps.setCapability(CapabilityType.BROWSER_NAME,"chrome");WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/"), caps);driver.manage().window().maximize();driver.get("http://testingpai.com/");
}@Test
public void testFirefox() throws MalformedURLException {DesiredCapabilities caps = new DesiredCapabilities();caps.setCapability(CapabilityType.BROWSER_NAME,"firefox");WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/"), caps);driver.manage().window().maximize();driver.get("http://testingpai.com/");
}

?上述示例客戶端腳本和 Grid 服務都是在本機,當然在實際應用中我們可以將 Grid 服務和腳本分別部署在兩臺主機上,此時腳本中指向的地址:http://localhost:4444/換成 Grid 服務所在主機的對外 IP 地址即可。

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

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

相關文章

opencv,opengl,osg,vulkan,webgL,opencL,cuda

OpenCV OpenCV是一個基于BSD許可(開源)發行的跨平臺計算機視覺和機器學習軟件庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。 它輕量級而且高效——由一系列 C 函數和少量 C 類構成,同時提供了Python、Ruby、MATLAB等…

安卓java A應用切換到B應用,來回切換不執行OnCreate

需求:安卓java如何做到A應用切換到B應用,如果B應用沒啟動就啟動,如果B應用已經啟動就僅僅切換到B應用。B應用再切換回A應用,不要重復執行OnCreate! 在 A 應用中的: 在 A 應用中,如果你希望在切換回 B 應用…

小米平板6Max14即將發布:自研G1 電池管理芯片,支持33W反向快充

明天晚上7點(8 月 14 日),雷軍將進行年度演講,重點探討“成長”主題。與此同時,小米將推出一系列全新產品,其中包括備受矚目的小米MIX Fold 3折疊屏手機和小米平板6 Max 14。近期,小米官方一直在…

分布式搜索ElasticSearch-ES(一)

一、ElasticSearch介紹 ES是一款非常強大的開源搜索引擎,可以幫我們從海量的數據中快速找到我們需要的內容。 ElasticSearch結合kibana、Logstash、Beats,也就是elastic stack(ELK),被廣泛運用在日志數據分析,實時監控等領域。 …

accumulate函數的簡單應用

accumulate函數是C numeric庫中的一個函數&#xff0c;主要用來對指定范圍內元素求和&#xff0c;但也自行指定一些其他操作&#xff0c;如范圍內所有元素相乘、相除等。 使用前需要引用頭文件&#xff1a; #include <numeric>函數共有四個參數&#xff0c;其中前三個為…

Ajax 筆記(二)—— Ajax 案例

筆記目錄 2. Ajax 綜合案例2.1 案例一-圖書管理2.1.1 渲染列表2.1.2 新增圖書2.1.3 刪除圖書2.1.4 編輯圖書 2.2 案例二-背景圖的上傳和更換2.2.1 上傳2.2.2 更換 2.3 案例三-個人信息設置2.3.1 信息渲染2.3.2 頭像修改2.2.3 信息修改2.3.4 提示框 Ajax 筆記&#xff1a; Ajax…

React Native 列表組件基礎知識

ScrollView 組件 ScrollView組件是一個容器滾動組件&#xff0c;當容器超出指定寬高時就可以進行滾動交互。 ScrollView組件是一次性渲染所有的 React 子組件&#xff0c;這在性能上是比較差的&#xff0c;所以不建議當列表特別長的時候使用此組件。 接下來列舉幾個常用的一…

HTML(JavaEE初級系列12)

目錄 前言&#xff1a; 1.HTML結構 1.1認識HTML標簽 1.2HTML文件基本結構 1.3標簽層次結構 1.4快速生成代碼框架 2.HTML常見標簽 2.1注釋標簽 2.2標題標簽&#xff1a;h1-h6 2.3段落標簽&#xff1a;p 2.4換行標簽&#xff1a; br 2.5格式化標簽 2.6圖片標簽&#…

【數據結構?堆】經典問題:k路歸并

題目描述 k路歸并問題&#xff1a;   把k個有序表合并成一個有序表。&#xff08; k < 10^4 &#xff09; 輸入輸出格式 輸入格式&#xff1a; 輸入數據共有 2*k1 行。   第一行&#xff0c;一個整數k&#xff08; k < 10^4 &#xff09;&#xff0c;表示有k個有序…

【詳細教程】學會使用Python隧道代理

作為一名專業爬蟲程序猿&#xff0c;我深知在進行網絡數據采集時&#xff0c;可能會面臨網絡封鎖、隱私泄露等問題。今天&#xff0c;我將與大家分享如何學會使用Python隧道代理&#xff0c;幫助我們自由訪問受限網站&#xff0c;同時保護了解探索Python隧道代理&#xff01; …

3.1 Spring MVC概述

1. MVC概念 MVC是一種編程思想&#xff0c;它將應用分為模型&#xff08;Model&#xff09;、視圖&#xff08;View&#xff09;、控制器&#xff08;Controller&#xff09;三個層次&#xff0c;這三部分以最低的耦合進行協同工作&#xff0c;從而提高應用的可擴展性及可維護…

C++ opencv:視頻讀取、變換顏色風格、保存

1. 相關知識點 VideoCapture&#xff1b; applyColorMap&#xff1b; VideoWriter&#xff1b; 2. 代碼 編寫代碼main.cpp: #include<iostream> #include "opencv2/opencv.hpp" #include "opencv2/imgproc.hpp" #include "opencv2/highgu…

解開謎團:為什么紅黑樹勝過AVL樹?

為什么紅黑樹勝過AVL樹 博主簡介一、引言1.1、紅黑樹和AVL樹簡介1.2、紅黑樹在某些方面優于AVL樹 二、紅黑樹和AVL樹的基本原理2.1、紅黑樹的定義和性質2.2、AVL樹的定義和性質2.3、對比兩種樹結構的特點 三、插入和刪除操作的復雜性比較3.1、紅黑樹的插入操作和平衡性維護3.2、…

冪次方(c++題解)

題目描述 任何一個正整數都可以用 22 的冪次方表示。例如 1372^72^32^0。 同時約定方次用括號來表示&#xff0c;即 a^b 可表示為 a(b)。 由此可知&#xff0c;137137 可表示為 2(7)2(3)2(0) 進一步&#xff1a; 7 2^222^0 ( 2^121 用 2 表示)&#xff0c;并且 322^0。 所…

Spring Boot 重啟命令

Spring Boot 重啟命令 本文描述了一個重啟Spring Boot命令執行過程和示例 本文利用kill -9 關閉進程&#xff0c;不優雅&#xff0c;會突然中斷程序&#xff0c;可能導致數據和邏輯異常 搜索微信小程序【亞特技術】在資源中搜索【優雅】可得到Spring Boot如何優化重啟 1. 過…

【Bert101】變壓器模型背后的復雜數學【02/4】

一、說明 眾所周知&#xff0c;變壓器架構是自然語言處理&#xff08;NLP&#xff09;領域的突破。它克服了 seq-to-seq 模型&#xff08;如 RNN 等&#xff09;無法捕獲文本中的長期依賴性的局限性。變壓器架構被證明是革命性架構&#xff08;如 BERT、GPT 和 T5 及其變體&…

【陣列信號處理】空間匹配濾波器、錐形/非錐形最佳波束成形器、樣本矩陣反演 (SMI) 研究(Matlab代碼實現)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;歡迎來到本博客????&#x1f4a5;&#x1f4a5; &#x1f3c6;博主優勢&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客內容盡量做到思維縝密&#xff0c;邏輯清晰&#xff0c;為了方便讀者。 ??座右銘&a…

九耶丨閣瑞鈦倫特-產品經理面試題

在產品上線后&#xff0c;會著重觀察6類指標&#xff1a; 1、活躍用戶指標 衡量APP用戶規模的指標&#xff0c;一個產品是否成功&#xff0c;如果只看一個指標&#xff0c;那么這個指標一定是活躍用戶數。 日活(DAU)&#xff1a;一天內日均活躍設備數(去重&#xff0c;每個公…

關于使用pycharm遇到只能使用unittest方式運行,無法直接選擇Run

相信大家可能都遇到過這個問題&#xff0c;使用pycharm直接運行腳本的時候&#xff0c;只能選擇unittest的方式&#xff0c;能愁死個人 經過幾次各種嘗試無果之后&#xff0c;博主就放棄死磕了&#xff0c;原諒博主是個菜鳥 后來遇到這樣的問題&#xff0c;往往也就直接使用cm…

Python爬蟲-抓取的目標數據為#x開頭,怎么解決?

前言 本文是該專欄的第4篇,后面會持續分享python爬蟲案例干貨,記得關注。 在做爬蟲項目的時候,有時候抓取的平臺目標數據為&#x開頭,如下圖所示: 瀏覽器顯示的正常數據,但通過爬蟲協議獲取到的網頁源碼數據卻是以&#x開頭的隱藏數據,遇到這種情況,爬蟲需要怎么處…