April 13, 2014

以Page Object Pattern撰寫Selenium測試程式

在解釋Page Object Pattern之前,我們來看以下測試程式

以上兩支測試程式分別用來測試以下案例
  1. Can_Register_User:使用者可以註冊帳號
  2. Cannot_Register_User_With_Empty_Username:註冊帳號時若沒有輸入帳號並送出,畫面將會出現正確的錯誤訊息

測試程式內容本身其實並不難理解,但存在code smell
  1. 過多的實作細節。對於非測試程式撰寫者來說,過多的資訊會造成閱讀困難,如果想快速地了解某個測試案例做了哪些事,程式碼閱讀者需要逐行研究
  2. 重覆的程式碼。以註冊帳號來說,不難想像還會有其它的測試案例存在,也因此會有重覆的程式碼會散亂在各個測試案例程式碼中
接下來先看重整過後的程式碼

測試程式是不是變得乾淨許多?Page Object Pattern是撰寫UI測試程式時會用到的一個設計模式,它其實是利用物件導向封裝的特性,將實作細節隱藏起來,增加程式的可讀性和複用性。以上面的例子來看,測試程式的閱讀者只需要了解RegisterPage類別及HomePage類別的抽象涵義即可了解該測試案例的用意,而無需了解到實作細節。下面為RegisterPage類別的實作細節,為了符合Page Object Pattern的特性,重整過後的程式碼也顯得整齊許多,且RegisterPage類別也符合Single Responsibility Principle

完整程式碼可由https://github.com/petekcchen/blog/tree/master/SeleniumDemo下載

參考

No comments: