Python+Selenium筆記(十一):配置selenium Grid,pythonselenium
(一) 前言
Selenium Grid可以將測試分布在若干個物理或虛擬機器上,從而實現分布方式或並行方式執行測試。
這個連結是官方的相關說明。
https://github.com/SeleniumHQ/selenium/wiki/Grid2
(二) Selenium Grid
大概就是這個意思(一個中心節點(HUB),N個子節點(NODE,作業系統+瀏覽器))
(三) 環境配置
1. 前提:已經配置相應的 JDK環境(LINUX內建JDK環境(我裝的LINUX內建的是1.8),WINDOWS要自己配置JDK環境(我裝的是1.9))
2. https://docs.seleniumhq.org/download/ 下載 Selenium Standalone Server
3. 啟動Selenium Grid server(hub)
Selenium Grid server(hub,也就是存放代碼的那台電腦),切換到Selenium Standalone所在的目錄(直接在Selenium Standalone所在的檔案夾shift+滑鼠右鍵,選擇在此處開啟命令視窗,或者CD 路徑),然後執行下面的命令
java -jar selenium-server-standalone-<version>.jar -role hub
例如:java -jar selenium-server-standalone-3.9.1.jar -role hub
可以加 -port 指定連接埠號碼,預設4444
http://localhost:4444/grid/console 啟動後用這個地址訪問
4. 配置node(節點)
(1) Node(也就是其他電腦或虛擬機器環境,也可以直接將hub所在的那台電腦添加為node),在系統變數path中加上相應的驅動檔案的路徑。(例如:將chromedriver所在的路徑添加到path中,之前已經說過Firefox、IE、Google瀏覽器環境的配置)
(2) 執行下面的命令
java -jar selenium-server-standalone-3.9.1.jar -role node -browser "browserName=firefox,version=62,maxSession=3,platform=WINDOWS" -hub http://192.168.4.196:4444/grid/register -port 5555
說明:
browserName:瀏覽器名稱
Version:瀏覽器版本
maxSession:支援並發瀏覽器執行個體的數量
platform:作業系統
-hub:http:// (Selenium Grid server(hub)的IP)+啟動時設定的連接埠號碼/ grid/register
-port :指定連接埠號碼
(3) 要在同一電腦(或虛擬機器)添加其他節點,再開啟一個CMD視窗,運行上面的命令就行了(記得修改瀏覽器資訊),記得同一電腦上連接埠號碼別重複。
(四) 環境配置好後如所示(我電腦開著一個linux的虛擬機器太卡了,有點浪費時間的感覺,不想弄了,不過應該和windows上的差距不會太大,有環境的可以試下添加path變數、在終端執行相關命令添加節點)
(五) 樣本(運行指令碼會發現,直接在相匹配的環境中運行測試)
1 import sys 2 import unittest 3 from selenium import webdriver 4 from selenium.webdriver.common.action_chains import ActionChains 5 class SearchTest(unittest.TestCase): 6 #定義2個全域屬性,沒有外部參數時,使用預設值 7 PLATFORM = "WINDOWS" 8 BROWSER = "firefox" 9 @classmethod10 def setUpClass(cls):11 #設定作業系統和瀏覽器12 desired_caps = {}13 desired_caps['platform'] = cls.PLATFORM14 desired_caps['browserName'] = cls.BROWSER15 #這裡的IP就是HUB所在電腦的ip16 cls.driver = webdriver.Remote('http://192.168.3.2:4444/wd/hub',desired_caps)17 cls.driver.implicitly_wait(10)18 cls.driver.maximize_window()19 cls.driver.get("https://www.cnblogs.com/")20 21 def test_search_by_look(self):22 seach_class = self.driver.find_element_by_xpath('//li/a[@href="/cate/2/"]')23 #定位程式設計語言下的小類Python24 seach_small =self.driver.find_element_by_xpath('//li/a[@href="/cate/python/"]')25 ActionChains(self.driver).move_to_element(seach_class).perform()26 seach_small.click()27 #檢查開啟的網頁標題是不是 Python - 網站分類 - 部落格園28 self.assertEqual(self.driver.title,"Python - 網站分類 - 部落格園" )29 30 @classmethod31 def tearDownClass(cls):32 cls.driver.quit()33 34 if __name__ == '__main__':35 #使用命令列運行指令碼時,如果添加了參數,PLATFORM和BROWSER使用外部參數36 if len(sys.argv)>1:37 SearchTest.PLATFORM = sys.argv.pop()38 SearchTest.BROWSER = sys.argv.pop()39 #加verbosity=2參數,在命令列中顯示具體的測試方法40 unittest.main(verbosity=2)
(六) 未解決的問題(單單配置環境是不夠的)
1、 實現多環境並行運行同一測試指令碼
2、 實現同一指令碼在不同環境中並行運行