自動化測試:功能測試設計七技巧
下面有七個功能測試設計技巧,讓UI測試更加可維護和更強力。
不要只是點擊 要檢查后續狀態
很多自動化測試工具包含一個特性,就是可以自動記錄一系列動作,然后回放。盡管這樣的記錄/回放功能在創建測試時容易駕馭,但是單純的記錄/回放動作會導致不良測試。具體而言,記錄/回放測試并不會檢測應用中操縱元素后的應用狀態。
點擊、鍵入、選擇以及其他的功能都會以某種方式改變應用的狀態。好的測試會在應用中操作元素后檢查本身的結果。如果自動化測試跟隨一個鏈接,就要讓測試檢查結果頁是否正確。如果測試生成一個報告,就要檢查報告內容是否正確。
等待,請勿停止
通常,一個應用在結果可以用測試檢查之前需要一些時間。這一點在Ajax在Web瀏覽器調用中尤為普遍。簡單地進行測試停止或者在檢查這樣的結果之前休 眠幾秒是很吸引人的,但是停止或者休眠是不良實踐,如果應用用過長時間返回,然后測試就會生成錯誤失敗。如果應用更快地返回,然后測試在轉移的過程中就是 浪費時間。
取代停止或者休眠,讓測試等待應用的具體方面出現了。這不僅僅讓測試減少錯誤失敗的傾向,而且也導致了更強的測試,因此測試根據生成的測試等待方面,實際等待檢查應用結果。
使用分離定位 不是索引
做測試的時候要是像“點擊這個頁面上的第三個鏈接”或者“選擇列表上的第五個元素”這樣就更好了。代替根據索引操縱應用的具體方面,為這樣的元素找出或者創建唯一識別符值得努力。
如果命令鏈接改變了,或者命令列表改變了,測試就會導向一種預期外的路徑,維護這樣不可預知的測試相當難。
用正則表達式檢查排列次序
應用以正確的序列顯示給用戶非常重要。無論是表格的列數還是列表的元素,或者是頁面本身的文本,自動化測試檢測事物正確的排列很重要。
這有一堆事情應該以“一”、“二”、“三”的順序出現。測試可以使用類似的正則表達式檢查出這些事情序列。下面是一個使用簡化的正則表達式“glob”的例子,“glob”在Selenium以及其他自動化測試工具中可用:
以下是引用片段: | getText | glob:one*two*three | | click | sort_thing | | getText | glob:three*two*one | |
這個測試檢查的第一步是輸入文本“one”,隨后是文本“two”,然后是“three”。“*”表明測試允許“one”"two""three"之間 任意的字符。測試第二步點擊導致“one”“two”“three”倒序排列,然后測試第三步檢查這個排列是否成功了。
一次且僅一次
正如上面所指出的,在應用中等待一個元素出現是較好的實踐。通常這樣的例子中一旦元素出現,測試會希望操作這個元素,實例就是點擊。這是抽象通用動作到 期自己的方法或者模型的最佳實踐,然后測試按需調用這些動作。下面是一個例子,在Fitnesse和Selenium語法中wait-for-and- click抽象。
以下是引用片段:!| scenario | Wait for and click | elementLocator |
| waitForElementPresent | @elementLocator |
| click | @elementLocator |
So from a test itself we need only write:
| open | www.foo.com |
| Wait for and click | link=Welcome to Foo! |
不要使用條件語句
有時,測試環境具有不可預見性。在這樣的案例中,在測試中使用條件語句很誘人,例如“if this element exists, click it, if it does not exist, do something else.”這種方法會存在很多問題。一個問題就是類似使用索引代替具體定位器導致的問題:如果應用測試改變,自動化測試將會以完全不可預期和位置路徑傳 下去,導致錯誤失敗(或者更糟糕的是錯誤成功),讓維護更加困難。另一個問題是條件語句聲明的一個分支(錯誤地)出現在一起,測試在引入時從未顯示一個缺 陷。
使用Javascript創建可重用隨機數據
最后,下面是使用Selenium和Fitnesse,進行具體的測試數據最佳實踐的例子。在這個例子中,測試需要輸入唯一的Social Security Number,然后檢查SSN是否實際上輸入到應用中:
以下是引用片段: | type; | ssn | javascript{RN =Math.floor(Math.random()*9999999);while (String(RN).length < 8) { RN=RN+'0';}} | | $SSN= | getValue | ssn | | click | link=Save | | type; | search | $SSN | | GET SEARCH RESULTS CONTAINING THE SSN | |
Selenium會內嵌評估Javascript。這種測試的首行鍵入域ID值為“ssn”,在運行中生成隨機的9個數字,通過評估 Javascript作為type()動作的證據。第二行使用Fitnesse功能來存儲來自“ssn”域的9個數字,稱之為“$SSN”。然后測試輸入 九個相同數字到這個域,其ID值為“search”。在測試本身解決數據需求是唯一的時候,這是一種高雅有用的方法,在任何合理的測試工具或者框架中同樣 的方法應該有效。
優良測試的優良設計
這些只是一些例子,協助確保自動化測試強力并可維護。很多其他的例子也存在,每一種自動化測試工具或者框架都有優良的設計實踐單獨針對工具。
posted on 2012-05-21 10:08 順其自然EVO 閱讀(181) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