(一) 前言 Selenium Grid可以將測試分佈在若幹個物理或虛擬機器上,從而實現分佈方式或並行方式執行測試。 這個鏈接是官方的相關說明。 https://github.com/SeleniumHQ/selenium/wiki/Grid2 (二) Selenium Grid 大概就是這個意思( ...
(一) 前言
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中,之前已經說過火狐、IE、谷歌瀏覽器環境的配置)
(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 @classmethod 10 def setUpClass(cls): 11 #設置操作系統和瀏覽器 12 desired_caps = {} 13 desired_caps['platform'] = cls.PLATFORM 14 desired_caps['browserName'] = cls.BROWSER 15 #這裡的IP就是HUB所在電腦的ip 16 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 #定位編程語言下的小類Python 24 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 @classmethod 31 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、 實現多個測試腳本並行運行(例如幾百個測試腳本要是一個個運行的話,要用很長時間)