在生產環境,QA會同時跑幾十個上百個的test case。如果用單機串行的話,是一件非常耗時的事情,估計比手點快不了多少。使用並行方案的話,有兩種方法,一個是自己寫並行框架,一個是用現成的Selenium Grid。
自己寫並行框架,好處是一切盡在掌控,有問題可以快速定位,針對業務的定制化程度高,用戶用起來方便。目前想到的問題是,如果在單機多賬戶登錄同一系統的情況下,會不會串cookie?不過我發現,可能是瀏覽器廠商把不同的Driver實例給隔離了,這樣就省很多事。實現思路大體是:各Client(測試腳本的解析器)向MQ隊列發送TestCase消息,多個執行器監聽同一隊列消費消息,執行測試用例,再返回結果。
由於自己偷懶,這里先用現成的Selenium Grid來做並行。SeleniumGrid是一個集群,有一個中心節點,稱為hub;多個執行節點,稱為node。其中,Hub的職責是管理各Node節點(如節點信息、是否Alive)、與Client建立連接、向各Node發送執行命令。 Client與Hub的分界點在Driver這兒。即Selenium腳本還是在Client上跑,但是控制的Driver是在Grid里面。(這其實跟自己寫並行框架的邊界划分已經不同了)。下面就入個門,介紹一下安裝、運行、Helloworld(哦,應該是Hello baidu...)
1. 下載:
1.Selenium Standalone Server: http://www.seleniumhq.org/download/

2.各種Driver。在www.seleniumhq.org/download也能找到入口。

ChromeDriver可以直接訪問:https://sites.google.com/a/chromium.org/chromedriver/
2. 安裝:
1. 找兩台機器,虛擬機也可以。我這里用的是A:10.189.1.206,B:10.189.1.201。A作為Hub,B作為Node
2. 安裝Hub:把下載的selenium-server-standalone-3.5.2.jar 放在在A機器上,運行命令:
java -jar selenium-server-standalone-3.5.2.jar -role hub

3. 安裝Node:同樣,把下載的selenium-server-standalone-3.5.2.jar 放在在B機器上,運行命令:
java -jar selenium-server-standalone-3.5.2.jar -role node -port 6666 -hub http://10.189.1.206:4444/grid/register
這里必須要指定Hub的地址,端口號(port)可以設定,也可以不管。執行完后,Hub的界面如下,表示Hub已經接受了Node的注冊:

可以訪問整個Grid的控制台:http://10.189.1.206:4444/grid/console/

4. 在Hub和Node上安裝ChromeDriver:
把下載的chromedriver.exe復制到A機器上,比如放在C:\SeleniumPlugins目錄下。在環境變量的Path中,添加該目錄地址:C:\SeleniumPlugins。
在B機器上,執行同樣的操作。

3. C#代碼:
1. 創建控制台項目,添加Selenium引用。

2. 代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Chrome;
namespace RunTestOnRemoteGrid
{
class Program
{
static void Main(string[] args)
{
IWebDriver driver=new ChromeDriver();
try
{
driver = new RemoteWebDriver(new Uri("http://10.189.1.206:4444/wd/hub"), new ChromeOptions());
driver.Navigate().GoToUrl("http://www.baidu.com");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
driver.Quit();
}
}
}
}
3. 運行:就可以看到Client端在執行,沒啥動作,而B機器上,打開了Chrome瀏覽器,訪問Baidu
