使用Selenium進行網頁自動化測試

姜志民 2017/03/04 16:15:11
2458






主題

使用Selenium進行網頁自動化測試

介紹

網頁程式開發完成後,每次都用人工方式從網頁介面輸入相關數據,又要用「眼睛」去確認經過系統處理過後的數據是否正確,這既浪費時間又可能漏掉沒有測試到的邏輯。


如果商業邏輯或是程式異動過,又必須重新用人工方式測試過所有案例,這是一個不科學的測試方法。接下來要介紹使用Selenium,來進行科學的測試,Selenium是一套網頁自動化測試工具可以真實模擬對瀏覽器的操作。

作者

姜志民

版本

1.0

產出日期

2017 / 02/ 23





1 目的

網頁程式開發完成後,每次都用人工方式從網頁介面輸入相關數據,又要用「眼睛」去確認經過系統處理過後的數據是否正確,這既浪費時間又可能漏掉沒有測試到的邏輯。


如果商業邏輯或是程式異動過,又必須重新用人工方式測試過所有案例,這是一個不科學的測試方法。接下來要介紹使用Selenium,來進行科學的測試,Selenium是一套網頁自動化測試工具可以真實模擬對瀏覽器的操作。




2 測試情境說明

筆者準備兩個專案來做說明,第一個專案是「力力餐廳營運系統」這個系統有計算「本日盈餘」的功能,而第二個專案是用Selenium進行Junit test黑箱測試,測試「本日盈餘」的計算出來的數字是否正確。


若日後「力力餐廳營運系統」的「本日盈餘」計算邏輯有異動,只要透過Junit test,就可以馬上知道是否正確。




3 WebDriver

Selenium進行Junit test時,會驅動一個瀏覽器進行測試,以照瀏覽器的類型不同而下載相對應的WebDriver來做驅動。目前有提供的WebDriver類型,可以參考http://www.seleniumhq.org/download/


筆者是使用Google Chrome瀏覽器進行測試,所以是下載ChromeDriver (https://sites.google.com/a/chromium.org/chromedriver/) ,下載後找一個目錄解壓縮,在後續才會使用到。




4 餐廳營運系統 (第一個專案)

營運系統畫面如下:



index.jsp程式碼:



HelloController.java後端程式碼:




5 Selenium單元測試(第二專案)

使用Maven專案,pom.xml的dependencies設定如下:



在test專案上按右鍵 -> Maven -> Update Project,來更新Maven Dependencies。



單元測試程式的架構會以Page Object Pattern進行實作,所以會將「html網頁動作」與「html 的標籤處理」實作細節搬到class物件與測試邏輯條件分開,以增加可維護性與閱讀性。



單元測試主程式碼:



PageObject物件主要是放「html網頁動作」與「html 的標籤處理」:



PageResult物件主要是取得系統執行完畢後的結果:



test專案架構如下:




6 執行單元測試

先啟動「力力餐廳營運系統」,然後在test專案->Run As->JUnit Test如下圖:



執行JUnit Test後,WebDriver會驅動Google Chrome進行模擬對瀏覽器的操作。測試過程中,可以看到Google Chrome被啟動,各項資料被自動填入並送出計算,最後可以看到計算後的網頁畫面。而在Eclipse的JUnit視窗可以看到測試結果,如下圖:




7 結論

筆者舉例的上述系統看起來很簡單,用人工方式輸入資料再驗證「盈餘」金額,雖然很快就能完成測試。但可以想一想,若今天是一個很複雜的系統需輸入很多資料,再用「眼睛」驗證系統內的資料,這將是非常花時間的工作!所以要養成做自動化測試的習慣,這樣才能增加程式品質。



姜志民