如何在同一台電腦”同時”啟動多個瀏覽器做自動化測試
這篇文章主要討論如何運用自動化測試的優勢,讓電腦同時執行許多的瀏覽器進行測試。
主要用到的工具就是 Java TestNG。TestNG除了可以幫助我們做 Unit Test之外,TestNG還可以幫助測試個案的執行。
最後,我們還是一樣舉一個Java實作來做說明。
同步執行測試個案
自動化測試其中一個最大的效益就是完成人無法完成的事情。
當自動化測試完成之後,執行上可以有兩種做法,可以大幅縮短測試時間的週期。
1. 在電腦數量有限的狀況下,我們可以同一電腦上同時啟動多個瀏覽器執行測試個案。這個方式可以透過TestNG的設定完成。
2. 電腦數量或是虛擬機器允許的情況下,可以在多台電腦上同時啟動。這個方式可以透過Selenium GRID架構或是雲端
這篇文章主要討論的是方法一。在同一台電腦,同時啟動多個Chrome or Firefox瀏覽器,執行測試程式。
利用 TestNG中,所提供的 TestNG.xml 設定檔來達成這樣的目的。
但是,需要考量…
同時執行測試個案必須要考量每個測試個案是否有相依性或是順序性。
每一個測試都相互獨立,並且不會影響預期的測試結果。
例如,Google Search就是一個很好的例子。每一個測試Google Search都相互獨立,而且相互不會影響Google Search Results。
另外,如果是要多個瀏覽器同時執行,需要考量電腦資源耗用的狀況。有可能會因為電腦的CPU 或是記憶體的不足導致瀏覽器啟動失敗。
測試情境
這個範例程式我們主要有三個測試個案。
測試個案1: 啟動Chrome,搜尋關鍵字 Search 1
測試個案2: 啟動 FireFox ,搜尋關鍵字 Search 2
測試個案3: 啟動 Chrome ,搜尋關鍵字 Search 3
我們利用TestNG,將同時執行這三個測試個案。
程式說明
TestNG除了我們所熟悉可以使用在 unitTest上,更可以應用在測試個案的執行。
例如,哪些測試個案優先執行,哪些測試個案要同步執行,要用多少個 Threads執行
這個範例中,我們主要設定用三個執行緒來執行。利用 parallel來同步執行 Java 程式中的 methods
<suite name=”TestSuite” thread-count=”3″ parallel=”methods” >
TestNG.XML範例
[pastacode lang=”java” message=”” highlight=”” provider=”manual”]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestSuite" thread-count="3" parallel="methods" >
<test name="test_Three_Chrome">
<classes>
<class name="mySelenium.TestNG_Three_ChromeSessions">
</class>
</classes>
</test>
</suite>
[/pastacode]
程式碼範例
[pastacode lang=”java” message=”” highlight=”” provider=”manual”]
package mySelenium;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class TestNG_Three_ChromeSessions {
@BeforeTest
public void setup(){
System.setProperty("webdriver.chrome.driver","C:\\chromedriver.exe");
}
@Test
public void executSessionOne(){
//First session of WebDriver
// System.setProperty("webdriver.chrome.driver","C:\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
//Goto guru99 site
driver.get("http://www.google.com/");
//find user name text box and fill it
driver.findElement(By.name("q")).sendKeys("Search 1");
}
@Test
public void executeSessionTwo(){
//Second session of WebDriver
// System.setProperty("webdriver.chrome.driver","chromedriver.exe");
WebDriver driver = new FirefoxDriver();
//Goto guru99 site
driver.get("http://www.google.com/");
//find user name text box and fill it
driver.findElement(By.name("q")).sendKeys("Search 2");
}
@Test
public void executSessionThree(){
//Third session of WebDriver
// System.setProperty("webdriver.chrome.driver","chromedriver.exe");
WebDriver driver = new ChromeDriver();
//Goto guru99 site
driver.get("http://www.google.com/");
//find user name text box and fill it
driver.findElement(By.name("q")).sendKeys("Search 3");
}
}
[/pastacode]