簡體   English   中英

使用selenium,Nunit,Selenium Grid,C#,webdriver / remote control進行自動瀏覽器測試

[英]Automated Browser Testing using selenium, Nunit, Selenium Grid, C#, webdriver/remote control

我一直在研究如何使用各種不同的方法自動化瀏覽器測試數周。 Seleniums網站非常模糊,這是最好的選擇。

我安裝了

  1. Selenium Webdriver
  2. 遙控
  3. Selenium Grid
  4. Apache Ant
  5. Nunit(以及你可能需要做的其他一切)

我終於放棄了自己的嘗試,並想知道最好的方法。

我希望能夠

  1. 在許多不同的瀏覽器上加載相同的網頁
  2. 在許多虛擬機(我已設置)上加載相同的網頁
  3. 能夠拍攝比較不同瀏覽器結果的快照。

我對使用C#進行編程有所了解,並希望通過Nunit運行我的測試。

任何人都可以給我指示或指向我已經擁有它們的網站嗎? 謝謝。

我已經使用junit和Selenium WebDriver構建了一個測試框架,它滿足了你的每一個要點。 雖然它不完全是你所要求的,但我覺得無論如何它對你都有好處。

在許多不同的瀏覽器上加載相同的網頁

使用Selenium的網格,設置非常簡單。 設置一些虛擬機,其中包含您要測試的環境。例如,在我們的環境中,我們有一個運行四個節點(作為虛擬機)的網格,其設置如下所示

  • Windows與IE7和FireFox
  • Windows與IE8和FireFox
  • Windows與IE9和Firefox
  • Linux與FireFox

請注意,Selenium建議只允許在Windows節點上運行一個IE實例。 在每個上述節點上,存在指定IE的一個實例,並且允許在任何給定時間運行指定FF的五個實例。 通過網格設置和集線器配置,啟動測試是輕而易舉的。 在WebDriver中,使用DesiredCapabilities對象設置所需的環境,然后關閉測試並等待結果返回。

Platform desiredPlatform;
DesiredCapabilities desiredCapabilities;
desiredPlatform = Platform.LINUX;
desiredCapabilities = DesiredCapabilities.firefox();
desiredCapabilities.setPlatform(desiredPlatform);
desiredCapabilities.setVersion("11");

WebDriver driver = new RemoteWebDriver("http://hubURL", desiredCapabilities);

在許多虛擬機(我已設置)上加載相同的網頁

我通過強制測試以螺旋方式以非常規的方式運行來解決這個問題。 每個JUnit測試都使用我放在一起的共享線程庫,它創建了在不同線程中所需的所有必需的RemoteWebDrivers。 這些線程中的每一個在其節點上同時運行,而父線程處於等待並終止所有線程。 然后進入下一個運行多線程的測試。

我遇到了一些問題,例如在所有子線程中檢索Junit堆棧跟蹤。 我通過將Std.err重定向到父線程上的字節流來解決這個問題。 所有錯誤都被路由到該流,然后我轉換為字符串並在每次測試結束時打印到Std.out 在測試結束時生成的html頁面包括完美的Std.out

能夠拍攝比較不同瀏覽器結果的快照

雖然我已經開始使用它,但是遠程抓取屏幕截圖存在一些固有的問題。 如果進程作為服務運行,IE將返回黑屏幕截圖。 解決方法是從命令行運行jar並保持用戶登錄,在這種情況下屏幕截圖正確返回。 這是瀏覽器中的一個已知問題,並且確實沒有很好的解決方案。 截圖大致類似於此

WebDriver augmentedDriver = new Augmenter().augment(driver);
TakesScreenshot ss = (TakesScreenshot) augmentedDriver;
String base64Screenshot = ss.getScreenshotAs(OutputType.BASE64);
byte[] decodedScreenshot = Base64.decodeBase64(base64Screenshot.getBytes());
FileOutputStream fos = new FileOutputStream(new File(imageName));
fos.write(decodedScreenshot);
fos.close();

它將捕獲的屏幕截圖從遠程計算機的運行瀏覽器保存到本地計算機上。

實際上,瀏覽器自動化仍在努力穩定自身。 有許多重要的功能,例如您所詢問的功能,我在任何框架中都沒有牢固地實現這些功能。 但是,隨着時間的推移,我相信很多這樣的事情會得到解決,各地的QA開發人員都會歡欣鼓舞。

至於第二點:您可以讓持續集成服務器完成工作,而不是使用Grid。 在我的公司,我們使用Jenkins和所謂的配置矩陣 - 它讓你在多個Jenkins節點上運行相同的工作。

至於第一個,我認為詹金斯在這里也會有所幫助。 您可以在同一節點上運行多個作業。 雖然我從未嘗試過,所以我並不十分確定。 這只是一個想法,我不會真的推薦這樣的解決方案。 您可能還想閱讀此博客文章,描述如何使用Selenium Grid並行運行測試。 對於使用Java的人,我建議閱讀有關TestNG的並行測試

你的第三點有點模糊。 快照是什么意思? 你想要比較什么樣的結果?

Selenium RC已過時,webdriver是創建硒測試的更可靠方式。 我看到上面的回答更多地關注java方面。 下面提到了有關如何使用C#和selenium webdriver實現此處提出的問題的更多信息

關於如何設置IDE(VS express),nUnit和selenium參考如何在VSExpress上設置C#,nUnit和selenium客戶端驅動程序以進行自動化測試

在創建啟動瀏覽器的簡單腳本時,請參考使用Nunit和C#創建基本Selenium Web驅動程序測試用例。

關於如何在許多不同的瀏覽器上加載相同的網頁建議參考如何使用selenium和c#本地調用不同類型的瀏覽器驅動程序

在為此啟用多個虛擬機(我已設置)上的相同網頁時,您需要使用遠程webdriver而不是普通的webdriver。 使用遠程webdriver,您可以啟動不同類型的瀏覽器。 請參閱此網頁如何使用C#中的遠程webdriver調用/運行不同類型的Web驅動程序瀏覽器

要在不同的瀏覽器上拍攝快照,您可以參考鏈接使用C#/ Selenium webdriver中的遠程/本地webdriver捕獲屏幕截圖

您可能還會考慮免費的Telerik測試框架 這是Telerik商業測試工作室產品的基礎。 測試框架提供跨瀏覽器支持,在動態內容情境(AJAX)方面做得很好,還可以處理操作系統級別的對話框,如文件上載/下載對話框。 您也可以隨時拍攝瀏覽器的快照。

您可以將框架包裝在您喜歡的任何跑步者中。 我已經毫無困難地使用了NUnit和MbUnit。

如果您需要有關自動化的幫助,還可以選擇支持包。

(披露:我為Telerik工作,作為他們的Test Studio傳道者)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM