難以對于UI樣式或UI邏輯進行斷言
以上圖為例,有一個UI樣式類的缺陷(左側菜單樹的根節點 “console”下面多出來一條虛 線)和一個UI邏輯類的缺陷(右側用戶列表只有一頁,但“下一頁”和“最后一頁”圖標依然是可以點擊的,即沒有灰顯)。此類缺陷即使對于經驗豐富、心思縝密的測試人員,在人工測試時也是很可能發現不了的,并且在自動化測試過程中也很難進行斷言。
即使存在上述問題,測試腳本中是否有充分的斷言,依然是評判自動化測試有效性的一個重要指標。但實施過自動化測試的人應該都會有這樣的體會:“大部分斷言在大部分情況下只是佐證軟件是運行正常的”。
當然,所有人都應該是非常期待看到這樣的結果,畢竟誰也不希望每次回歸測試時都是用例大面積不通過。只是辛辛苦苦寫這些斷言語句的測試人員心里未免有些“小遺憾”。
本系列上篇文章中談到“很多人一提到自動化測試腳本,馬上就想到需要提供錄制工具”,但如果換個角度思考,很可能就是“柳暗花明又一村”。
在這里,我們同樣換個角度思考,假設我們的自動化測試主要目標是為了證明軟件運行正常,那么我們會怎么做?
筆者這邊的一個經驗就是“按照完整的業務流程來組織測試用例,只對少量、必要的關鍵點進行斷言”。以“租戶對虛擬化資源的申請使用”為例,來具體看看測試用例的組織方式:
1)新租戶注冊;
2)管理員登錄系統,對注冊租戶進行審批,然后退出系統;
3)審批后的租戶登錄系統;
4)租戶申請所需要的虛擬化資源(比如,40G硬盤、2核CPU、2G內存),然后退出系統;
5)管理員登錄系統,對租戶申請的資源進行審批,然后退出系統;
6)租戶登錄系統,在已申請資源的基礎上創建安裝指定操作系統的虛擬機;
7)斷言虛擬機是否創建成功;
8)租戶退出系統;
9)管理員登錄系統,刪除租戶;
10)斷言租戶之前申請的資源是否被完全釋放;
11)租戶再次登錄系統,斷言是否無法登錄;
上述測試用例就是按照完整的業務流程進行組織,并且只對少量關鍵點(7、10、11)進行斷言,如果整個用例可以運行通過,就能證明這個業務是沒有問題的。
另外還有一個值得考慮的現象,就是相對于自動化測試而言,一個優秀的測試人員在人工測試時是如何判斷功能正確與否的呢?他不會死板的只盯著某幾個輸入域的值,他一定還會同時關注頁面上所有數據的正確性、會更加關注業務流程是否正確、會更敏銳的發現頁面樣式或UI邏輯類的缺陷。
為了兼顧“證明軟件正常運行”和“人性化的識別軟件缺陷”,一個優秀的測試工具應該考慮提供以下多種斷言機制。
一、 控件級細粒度斷言
即前面提到的最常見的斷言方式。在測試過程中,可以在任何位置增加斷言腳本,來判斷頁面指定控件是否存在、控件顯示值是否為預期結果等。通常建議只對關鍵校驗點進行斷言。
二、 頁面級粗粒度斷言
通過對比前(之前測試通過)后(后續持續發布)版本在測試用例路徑和輸入參數相同的情 況下,整個頁面內容(包括截圖和數據)是否嚴格相同來做粗粒度斷言。
通過頁面截圖進行斷言有兩個實現要點:首先要選擇一個合適的截圖方案(筆者推薦采用Selenium WebDriver提供的TakesScreenshot接口);其次需要提供圖片對比工具,以便測試人員可以一眼看出兩個版本頁面截圖的差異。
下面是筆者在測試框架中實現的截圖自動化對比功能的實際效果。下圖中左側部分是“實際結果截圖”、右側是“預期結果截圖”、中間部分是差異對比,測試人員一眼便可看出其中的Bug:“表格行選中的翻頁緩存(在當前頁選中幾條記錄,翻到下一頁再翻回本頁,需要保持之前的行選中狀態)功能丟失了”。
通過頁面數據進行斷言的實現方式相對簡單一些,首先要提取頁面上所有的數據(或文本),接著進行格式化,然后再自動化對比。 “頁面級粗粒度斷言”的特點及應用場景如下:
原文轉自:http://www.uml.org.cn/Test/201307154.asp