Web Service 如何有效率的做到100%自動化測試

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://jmeter.apache.org/

測試腳本就是定義許多不同的 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

 

 

 

 

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *