2017-01-28 38 views
1

業務案例:我試圖自動化生產流程以用自動化取代人類。我在給定日期以各種間隔接收許多觸發器,並且只要我得到觸發器,腳本應該開始自動運行。我有80個節點(在80臺機器中)配置爲Selenium集線器。如何使用Selenium Grid高效地分配負載

場景:觸發器1應執行腳本1在一個空閒節點中。 觸發器2應該在空閒節點之一中執行腳本2。 觸發器3應該在空閒節點之一中執行腳本3。 觸發器4應執行腳本1在一個空閒節點中。

在上面的場景中,腳本1總是隻能在一臺特定的機器上執行。這是因爲在創建遠程Web驅動程序對象時必須指定遠程主機url。所以如果我得到兩個觸發器來執行腳本1同時,執行將在同一臺機器上順序發生,儘管我有很多機器處於空閒狀態。平行執行並不是理想的選擇,因爲我得到觸發器同時啓動相同腳本的50-60次執行。

問題聲明:我無法在整個免費機器上高效地分配負載。

是否是硒網格的限制?有沒有更好的方法來管理負載分配?是否有可能創建遠程webdriver而不指定節點url?

回答

1

在上面的場景腳本1總是會得到一個 特定機器執行內整合是因爲它是必需的,而建立一個遠程Web司機object.So指定 遠程主機URL,如果我得到 兩個觸發到執行腳本1在同一時間然後執行 將依次發生在同一臺機器,雖然我有很多 機器閒置。並行執行不是這裏的理想選擇 因爲我得到觸發器啓動相同的腳本50-60執行同時在 。

該網格的建立是爲了確保分配正確發生,並且您的測試不必知道這一點。你如何實例化你的RemoteWebDriver?你傳遞給你什麼網址?您應該傳遞Grid Hub的URL而不是節點的URL。

只要您的測試僅限於DesiredCapabilities中的瀏覽器風格,Hub將能夠在所有節點間平均分配測試。如果在方程中也包含PLATFORM,則適合匹配的節點數量將減少。無論哪種情況,您都需要在問題中包含以下附加詳細信息以獲得特定答案:

  1. 您是如何啓動節點的? [是否有涉及的任何節點配置JSON? ]
  2. 你如何實例化您的RemoteWebDriver
+0

我手動啓動節點使用命令「Java的罐子硒的服務器獨立-3.0.0.jar -role節點-hub的http:// :4444/grid/register -browser browserName = firefox,maxInstances = 1 -maxSession 1「。當節點的URL傳遞給遠程Web驅動程序對象時,我可以調用遠程機器中的腳本。但是,如果集線器的URL已通過那麼我得到下面的錯誤 –

+0

2017年1月30日上午10點12分55秒org.openqa.selenium.remote.ProtocolHandshake createSession 信息:試圖雙方言會議,假設Postel的定律在遠端執行 Jan 30, 2017 10:12:55 AM org.openq a.selenium.remote.ProtocolHandshake createSession 信息:回落到原始的OSS JSON有線協議。 2017年1月30日上午10點12分55秒org.openqa.selenium.remote.ProtocolHandshake createSession 信息:回落到直接的W3C遠程端連接 –

+0

線程「main」中的異常org.openqa.selenium.SessionNotCreatedException:無法創建新的遠程會話。需要的能力=能力[{}] 構建信息:版本:'3.0.0',修訂:'350cf60 ',時間:'2016-10-13 10:48:16 -0700' 系統信息:主機:'',ip:'',操作系統名稱:'Windows Server 2012 R2',os.arch:' amd64',os.version:'6.3',java.version:'1.8.0_101' 驅動程序信息:driver.version:RemoteWebDriver –

-1

使用Selenium Grid時,會設置一個集線器,物理機將向其註冊特定功能。例如,Mac會將自己註冊爲帶有Safari的Mac。一臺linux機器與FireFox和一臺Windows機器一樣是一臺支持IE的機器。

在測試中,您連接到HUB並請求連接到具有特定功能的機器。集線器然後用腳本隨後連接的可用機器的地址回覆。這是Hub發揮的唯一作用,因此它應該完全符合您的需求。

通過Selenium HQ網站上的示例,它應該爲您澄清它。這個例子可以在一臺機器上運行,但理想情況下,最好將它分成幾部分。