基于docker部署的Selenium Grid分布式自動化測試

01、什么是Selenium Grid

Selenium Grid是Selenium套件的一部分,它專門用于并行運行多個測試用例在不同的瀏覽器、操作系統和機器上。

Selenium Grid有兩個版本——老版本Grid 1和新版本Grid 2。我們只對新版本做介紹,因為Selenium團隊已經逐漸遺棄老版本了。

Selenium Grid 主要使用 master-slaves (or hub-nodes) 理念 --一個 master/hub 和多個基于master/hub注冊的子節點 slaves/nodes。當我們在master上基于不同的瀏覽器/系統運行測試用例時,master將會分發給適當的node運行。

在這里插入圖片描述
什么時候用Selenium Grid

同時在不同的瀏覽器、操作系統和機器上運行測試。最大程度用于兼容性測試

減少運行時間

02、怎樣啟動Selenium Grid

啟動Selenium Grid的三種方式,一種直接用命令行,另一種用JSON配置文件,最后一種docker啟動

1、命令行啟動

將會使用2臺機器,一臺運行hub另一臺運行node,為了方便描述,將運行hub的機器命名為“Machine H”(IP:192.168.1.100),運行node的機器命名為“Machine N”(IP:192.168.1.101)

Step 1

1、配置Java環境

2、已安裝需要運行的瀏覽器

