婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 基于Docker+Selenium Grid的測試技術應用示例代碼

基于Docker+Selenium Grid的測試技術應用示例代碼

熱門標簽:烏海智能電話機器人 藍點外呼系統 寧夏房產智能外呼系統要多少錢 威海人工外呼系統供應商 貴陽教育行業電話外呼系統 撫順移動400電話申請 在百度地圖標注車輛 做外呼系統的公司違法嗎 400電話申請方案

Selenium Grid介紹

盡管在未來將會推出的Selenium 4.0版本中對Selenium Grid的一些新特性進行了說明,但是目前來看官方并沒有太多詳細文檔供大家參考,所以本書中仍結合目前被廣泛使用的Selenium Grid 版本進行講解。

正如其官網對Selenium Grid的描述,它是一個智能代理服務器,允許Selenium測試將命令路由到遠程Web瀏覽器實例。其目的是提供一種在多臺計算機上并行運行測試的簡便方法。使用Selenium Grid,一臺服務器充當將JSON格式的測試命令路由到一個或多個已注冊Grid節點的中樞,以獲得對遠程瀏覽器實例的訪問。Hub有一個已注冊服務器的列表,它可以訪問并允許控制這些實例。Selenium Grid允許我們在多臺計算機上并行運行測試,并集中管理不同的瀏覽器版本和瀏覽器配置。

圖1 Selenium Grid的組件構成圖

如圖1所示,可以看到Selenium Grid主要由2部分構成,即:Hub和Nodes。您可以使用Python、Java、C#等語言編寫測試Selenium腳本,每個Selenium Grid僅有一個Hub,客戶端腳本可以指定連接到該Hub(主控節點或者叫集線器),Hub接收客戶端腳本的運行測試請求,同時將這些測試請求分發到已注冊的一個或多個節點去執行并收集運行結果。Selenium Grid中可以一個或多個Node(節點)。作為節點的機器不必與Hub或其他Node具有相同的操作系統或相同的瀏覽器。即:某個Node節點可能是Windows操作系統,而在該系統上安裝的是Internet Explorer瀏覽器,另外的Node節點可能用的是Linux、Mac操作系統,而它們安裝的瀏覽器可能是Firefox、Safari、Chrome等。這些Node節點的設置結合測試來講,就是要看您想做那些操作系統、瀏覽器版本的兼容性測試了,在實際工作中請結合測試執行計劃和策略進行選擇。

基于Docker的Selenium Grid的相關配置

在Docker Hub中提供了Selenium Grid的相關鏡像文件可供使用,如圖2所示。

圖2 Selenium Grid的相關鏡像資源

這里,我們應用“docker pull”命令分別將這3個鏡像拉取下來,對應的拉取命令如下:

docker pull selenium/hub
docker pull selenium/node-chrome
docker pull selenium/node-firefox

鏡像文件拉取到本地后,您可以使用“docker images”命令查看一下相關鏡像的信息,如圖3所示。

圖3 Selenium Grid的相關鏡像信息

這里,先來測試一下Hub與Node節點之間的連通性。

啟動Hub,如圖4所示。

圖4 創建并啟動hub容器

創建并啟動 chromenode容器節點,如圖5所示。

圖5 創建并啟動chromenode容器節點

創建并啟動 firefoxnode容器節點,如圖6所示。

圖6 創建并啟動firefoxnode容器節點

接下來,在本機瀏覽器地址欄輸入“http://localhost:4444/grid/console”,即:打開Selenium Grid的控制臺,將出現圖7所示頁面。

圖7 Grid Console控制臺信息

從圖7可知,當前使用的Selenium Grid 版本為3.141.59版本,對應連接到Hub的兩個Node節點分別是IP為172.17.0.4的Linux操作系統使用的是Firefox 75.0版本的瀏覽器和IP為172.17.0.3的Linux操作系統使用的是Chrome 81.0.4044.92版本的瀏覽器。在默認情況下Hub節點使用的是4444端口,而Node節點在本例中使用的是5555端口,如果在同一個容器中出現端口沖突等情況,則您需要根據實際情況進行調整設置其他端口以避免端口沖突情況發生。

