軟體自動化測試的專業領域

 自動化測試的專業領域

Automation Testing Domain

這篇文章主要說明自動化測試的專業領域與範疇。

同時也介紹一些業界常見的工具。

工具的使用源自於需要解決什麼樣的問題,

因此必須根據當下專案的狀況與目標採用適當工具。

要做到這樣,前提必須先知道有哪些工具可以採用?有什麼優缺點?

效能測試

使用工具:Jmeter http://jmeter.apache.org/

解決的問題:效能測試。例如,模擬3000個人同時訪問該網站的網路流量。

另一方面,Jmeter也可以運用在Web API的測試,透過 Http Request/Response的方式來驗證測試結果的正確性。

Apache JMeter

 

網站自動化測試

提到網站自動化測試,opensource的兩大主流就是 Selenium與 JMeter

Selenium Logo Apache JMeter

這兩個都是網站自動化測試業界的主流,但是測試的方法與觀點不同。

  • Selenium: 主要是以模擬使用者操作為目標的 End to End 測試。實際啟動瀏覽器,尋找瀏覽器上的網頁元件作操作與驗證。優點是這樣的測試最接近使用者的使用行為,但是缺點是這樣的測試會因為許多非預期因素而導致測試失敗。例如,找不到網頁元件、網頁載入過慢等。http://www.seleniumhq.org/
  • Jmeter: Jmeter主要是針對 Http Request / Response 內容做驗證。不管該 http response 後呈現的結果,也不會執行CSS/ JavaScript等。對於Jmeter來說 Http 的內容就像一般的文字內容。因此,驗證的動作只是針對該http response回傳的內容確定我們要找的關鍵字是否存在。這樣的測試相對容易,而且比較不會出錯。很適合用在做 WEb Restful 的測試。

手機自動化測試

使用工具:Appium

解決問題:Android app or iOS app  的自動化測試。手機的程式也可以利用Selenium進行自動化測試。

Appium(介於手機與自動化測試程式WebDriver script間)的出現,讓手機程式的自動化程式變得更容易。自動化測試程式不需要管是 iOS or Android,

也可以使用任何熟悉的語言 python, Java等,就可以撰寫自動化測式程式 (WebDriver Script)

Windows App的自動化測試

典型的Windows App像是小算盤,小畫家、EXCEL等。這些應用程式因為不是Web Service的形式,因此無法用Selenium做自動化測試。

目前比較常見使用的就是 AutoIT 或是 sikuli。

  • AutoIT: 主要運用Windows Object每個元件的ID來做定位,因此準確度比較高。 https://www.autoitscript.com/site/autoit/
  • Sikuli:主要運用看到的”畫面”圖形來做元件的定位,因此如果畫面稍有修改,顏色、字型、位子、形狀等,就會導致自動化測試的執行失敗。 http://www.sikuli.org/
小算盤 小畫家 EXCEL

Behavior Driver Development(BDD)

 

 

Scenario 1: Refunded items should be returned to stock
Given a customer previously bought a black sweater from me
And I currently have three black sweaters left in stock
When he returns the sweater for a refund
Then I should have four black sweaters in stock

BDD主要用於 User Acceptance Testing。目標就是希望將 User story 的寫法,變成可執行的測試程式。

與 TDD (unit Test)不同的是,TDD主要在驗證每一個API、function、class的輸入輸出正確性。

BDD主要是以使用者最終觀點來看系統的行為。

因此,BDD的測試程式就會變成這樣user story的形式出現。BDD最大的缺點是這樣的英文語法是需要規範的。

怎麼說呢?電腦怎麼知道 “a customer previously bought a black sweater from me” 這段句子要執行什麼或是如何判斷?

因此,程式語言就要定義這段英文要執行的程式碼。

問題來了,如果該語句英文有文法錯誤、拼錯,或是用不同的英文寫法,程式就會容易出錯。

造成,開發人員或是撰寫User story 一定要符合程式定義的語句。這是BDD開發最大的困難與缺點。

這類的工具程式很多,知名的包含 Robot framework, Cucumber, 還有Python 使用的behave等。

Scenario 1: Refunded items should be returned to stock
Given a customer previously bought a black sweater from me
And I currently have three black sweaters left in stock
When he returns the sweater for a refund
Then I should have four black sweaters in stock

 Unit Testing

這類的測試程式主要驗證每一個 function、method、Class等,每個程式模組的正確性。

每一種程式語言都有提供類似的 Unit Testing。例如 python的 unittest或是nose。Java的 Junit與 TestNG。

這類的 unittest都會提供下列主要功能:

  • Assertion驗證:  Assertion (Expected Results, TargetTesting(“Mydata”) )

如果沒有使用 unittest工具的話,對於 TargetTesting這個函數來說驗證通常寫法如下:

If TargetTesting(“Mydata”) == Expected_Results

print “testing success”

else

print “testing failure”

除此之外,每個測試的個案成功與失敗,如果要做格式化的管理與輸出都會比較麻煩。

使用 Unittest之後,程式就會類似如下:

@test (description = “Target Testing”)

Assertion (Expected Results, TargetTesting(“Mydata”) )

只需要使用 Assertion這個函數,給予兩個值,Unittest就會自動驗證該兩個值是否相等,並且會注意該測試個案成功還是失敗。

  •  測試個案執行

測試個案執行比較特別的是通常測試個案執行時需要環境的準備,或是設定 P1的測試個案 or P2的測試個案。

  • 測試結果的格式化輸出

UnitTest的工具都會提供格式化的測試結果輸出。例如:Java Junit or TestNG

 

多台電腦的測試架構 Framework

這裡指的測試架構主要是當有多台電腦環境的時候,如何將測試個案佈署並且回傳執行結果。

由於 Jenkins的使用普及,這部分目前漸漸由 Jenkins取代。每種自動化測試程式也會提供類似的機制。例如:Selenium GRID

自動化測試程式語言 Java or Python?

多半的自動化測試都會支援 Java or Python,

例如:Selenium WebUI的自動化測試,可以使用 Java, Python, C# or Ruby等程式語言

使用 Java or Python哪一種比較好? 其實沒有定論。Java or Python都有自己程式語言的特性與工具。

使用 Java 的優點是Selenium網站上的論壇或是範例多半都是 Java 為例子。另外,Java也可以支援 JMeter , Sikuli等。

以自動化測試所要完成的事情來說,使用 Java or Python都是不錯的選擇。

但是如果是以 UnitTest來看,使用的語言就必須是受測目標所使用的程式語言。該應用程式如果是用 Java 開發,那麼就必須使用 Java UnitTesting。

小結

自動化測試的終極目標,讓每天團隊程式的開發,都可以即早得到驗證的結果。

這裡要強調的是”自動化” 而不是”人力”測試,因為只有”自動化”測試才能夠達到將下列整個軟體開發的周期循環縮短。

(圖檔來源:www.techrains.com)

Leave a Reply

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