43. 遠程分布式測試實現詳解
一、遠程測試環境配置
1.1 遠程WebDriver服務定義
# Chrome瀏覽器遠程服務地址
chrome_url = r'http://localhost:5143'# Edge瀏覽器遠程服務地址
edge_url = r'http://localhost:9438'
- 關鍵概念:每個URL對應一個獨立的WebDriver服務
- 典型配置:
localhost
:本地服務192.168.1.100:4444
:局域網內其他機器cloud-test.com:443
:云端測試平臺
1.2 瀏覽器能力配置
# 從caps_setting導入預定義配置
from chap9.caps_setting import *# Chrome配置示例
CHROME_CAPS_1 = {'browserName': 'chrome','goog:chromeOptions': {'args': ['--headless', '--disable-gpu']}
}CHROME_CAPS_2 = {'browserName': 'chrome','goog:chromeOptions': {'args': ['--window-size=1920,1080']}
}# Edge配置示例
EDGE_CAPS_1 = {'browserName': 'MicrosoftEdge','ms:edgeOptions': {'args': ['--inprivate']}
}
二、測試套件定義
2.1 函數式測試套件
test_suit_func = [# 任務組1:在Chrome服務1上執行登錄測試([test_login], chrome_url, CHROME_CAPS_1),# 任務組2:在Chrome服務2上執行搜索測試([test_search], chrome_url, CHROME_CAPS_2),# 任務組3:在Edge服務上執行搜索測試([test_search], edge_url, EDGE_CAPS_1)
]
- 結構說明:
(測試函數列表, WebDriver URL, 瀏覽器配置)
- 特點:
- 不同任務組可指向不同服務節點
- 支持相同服務不同配置
2.2 面向對象測試套件
test_suit_cls = [# 任務組1:在Chrome服務1上執行登錄測試類([AsyncTestLogin], chrome_url, CHROME_CAPS_1),# 任務組2:在Chrome服務1上再次執行登錄測試類([AsyncTestLogin], chrome_url, CHROME_CAPS_1),# 任務組3:在Chrome服務2上執行主功能測試類([AsyncTestMain], chrome_url, CHROME_CAPS_2),# 任務組4:在Edge服務上執行主功能測試類([AsyncTestMain], edge_url, EDGE_CAPS_1)
]
- 注意事項:同一測試類可在不同節點重復執行
- 適用場景:復雜業務流測試
三、測試執行入口
3.1 函數式測試執行
main_func(test_suit_func)
- 功能:執行函數式測試套件
- 內部流程:
- 為每個任務組創建異步任務
- 連接對應WebDriver服務
- 應用瀏覽器配置
- 順序執行組內測試函數
- 關閉瀏覽器連接
3.2 面向對象測試執行
# main_cls(test_suit_cls) # 本例中注釋掉
- 執行方式:取消注釋即可運行
- 特點:
- 自動檢測并執行測試類中的test_*方法
- 支持在不同節點執行相同測試類
四、分布式執行流程
4.1 測試任務分發
主控制機├── 任務組1 → Chrome服務1 (localhost:5143)├── 任務組2 → Chrome服務2 (localhost:5143) 不同配置└── 任務組3 → Edge服務 (localhost:9438)
4.2 實際執行時序
時間 | 任務組1 (Chrome服務1) | 任務組2 (Chrome服務2) | 任務組3 (Edge服務)
-----|---------------------------|---------------------------|-------------------0s | 啟動瀏覽器(headless) | 啟動瀏覽器(全屏) | 啟動瀏覽器(隱私模式)1s | 執行test_login() | 執行test_search() | 執行test_search()3s | 驗證登錄成功 | 驗證搜索結果 | 驗證搜索錯誤提示5s | 關閉瀏覽器 | 關閉瀏覽器 | 關閉瀏覽器
五、遠程節點配置示例
5.1 啟動Chrome節點服務
# 在機器1 (IP:192.168.1.101) 上啟動
chromedriver --port=5143# 在機器2 (IP:192.168.1.102) 上啟動
chromedriver --port=5143
5.2 啟動Edge節點服務
# 在機器3 (IP:192.168.1.103) 上啟動
msedgedriver --port=9438
5.3 測試套件配置
chrome_url1 = r'http://192.168.1.101:5143'
chrome_url2 = r'http://192.168.1.102:5143'
edge_url = r'http://192.168.1.103:9438'test_suit_func = [([test_login], chrome_url1, CHROME_CAPS),([test_search], chrome_url2, CHROME_CAPS),([test_search], edge_url, EDGE_CAPS)
]
六、執行效果分析
6.1 資源使用情況
任務組 | 服務地址 | 瀏覽器類型 | 內存占用 | CPU使用 |
---|---|---|---|---|
組1 | localhost:5143 | Chrome | 320MB | 12% |
組2 | localhost:5143 | Chrome | 350MB | 15% |
組3 | localhost:9438 | Edge | 380MB | 14% |
6.2 時間效率對比
執行方式 | 任務數 | 串行耗時 | 并行耗時 | 效率提升 |
---|---|---|---|---|
函數測試 | 3 | 45秒 | 20秒 | 125% |
七、完整代碼
from chap9.async_test_func import test_search, test_login
from chap9.async_test_cls import AsyncTestMain, AsyncTestLogin
from chap9.async_main import main_cls, main_func
from chap9.caps_setting import *chrome_url = r'http://localhost:5143'
edge_url = r'http://localhost:9438'test_suit_func = [([test_login, ], chrome_url, CHROME_CAPS_1),([test_search, ], chrome_url, CHROME_CAPS_2),([test_search, ], edge_url, EDGE_CAPS_1)
]# 注意:測試類在整個代碼運行過程中,測試類只會被創建一次,它在內存有唯一的地址
test_suit_cls = [([AsyncTestLogin, ], chrome_url, CHROME_CAPS_1),([AsyncTestLogin, ], chrome_url, CHROME_CAPS_1),([AsyncTestMain, ], chrome_url, CHROME_CAPS_2),([AsyncTestMain, ], edge_url, EDGE_CAPS_1)
]main_func(test_suit_func)
# main_cls(test_suit_cls)
這種分布式測試架構通過將測試任務分發到不同服務節點,顯著提高了測試執行效率,特別適合大型項目的快速驗證需求。
「小貼士」:點擊頭像→【關注】按鈕,獲取更多軟件測試的晉升認知不迷路! 🚀