自動化軟體測試工具的專業範疇
這篇文章主要說明自動化測試會用到的相關工具、為什麼要用這樣的工具、解決的問題與效益。
軟體自動化測試是一個很專業領域,由於所解決的特定問題不同,所以延伸許多的工具與技術。
隨著各式各樣的軟體平台與新興服務的誕生,軟體自動化測試也是一個不斷發展的領域。這邊針對一些業界常見的工具做介紹。
Selenium
提到網站自動化測試的領域一定會講到 Selenium。為什麼 Selenium這麼熱門,為什麼要使用 Selenium呢?
Selenium 主要用在網站的自動化測試 End to End.。Selenium可以實際啟動瀏覽器進行使用者所有在畫面會操作的行為。
免費! 這是理由之一。但是免費的還有很多,為什麼要用 Selenium呢?
另外一個主要原因是因為 Selenium可以支援的瀏覽器很廣,FireFox, Chrome, IE, Safari, Opera.等。
Selenium支援的 programming language 也很廣,Java, Python, Ruby, C#..等。
其他免費 open source的 Browser automation 測試工具還有https://github.com/geb/geb。
但是筆者建議精通一種自動化測試架構 Selenium與程式語言 Python or Java 其實就足夠!
Robot Framework
Robot Framework 主要用在 Acceptance Testing 或是 BDD (Behavior Driven Development Testing)的測試領域。
Robot framework 也是基於Selenium 之上,提供額外的關鍵字指令,讓Web 自動化測試程式變得更容易。同時也提供HTML測試報告的功能。
如果沒有使用 Robot Framework 可以透過下列組合完成網站自動化測試。
- Selenium
- Java + TestNG (TestNG 提供測試報告的功能,可以將測試結果輸出為 HTML清楚的列出每個測試個案執行結果。)
- Jbehave or Cucumber (主要用在 BDD or Acceptance testing)
佈署與執行
當自動化測試程式完成之後,我們希望執行在不同的平台 Win7, win2012, IE, Chrome, Foxfox, Mac 等,
因此我們會需要一個可以佈署測試程式的 framework
筆者建議可以使用 Selenium GRID or Selenium GRID extra
https://github.com/groupon/Selenium-Grid-Extras/blob/master/README.md
相對於 SeleniumGRID,Selenium GRID extra 針對穩定性的提升與使用介面上有些改善。
另外,筆者也會建議 Software Testing Automation Framework (STAF)
Unit Testing
為什麼自動化測試需要Unit Testing framework ? 因為通常這樣的 unit Testing framework 會提供
- 測試個案結果的驗證,紀錄測試成功或是失敗
- 測試報告HTML。每個測試個案的結果
- 測試的執行。測試個案執行上是否有先後順序、相依性等。
- Data Driven Testing。透過參數檔案的設定,測試個案可以讀取參數檔案執行每個不同的資料值進行測試。
不使用 Unit Testing framework 也是可以做自動化測試。但是上述主要的情境會變成程式要自己處理。
筆者強烈建議使用 unit Testing 來協助管理測試個案與結果。
如果是使用Java : 可以用 JUnit 或是 TestNG。TestNG 最大的一個優點之一就是可以自動產生 HTML report.
如果是使用 Python: 可以使用 unittest
PhantomJS
PhantomJS 主要是提供給 Web Developer 使用的網站自動化測試工具之一。
Web Developer 可以很容易透過 JavaScript 的執行就達到自動化測試。
同時,PhantomJS 可以與 Selenium一起使用,
對於使用 Java or Python 來做自動化測試而言,程式完全不用改,除了一行之外:
System.setProperty(“phantom.binary.path“, “c:\\Path-drivers\\phantomjs.exe“);
WebDriver driver = new PhantomJSDriver();
為什麼要使用 PhantomJS ? 如果我又不是 WebDeveloper
我已經習使用 Selenium Java or Selenium Python來完成自動化測試,使用 PhantomJS 有什麼好處?
使用 PhantomJS 主要的好處在於,執行時 PhantomJS並不會實際啟動瀏覽器! (這算什麼好處?)
由於 PhantomJS主要使用的 Script Engine 與 Chorme / Safari 都是相同。
因此,不啟動瀏覽器下的自動化測試執行,可以讓整個測試執行的時間大幅縮短。
筆者很建議可以先用 PhantomJS做基本的測試,接著再使用 Selenium 啟動實際瀏覽器 FireFox / Chrome做測試。
因為使用 PhantomsJS 由於執行速度快,可以比較快的知道測試的結果。
JMeter
Jmeter 主要用在網站的效能測試。要如何模擬3000個線上使用者?
Selenium無法做到這樣的模擬。因此如果需要大量的使用者或是流量,我們就需要 JMeter 的協助。
如果你的自動化測試程式是 Selenium/Java 完成,是可以將該測試程式包裝成 Junit Class 透過 Jmeter 虛擬出大量的使用者
程式語言的選用
針對網站的自動化測試程式。筆者建議 Python or Java 。程式語言的選擇,考量上主要有幾個原因
- Library 支援的廣泛。Python 與Java 都有廣泛的 lib可以使用。開發上可以透過這些 lib 達到需要的功能。
- Unit Testing Framework: Python 與 Java 都有相對應支援的 unit Testing framework。相對的讓測試個案的執行與報告變得容易。
- 其他系統的整合:Python or Java 都提供良好的程式介面可以與其他系統整合。
兩個語言主要的差異在於
- python 為 Script 程式語言。如果執行有錯誤的時候,Python程式碼可以立即用一般的文字編輯器修改
- Java需要 Java Runtime。如果執行上有問題的時候,必須要找到原始的Java程式碼,程式修改後需要重新編譯執行。
另外,由於 Sikuli 與 JMeter 也是用Java 開發,因此 Java 對於這兩個工具的整合會更容易與直接。
筆者建議可以選用Java! 為什麼呢? 因為 Java 除了自動化測試程之外,用途十分廣泛,Android也是 Java 開發。許多大型的網站也是 Java 開發。
AutoIT
https://www.autoitscript.com/site/autoit/
我們大部分講的自動化測試程式都是針對網站的測試。
如果是針對 Windows Application (例如小算盤、小畫家),這就是 Selenium 的罩門。
Selenium無法處理這類的應用程式,因此通常我們會透過 AutoIT的幫忙。
AutoIT 可以自動化 Windows Application 的操作,編譯成 EXE 執行檔。
AutoIT 雖然網站是 .com,但是使用AutoIT 整個工具還是免費的!
Behavior-Driven Development (BDD)
如果是用Java 開發,BDD建議的工具 jbehave.org
如果是用Python開發,可以使用 behave https://pythonhosted.org/behave/tutorial.html
這類的工具很多,還包含 Lettuce, Cucumber
這類的工具主要目的也是 Acceptance Testing 與 Robot framework 要達到的目的類似。
可另外參考筆者這篇文章 “把人類語言變成自動化測試腳本” http://www.qa-knowhow.com/?p=1943
話說回來,不需要 BDD 可不可以執行測試程式? 答案是肯定的。
筆者經驗,多半的情況下 BDD 都不需要而且沒有使用。
為什麼呢? 主要原因在於 “把人類語言變成自動化測試腳本”!
這也表示撰寫的人類語言是需要受到一定的規範,電腦才可以執行成自動化測試腳本。
如果每次寫的都不同。例如瀏覽google 網站來說,
有時候寫 Visit Google Page 有時候寫 Open Google Page,有時候寫 launch Google Page…
那麼電腦還是很難執行的! 而這樣的規範往往會造成 BDD 的美意雖好,但是執行困難的主要原因。