Web Service 如何有效率的做到100%自動化測試
這篇文章主要討論如何將自動化測試推向極限 100%的測試個案都自動化嗎?
這邊指的測試個案是 End To End 的測試,並非單純的 unit Testing。
End To End 測試要達到 100%的目標相對更有挑戰。
有沒有比較有效率的方式達成? 這些工具使用上有哪些限制?
希望透過這篇文章作一些經驗的交流。
困難與挑戰
End To End 的測試其中最大的挑戰不外乎:
- 1. UI 使用者畫面的流程改變
- 2. 網頁載入的時間不確定
針對第一個問題”UI 使用者畫面的流程改變”
要達到 100%自動化測試目標,必須要將自動化測試程式變成一個動態更新的過程。
下一個問題是如何讓更新修改的過程更容易?
第二個問題 : “網頁載入的時間不確定”
這個問題在於如何提升自動化測試的穩定度。
如果是透過 Selenium必須啟動瀏覽器(如FireFox)執行的測試,就必須透過 Implicit Wait 或是 Explicit Wait 來處理
如果不啟動瀏覽器相對來說就會測試結果就會比較穩定。
要解決這些問題,整個測試框架可以用哪些工具,分別說明如下。
Selenium IDE
Download latest released version 2.9.0 released on 09/Mar/2015 or view the Release Notes and theninstall some plugins.
筆者十分推薦這個工具。因為開發速度快,又可以重複執行、可以透過指令模式啟動、可以執行FireFox, Chorme等。
特別針對畫面不斷修改的部分,可以利用這個工具先完成自動化測試。
因為開發速度快,之後要修改也比較容易。不管是重新錄製的方式或是直接更新 HTML都很方便。
功能比較穩定之後,再考慮將特定測試個案轉成程式碼 Java/Python。
筆者不建議一開始就用 Java or Python "努力"的寫程式完成所有自動化測試個案。
所以必須先分清楚哪些透過 Selenium IDE 完成自動化測試,哪些透過程式完成。
PhamtonJS
http://phantomjs.org/download.html
如果是透過程式完成的Selenium自動化測試程式。筆者建議採用 PhamtomJS執行。
因為網頁的自動化測試執行過程中,啟動瀏覽器,載入網頁,驗證網頁資訊。
這個過程會因為畫面載入時間點的關係導致失敗,而且執行時間較長。
因此,折中一些可以採用 PhamtonJS的方式。
將自動化測試程式執行在不需要啟動瀏覽器的狀況下(headless)完成。
JMeter
JMeter 是另外一種自動化測試的方法。這樣的測試方式接近 End 2 End。
雖然不啟動瀏覽器,但是整個 Http Request 與 Http Response 的行為是相同。
測試腳本就是定義許多不同的 Http Request (Get/Post)的行為,並且驗證 Http Response 。
這種方式也是筆者建議的一種方式。因為建置速度快,而且測試的行為接近使用者開啟瀏覽器的行為。
與瀏覽器不同的是,這種方法不會執行 JavaScript 、不會顯示 CSS或是特別處理顯示 Image 檔案。
因此如果該頁面需要 JavaScript 動態的執行,這個方式可能會不適用。
有的操作真的點擊不到?
這時候就必須藉用 sikuli 的協助,透過抓取特定螢幕畫面的方式來做點擊。
http://doc.sikuli.org/faq/030-java-dev.html
[pastacode lang=”java” message=”” highlight=”11,12″ provider=”manual”]
import org.sikuli.script.*;
public class TestSikuli {
public static void main(String[] args) {
Screen s = new Screen();
try{
s.click("imgs/spotlight.png", 0);
s.wait("imgs/spotlight-input.png");
s.type(null, "hello world\n", 0);
}
catch(FindFailed e){
e.printStackTrace();
}
}
}
[/pastacode]
Data Driven Testing
當測試資料有100組的時候,
我們希望測試程式可以自動可以讀取這 100組資料,變成100組測試個案測試結果。
這時候我們就需要用到 DDT的模組。每一種程式語言都有類似的模組。
可另外參考筆者這兩篇文章。
Selenium GRID Extra
https://github.com/groupon/Selenium-Grid-Extras
上述自動化測試程式都完成,我們希望部署到多台電腦同步執行,或是多台電腦不同環境做相容性測試。
這時候就需要一個可以將自動化測試佈署到多台電腦的框架。筆者建議的事 Selenium GRID Extra。
這樣的框架主要的困難在於執行 1000次之後,是否還可以穩定的執行?
Java ExtentReports Reporting
最後,也是最重要的。測試結果報告到底這個自動化測試測試了哪些步驟?驗證了什麼內容?
這段通常只有開發測試成的自己比較清楚。因此就有 BDT (Behavior Driven Testing )。
筆者並不建議這種方式。因為會讓程式維護負擔加重。
筆者建議的事透過 unittest 或是 report/log 模組的協助,將測試報告結果輸出更多有用的資訊。至少包含
- 測試的步驟
- 驗證Assert哪些內容
Java 筆者建議用這個模組 ExtentReports http://extentreports.relevantcodes.com/
可另外參考筆者這篇文章 http://www.qa-knowhow.com/?p=2195