3、下載瀏覽器driver,放到和selenium server相同的路徑下 ,否則在啟動node時要加參數,不然啟動不了瀏覽器(java -Dwebdriver.chrome.driver=“C:\your path\chromedriver.exe” -jar selenium-server-standalone-3.141.59.jar -role node -hubhttp://192.168.1.100:5566/grid/register/,可切換瀏覽器)

在這里插入圖片描述

4、下載selenium server,將selenium-server-standalone-X.XX.jar分別放在“Machine H”和“Machine N”上(自定義路徑)
在這里插入圖片描述

Step 2

在機器“Machine H”上打開命令行,到selenium server所在的路徑,運行:java -jar selenium-server-standalone-3.141.59.jar -role hub -port 5566,成功啟動你會看到:
在這里插入圖片描述

或者直接在機器“Machine H”上的瀏覽器(“Machine N”則需要將IP修改為“Machine H”的)打開:http://localhost:5566/grid/console ,將會看到:
在這里插入圖片描述

在機器“Machine N”上打開命令行,到selenium server所在的路徑,運行:java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.1.100:5566/grid/register/ -port 5577,成功啟動你會看到:

刷新:http://localhost:5566/grid/console ,將會看到:

在這里插入圖片描述
刷新:http://localhost:5566/grid/console ,將會看到:
在這里插入圖片描述

Step 3

運行測試腳本,將會看到在機器“Machine N”上打開了Chrome瀏覽器,并運行了測試用例:
在這里插入圖片描述

from selenium import webdriverds = {'platform': 'ANY','browserName': "chrome",'version': '','javascriptEnabled': True}dr = webdriver.Remote('http://192.168.1.101:5577/wd/hub', desired_capabilities=ds)dr.get("https://www.baidu.com")print dr.name

2、Json配置文件啟動

Step 1

1、創建hub的Json配置文件

代碼如下:

{"port": 4444,"newSessionWaitTimeout": -1,"servlets" : [],"withoutServlets": [],"custom": {},"capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher","registry": "org.openqa.grid.internal.DefaultGridRegistry","throwOnCapabilityNotPresent": true,"cleanUpCycle": 5000,"role": "hub","debug": false,"browserTimeout": 0,"timeout": 1800}

將上述代碼保存為hub_config.json文件,放在“Machine H”上和selenium server相同的路徑下。

2、創建nodes的 Json配置文件

代碼如下:

{"capabilities":[{"browserName": "firefox","marionette": true,"maxInstances": 5,"seleniumProtocol": "WebDriver"},{"browserName": "chrome","maxInstances": 5,"seleniumProtocol": "WebDriver"},{"browserName": "internet explorer","platform": "WINDOWS","maxInstances": 1,"seleniumProtocol": "WebDriver"},{"browserName": "safari","technologyPreview": false,"platform": "MAC","maxInstances": 1,"seleniumProtocol": "WebDriver"}],"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy","maxSession": 5,"port": -1,"register": true,"registerCycle": 5000,"hub": "http://192.168.1.100:4444","nodeStatusCheckTimeout": 5000,"nodePolling": 5000,"role": "node","unregisterIfStillDownAfter": 60000,"downPollingLimit": 2,"debug": false,"servlets" : [],"withoutServlets": [],"custom": {}}

保存為文件(注意將hub對應的值改為機器“Machine H”的IP),放在“Machine N”上和selenium server相同的路徑下。(當多個node時需將該文件放在多個node機器上或者同一個機器上啟動多個node)

Step 2

hub機器上命令行運行:java -jar selenium-server-standalone-3.141.59.jar -role hub -hubConfig hub_config.json

node機器上命令行運行:java -jar selenium-server-standalone-3.141.59.jar -role node -nodeConfig node_config.json

運行之前的驗證方法和腳本查看是否正確

(1、2)方式啟動的挑戰(不易啟動和維護):

每個node需要下載和配置依賴

java 進程占內存

出現問題時需手動啟動

不易維護

擴展性差

3、docker啟動

docker上已經有selenium官方的Selenium Grid鏡像,只有你已經安裝了docker,即可使用。

啟動hub:

docker run -d -p 4444:4444 --name selenium-hub selenium/hub

啟動node(Chrome&&Firefox):

docker run -d --link selenium-hub:hub selenium/node-firefox

運行命令將會下載內置鏡像文件(包括java、Chrome、Firefox、selenium-server-standalone-XXX.jar 等運行selenium所需的環境);此時你可以訪問:http://localhost:4444/grid/console
在這里插入圖片描述

如果需要多個Chrome node則繼續運行這個命令:docker run -d --link selenium-hub:hub selenium/node-chrome,刷新則看到多了一個Chrome實例。

通過運行命令:docker ps,顯示正在運行的容器
在這里插入圖片描述

關閉docker-grid的命令:docker stop $(docker ps -a -q), docker rm $(docker ps -a -q)

docker已經簡化了selenium Grid的搭建流程,但是還是有很多的手動工作。需要一個一個的啟動/關閉hub/nodes.

1、docker 組件啟動Selenium Grid

selenium Grid通常需要啟動一個hub,多個nodes像Chrome、Firefox等。我們可以把他們定義到一個文件中叫做docker-compose.yml,通過一個命令來整體啟動,docker提供了一個這樣的工具 –Docker-Compose。

安裝docker-compose,一旦安裝成功,則創建一個新的文件夾,創建文件 docker-compose.yml, docker-compose.yml內容:

version: "3"services:selenium-hub:image: selenium/hubcontainer_name: selenium-hubports:- "4444:4444"chrome:image: selenium/node-chromedepends_on:- selenium-hubenvironment:- HUB_PORT_4444_TCP_ADDR=selenium-hub- HUB_PORT_4444_TCP_PORT=4444firefox:image: selenium/node-firefoxdepends_on:- selenium-hubenvironment:- HUB_PORT_4444_TCP_ADDR=selenium-hub- HUB_PORT_4444_TCP_PORT=4444

2、docker-compose命令:

運行命令啟動(到docker-compose.yml路徑下):docker-compose up -d

查看啟動是否成功:docker-compose ps

創建更多實例:docker-compose scale chrome=5

關閉命令:docker-compose down
在這里插入圖片描述

瀏覽器打開http://localhost:4444/grid/console將會看到:
在這里插入圖片描述運行腳本的話直接運行就好(IP:http://localhost:4444/wd/hub) ,和上邊兩種的方法不太一樣;不會有瀏覽器打開(容器內部運行),但是已經運行成功:

import unittestfrom selenium import webdriverclass MyTestCase(unittest.TestCase):def setUp(self):ds = {'platform': 'ANY','browserName': "chrome",'version': '','javascriptEnabled': True}self.dr = webdriver.Remote('http://localhost:4444/wd/hub', desired_capabilities=ds)def test_something(self):self.dr.get("https://www.baidu.com")self.assertEqual(self.dr.name, "chrome")def test_search_button(self):self.dr.get("https://www.baidu.com")self.assertTrue(self.dr.find_element_by_id("su").is_displayed())def tearDown(self):self.dr.quit()if __name__ == '__main__':unittest.main()

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


? ? ?【下面是我整理的2023年最全的軟件測試工程師學習知識架構體系圖+全套資料】


一、Python編程入門到精通


二、接口自動化項目實戰?

三、Web自動化項目實戰


四、App自動化項目實戰?

五、一線大廠簡歷


六、測試開發DevOps體系?

七、常用自動化測試工具


八、JMeter性能測試?

九、總結(文末尾部小驚喜)

生命不息,奮斗不止。每一份努力都不會被辜負,只要堅持不懈,終究會有回報。珍惜時間,追求夢想。不忘初心,砥礪前行。你的未來,由你掌握!

生命短暫,時間寶貴,我們無法預知未來會發生什么,但我們可以掌握當下。珍惜每一天,努力奮斗,讓自己變得更加強大和優秀。堅定信念,執著追求,成功終將屬于你!

只有不斷地挑戰自己,才能不斷地超越自己。堅持追求夢想,勇敢前行,你就會發現奮斗的過程是如此美好而值得。相信自己,你一定可以做到!

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

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

相關文章

docker容器管理

創建容器: docker run --name 容器名 -d -p 端口1:端口2 –name :是啟動容器時,給容器定義的名稱,不使用該參數時,容器啟動成功之后,會生成隨機名稱 -d :代表容器處于后臺yunx -p :指定容器的端…

第一次參加計算機會議報告注意事項以及心得

計算機會議參會報告 注意事項參會前參會中參會后 參會心得 注意事項 接下來的會議注意事項分為:(1)參會前,(2)參會中,(3)參會后 參會前 參會前,一般被邀請…

實時安全分析監控加強網絡安全

網絡犯罪分子只需幾分鐘,有時甚至幾秒鐘即可泄露敏感數據。但是,IT 團隊可能無法在數周內發現這些違規行為。通常,這些違規行為是由外部方或客戶發現的,到那時為時已晚。隨著網絡漏洞的激增,對安全分析的需求空前高漲。…

【C# Programming】C#第一課(自己學習的筆記)

目錄 一、C# 介紹 1.1 托管代碼(Manage Code ) : 1.2 基礎類型庫 (Base Class Library): 1.3 程序集(Assembly): 1.4 .NET 框架: 1.5 公共中間語言(Common Intermediate Language),簡稱 IL。 1.6 C#編譯器將源代…

實戰:工作中對并發問題的處理 | 京東物流技術團隊

1. 問題背景 問題發生在快遞分揀的流程中,我盡可能將業務背景簡化,讓大家只關注并發問題本身。 分揀業務針對每個快遞包裹都會生成一個任務,我們稱它為 task。task 中有兩個字段需要關注,一個是分揀中發生的異常(exp…

DIP: Spectral Bias of DIP 頻譜偏置解釋DIP

On Measuring and Controlling the Spectral Bias of the Deep Image Prior 文章目錄 On Measuring and Controlling the Spectral Bias of the Deep Image Prior1. 方法原理1.1 動機1.2 相關概念1.3 方法原理頻帶一致度量與網絡退化譜偏移和網絡結構的關系Lipschitz-controlle…

Linux常規操作命令

日升時奮斗,日落時自省 目錄 1、vim 1.1、工作模式 1.2、末行模式操作相關命令 1.2.1、保存退出操作 1.2.2、查找替換 1.3、輸入模式操作相關命令 1.3.1、移動相關命令 1.3.2、刪除和剪切命令 1.3.3、復制操作 1.3.4、撤銷 2、head 3、tail 4、ps 5、…

數據結構算法--2 冒泡排序,選擇排序,插入排序

基礎排序算法 冒泡排序 思想就是將相鄰元素兩兩比較,當一個元素大于右側相鄰元素時,交換他們的位置,小于右側元素時,位置不變,最終序列中的最大元素,像氣泡一樣,到了最右側。 這時冒泡排序第一…

linux Socket簡單編程實例

服務端 網絡編程中服務端接受連接的套接字創建過程如下: 1.調用socket函數創建套接字 2.調用bind函數分配IP地址和端口號 3.調用listen函數轉為可接收請求狀態 4.調用accept函數受理連接請求 #include <stdio.h> #include <stdlib.h> #include <sys/types.h>…

Java實現根據姓名生成頭像(釘釘樣式)

頭像生成器代碼如下&#xff1a; package com.hua.util;import org.apache.commons.lang3.StringUtils;import javax.imageio.ImageIO; import java.awt.*; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.i…

配置listener tcps加密 enable SSL encryption for Oracle SQL*Net

一 配置客戶端和服務端的wallet 2端配置方法一致&#xff0c;相互添加證書 orapki wallet create -wallet “/u01/oracle/wallet” -pwd Wdkf984jkkgekj434FKFD -auto_login_local orapki wallet add -wallet “/u01/oracle/wallet” -pwd Wdkf984jkkgekj434FKFD -dn “CNho…

Zabbix監控MySQL數據庫實戰

zabbix監控mysql的方式 只是安裝agent 啟用模板監控 啟用自定義腳本的模板監控 使用zabbix模版及結合shell腳本監控mysql 創建mysql的zabbix授權用戶 mysql> grant all PRIVILEGES on *.* to zabbixlocalhost identified by zabbix; ###創建一個有權限的訪問用戶lqb密碼設…

es1.7.2 按照_type先聚合,再按照時間二次聚合

// 設置查詢條件if (this.query ! null) {this.searchbuilder.setQuery(this.query);}TermsBuilder typeAggregation AggregationBuilders.terms("agg_type").field("_type");DateHistogramBuilder dateTermsBuilder AggregationBuilders.dateHistogram(…

[Android] 通過JNI 讓 JAVA 調用 android native 接口

前言&#xff1a; JNI (java native interface) 是一個庫&#xff0c;可以讓 java 代碼和其他語言互動&#xff0c;比如 java 通過 JNI 調用融合了 jni庫的 c/c 代碼&#xff0c;注意&#xff0c;這里要求 c/c代碼中必須通過鏈接 jni 庫并按照 JNI 規范定義一套可供 JAVA 調用…

STM32自帶的DSP庫的濾波初體驗(一)

最近在弄STM32自帶的DSP庫里的濾波&#xff0c;記錄一下&#xff1a; arm_fir_instance_q15 instance_q15_S; #define NUM_TAPS 16 //濾波系數的個數 #define BLOCK_SIZE 32 q15_t firStateF32[BLOCK_SIZE NUM_TAPS]; q15_t Fir_Coeff[NUM_TAPS] {-79, -136, 312, 6…

【02】基礎知識:typescript數據類型

1、布爾類型 boolean let flag: boolean false2、數字類型 number let num: number 6 //十進制 let num2: number 0xf00d //十六進制 let num3: number 0b1010 //二進制 let num4: number 0o744 //八進制3、字符串類型 string 用雙引號&#xff08;“&#xff09;或單引…

MongoDB 簡介

什么是MongoDB ? MongoDB 是由C語言編寫的&#xff0c;是一個基于分布式文件存儲的開源數據庫系統。 在高負載的情況下&#xff0c;添加更多的節點&#xff0c;可以保證服務器性能。 MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。 MongoDB 將數據存儲為一個…

mqttfx連上OneNET生成token時的一大坑,報用戶名或密碼錯誤

整個流程如下連接&#xff1a; MQTT.fx和MQTTX 鏈接ONENET物聯網開發平臺避坑細節干貨。 其中在生成token時&#xff0c;搞了半天在連接后都會報用戶名密碼錯誤 最后發現是格式問題&#xff0c;輸入所有字符后一定要雙擊看是否可以全選中&#xff0c;可以全選中說明字符的格式…

java spring cloud 企業工程管理系統源碼+二次開發+定制化服務 em

Java版工程項目管理系統 Spring CloudSpring BootMybatisVueElementUI前后端分離 功能清單如下&#xff1a; 首頁 工作臺&#xff1a;待辦工作、消息通知、預警信息&#xff0c;點擊可進入相應的列表 項目進度圖表&#xff1a;選擇&#xff08;總體或單個&#xff09;項目顯…

springBoot中service層查詢使用多線程CompletableFuture(有返回值)

重點&#xff1a; 1. 創建線程池 Executor executor Executors.newCachedThreadPool();//保存線程List<CompletableFuture<Void>> futures new ArrayList<>();2.使用 //這里可以是多個看下面代碼是在for中使用的 CompletableFuture<Void> future …