基于Docker+Selenium Grid的案例演示

下面,筆者將結合Bing搜索案例在Chrome和Firefox瀏覽器上實現兼容性測試。在經過前面Selenium、Docker和Selenium Grid相關知識的學習后,您想到了什么?是不是可以通過使用Docker+Selenium Grid就能夠完成基于不同瀏覽器的兼容性測試呢?是的,這確實是個好主意。

但是,如果讓Selenium測試腳本在不同瀏覽器中運行,又需要做些什么呢?

在腳本設計上,您需要做一些改變,通常情況下,要在腳本的運行時指定主機和端口,腳本類似于以下方式:

import time
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
 
driver = webdriver.Remote(
    command_executor='http://192.168.1.102:4444/wd/hub',
    desired_capabilities=DesiredCapabilities.CHROME)
 
base_url = 'https://cn.bing.com'
driver.get(base_url)
driver.save_screenshot('chrome.png')
driver.close()

通常在執行時,只需指定Hub的地址(即:http://192.168.1.102:4444/wd/hub)。這里宿主機的IP如圖8所示, Hub會將腳本自動分配給Node節點去執行。

圖8 宿主機的IP地址信息

- command_executor參數:該參數為選填參數,可指定遠程服務器URL字符串或自定義遠程連接,默認為“http://127.0.0.1:4444/wd/hub”。

- desired_capabilities參數:該參數為必填參數,可根據情況配置啟動瀏覽器會話時請求功能的字典。這里我們應用的是“DesiredCapabilities.CHROME”,您可以查看其對應源代碼如下所示。

class DesiredCapabilities(object):
    """
    Set of default supported desired capabilities.
    Use this as a starting point for creating a desired capabilities object for
    requesting remote webdrivers for connecting to selenium server or selenium grid.
    Usage Example::
        from selenium import webdriver
        selenium_grid_url = "http://198.0.0.1:4444/wd/hub"
        # Create a desired capabilities object as a starting point.
        capabilities = DesiredCapabilities.FIREFOX.copy()
        capabilities['platform'] = "WINDOWS"
        capabilities['version'] = "10"
        # Instantiate an instance of Remote WebDriver with the desired capabilities.
        driver = webdriver.Remote(desired_capabilities=capabilities,
                                  command_executor=selenium_grid_url)
    Note: Always use '.copy()' on the DesiredCapabilities object to avoid the side
    effects of altering the Global class instance.
    """
 
    FIREFOX = {
        "browserName": "firefox",
        "acceptInsecureCerts": True,
    }
 
    INTERNETEXPLORER = {
        "browserName": "internet explorer",
        "version": "",
        "platform": "WINDOWS",
    }
 
    EDGE = {
        "browserName": "MicrosoftEdge",
        "version": "",
        "platform": "ANY"
    }
 
    CHROME = {
        "browserName": "chrome",
        "version": "",
        "platform": "ANY",
    }
 
    OPERA = {
        "browserName": "opera",
        "version": "",
        "platform": "ANY",
    }
 
    SAFARI = {
        "browserName": "safari",
        "version": "",
        "platform": "MAC",
    }
 
    HTMLUNIT = {
        "browserName": "htmlunit",
        "version": "",
        "platform": "ANY",
    }
 
    HTMLUNITWITHJS = {
        "browserName": "htmlunit",
        "version": "firefox",
        "platform": "ANY",
        "javascriptEnabled": True,
    }
 
    IPHONE = {
        "browserName": "iPhone",
        "version": "",
        "platform": "MAC",
    }
 
    IPAD = {
        "browserName": "iPad",
        "version": "",
        "platform": "MAC",
    }
 
    ANDROID = {
        "browserName": "android",
        "version": "",
        "platform": "ANDROID",
    }
 
    PHANTOMJS = {
        "browserName": "phantomjs",
        "version": "",
        "platform": "ANY",
        "javascriptEnabled": True,
    }
 
    WEBKITGTK = {
        "browserName": "MiniBrowser",
        "version": "",
        "platform": "ANY",
    }
 
    WPEWEBKIT = {
        "browserName": "MiniBrowser",
        "version": "",
        "platform": "ANY",
    }

從DesiredCapabilities類的源碼可知“DesiredCapabilities.CHROME”是該類定義的一個字典對象。

這里筆者采用多線程的方式,實現分別在Chrome和Firefox瀏覽器執行Bing搜索業務,對應腳本如下。

Grid_Test.py文件內容:

from threading import Thread
from selenium import webdriver
from time import sleep,ctime
from selenium.webdriver.common.by import By
 
def Test_Bing(Host, Browser):
    caps = {'browserName': Browser}  
    driver = webdriver.Remote(command_executor=Host, desired_capabilities=caps)
    driver.get('http://www.bing.com')
    driver.find_element(By.ID,'sb_form_q').send_keys('異步社區')
    driver.find_element(By.ID,'sb_form_go').click()
    PicName=Browser+'_result'+'.png'
    driver.save_screenshot(PicName)
    assert ('沒有與此相關的結果' not in driver.page_source)
    sleep(2)
    driver.close()
 
if __name__ == '__main__':
    pcs = {'http://192.168.1.102:4444/wd/hub': 'chrome',
             'http://localhost:4444/wd/hub': 'firefox'
             }
    threads = []
    tds=range(len(pcs))
 
    # 創建線程
    for host, browser in pcs.items():
        t = Thread(target=Test_Bing, args=(host, browser))
        threads.append(t)
 
    # 啟動線程
    for i in tds:
        threads[i].start()
    for i in tds:
        threads[i].join()

從上面的腳本,大家可以看到創建了一個名稱為Test_Bing()的函數,其包含兩個參數,分別是主機和瀏覽器。函數的執行意圖就是根據遠程服務器URL字符串和傳入的瀏覽器名稱字符串,在對應的瀏覽器中執行搜索業務,且搜索詞為“異步社區”,對執行結果進行截圖,截圖的名稱為對應瀏覽器名稱+“_result.jpg”文件,并對搜索后的結果進行斷言。需要說明的是,這里對結果進行截圖的目的不僅僅是想看一下結果,還有一個很重要的原因是在使用Selenium Grid時,執行測試過程中不會出現瀏覽器,所以您看不到執行過程,為了證明結果的正確性我們也需要截一個圖證明其確實是工作了并且執行是正確的。如果您還想看到不同的容器在執行過程中的界面,也可以使用VNC Viewer連接到對應容器(但需下載對應的selenium/node-firefox-debug和selenium/node-chrome-debug鏡像文件,debug結尾的鏡像都帶有VNC服務端,本機安裝VNC客戶端,即可遠程連接。5900端口為VNC Viewer的監聽端口,故做了一個端口映射),如圖9和圖10所示。

圖9 創建并啟動Debug版本的節點容器

圖10 VNC Viewer觀察節點容器的腳本執行情況

事實上這對于測試工作并沒有太多意義,故不做太多文字贅述。

在主函數中,定義了一個包含2個元素的字典,大家可以看到筆者使用了2種同一個地址不同的表示方式(宿主機的IP地址為192.168.1.102),而“localhost”也表示本機,即宿主機。那么為什么不都用“192.168.1.102”或者“localhost”呢?這是因為字典的鍵(Key)是不允許重復的。接下來創建了一個線程列表,以pcs字典的鍵、值作為Test_Bing()函數的參數,并添加到線程列表。而后啟動線程列表中的各線程。

在運行腳本前,需保證創建并啟動Hub和Node節點容器(注:這里筆者應用的為非Debug版本Node鏡像),如圖11所示。

圖11 創建并啟動Hub和Node節點容器

腳本執行完成后,將會生成“chrome_result.jpg”和“firefox_result.jpg”這2個圖片文件,如圖12所示。

圖12 腳本執行完成后生成的圖片文件信息

如圖13和圖14所示,在本次兼容性測試中大家可以看到這2個瀏覽器都執行了相同的Bing搜索業務,它們的頁面展示、布局、內容基本是相同的,但是卻存在2個小的問題,就是在Chrome瀏覽器中搜索到的結果為“855,000 Results”,而Firefox瀏覽器中搜索到的結果為“859,000 Results”,它們是不一致的。另一個小問題是,在Firefox瀏覽器會顯示“Sign in”和一個登陸圖標,而在Chrome瀏覽器中卻沒有。理論上來講這是2個嚴重級別較低的小Bug,但筆者建議針對這兩個小的差異,需要和產品、研發的同學再確認一下,產品、測試、研發應統一、明確需求,明確后再修改需求或代碼,使兩者保持一致。

圖13 chrome_result.jpg圖片文件信息

圖14 firefox_result.jpg圖片文件信息

到此這篇關于基于Docker+Selenium Grid的測試技術應用示例代碼的文章就介紹到這了,更多相關Docker Selenium Grid測試技術內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

標簽:慶陽 那曲 朝陽 銅川 泰州 周口 松原 蕪湖

巨人網絡通訊聲明:本文標題《基于Docker+Selenium Grid的測試技術應用示例代碼》,本文關鍵詞  基于,Docker+Selenium,Grid,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《基于Docker+Selenium Grid的測試技術應用示例代碼》相關的同類信息!
  • 本頁收集關于基于Docker+Selenium Grid的測試技術應用示例代碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产suv精品一区二区6| 在线观看成人小视频| 欧美性猛交xxxx乱大交退制版| 欧美日韩视频在线观看一区二区三区| 日韩欧美在线综合网| 中文成人综合网| 人人狠狠综合久久亚洲| 色综合天天综合网国产成人综合天| 日韩一区二区三区在线| 一区二区视频免费在线观看| 国产一区二区三区电影在线观看 | 麻豆精品久久精品色综合| 91福利国产成人精品照片| 91精品国产综合久久国产大片| 国产精品久久久久久妇女6080| 日本成人在线网站| 91国偷自产一区二区三区观看| 欧美精品一区二区久久久| 一区二区三区在线视频免费观看| 久久99日本精品| 亚洲欧洲精品一区二区三区 | 精品国产免费一区二区三区四区| 日韩理论在线观看| 国产精品小仙女| 欧美变态凌虐bdsm| 麻豆极品一区二区三区| 欧美一区二区三区在线视频| 亚洲国产一区二区三区| 色欧美乱欧美15图片| 亚洲欧洲成人av每日更新| 国产一区在线看| 久久久久久久久久久久久久久99 | 欧美日韩另类一区| 一区二区在线看| 在线精品国精品国产尤物884a| |精品福利一区二区三区| av色综合久久天堂av综合| 国产精品天干天干在线综合| 丁香五精品蜜臀久久久久99网站 | 粉嫩aⅴ一区二区三区四区五区| 精品国产第一区二区三区观看体验| 日韩激情一二三区| 欧美v亚洲v综合ⅴ国产v| 精品影视av免费| 国产三级欧美三级日产三级99| 九九九精品视频| 国产日韩高清在线| 99久久精品国产精品久久| 亚洲免费av高清| 欧美天天综合网| 视频在线观看91| 欧美成人r级一区二区三区| 国产一区二区三区视频在线播放| 国产亚洲精久久久久久| 成人av片在线观看| 亚洲无线码一区二区三区| 3atv在线一区二区三区| 国内精品自线一区二区三区视频| 久久影院午夜论| 91片黄在线观看| 日韩制服丝袜av| 欧美国产国产综合| 欧美天堂一区二区三区| 久久99热国产| 一区二区三区在线观看视频| 精品久久人人做人人爽| 成人污视频在线观看| av一区二区三区在线| 亚洲一区二区三区视频在线播放 | ...av二区三区久久精品| 欧美自拍偷拍一区| 国产成人在线观看| 亚洲va欧美va天堂v国产综合| 久久亚区不卡日本| 欧美专区日韩专区| 成人黄色综合网站| 蜜臀av性久久久久av蜜臀妖精| 国产精品系列在线| 欧美成人一区二区三区在线观看| 99久久99精品久久久久久| 免费成人在线观看| 一区二区三区在线免费播放| 精品欧美一区二区三区精品久久 | 欧美日韩免费观看一区二区三区| 亚洲黄色性网站| 精品日韩欧美一区二区| 国产98色在线|日韩| 免费xxxx性欧美18vr| 欧美精彩视频一区二区三区| 精品一区二区免费视频| 2023国产精品自拍| 国产成人高清视频| 一区二区三区影院| 日韩一区二区三区三四区视频在线观看 | 欧美成人乱码一区二区三区| 国产精品白丝在线| 亚洲综合丁香婷婷六月香| 久久 天天综合| 精品国产百合女同互慰| 天天av天天翘天天综合网色鬼国产| 中文字幕乱码一区二区免费| 久久九九影视网| 欧美天堂亚洲电影院在线播放| 日本不卡不码高清免费观看| 日韩三级免费观看| 精品亚洲欧美一区| 国产精品久久久一本精品 | 色999日韩国产欧美一区二区| 久久av中文字幕片| 国产精品国产三级国产三级人妇| av电影天堂一区二区在线观看| 国产成人精品免费在线| 九九视频精品免费| 国产福利一区二区三区视频在线 | 欧美一级欧美一级在线播放| 欧美三级在线看| 欧美日韩在线观看一区二区 | 欧洲一区二区三区免费视频| 91成人在线精品| 欧美日韩在线播放三区四区| 欧美日韩国产色站一区二区三区| 欧美午夜电影一区| 91九色02白丝porn| 久久99精品国产麻豆不卡| 中文字幕一区二区不卡| 精品国产一区二区三区不卡| av不卡免费在线观看| 五月婷婷久久综合| 欧美三级日韩在线| 成人国产视频在线观看| 夜夜揉揉日日人人青青一国产精品| 日本精品一区二区三区高清 | 一区二区三区精密机械公司| 欧洲生活片亚洲生活在线观看| 久久99国产精品免费| 日韩电影免费在线观看网站| 国产无人区一区二区三区| 欧美精品乱人伦久久久久久| 97精品国产97久久久久久久久久久久| 五月开心婷婷久久| 欧美一级欧美三级在线观看| 成人动漫在线一区| 成人不卡免费av| 开心九九激情九九欧美日韩精美视频电影 | 粉嫩在线一区二区三区视频| 99r国产精品| 色综合久久66| 欧美一区二区三区男人的天堂| 欧美日韩精品欧美日韩精品| 久久久久国产免费免费 | 国产日产欧美一区二区三区| 在线影院国内精品| 91视频www| 日韩一区二区电影| 日韩欧美色综合网站| 欧美日韩黄视频| 日韩视频一区在线观看| 精品久久久久久亚洲综合网| 日韩一区中文字幕| 成人18视频在线播放| 国产一区欧美二区| 欧美国产日韩a欧美在线观看| 国产美女av一区二区三区| 国产色产综合色产在线视频| 国产成人av电影在线播放| 亚洲精品一区二区三区影院| 国产欧美一区二区精品性| 国产精品国产三级国产专播品爱网| 一区二区三区在线免费视频| 日本91福利区| www.欧美日韩| 中文无字幕一区二区三区| 五月天精品一区二区三区| 国产精品久久久久久久久搜平片| 日韩免费性生活视频播放| 亚洲天堂免费看| 天天av天天翘天天综合网色鬼国产| 国产福利91精品一区| 欧美视频日韩视频在线观看| 国产精品国产自产拍在线| 性欧美大战久久久久久久久| 国产成人av自拍| 91精品国产aⅴ一区二区| 日韩欧美一二三四区| 亚洲精品国产成人久久av盗摄| 成人永久aaa| 欧美日韩一区二区欧美激情| 综合婷婷亚洲小说| 成人av小说网| 久久精子c满五个校花| 奇米精品一区二区三区四区| 亚洲色图视频网| 美女一区二区视频| 精品国产污网站| 国产又粗又猛又爽又黄91精品| 欧美剧情片在线观看| 青青草91视频| 国产一本一道久久香蕉| 91麻豆精品视频| 亚洲狠狠丁香婷婷综合久久久|