作者在本文中描述了一些構建更易維護的和健壯的自動化測試腳本的技巧。作者給那些使用自動化測試工具并且為將來測試工作而建立自動化測試腳本庫的測試人員提供了有價值的遠見。本文提供了許多在文檔化測試腳本,調試測試腳本,執行測試腳本的同行評審和同步測試腳本方面的建議。
增量式調試腳本
錄制測試腳本,和其他的軟件開發成果一樣,會變得非常大。為了可以成功的回放,需要調試幾百行的代碼,為了參數化的數據驅動測試腳本,它可能包含了幾個數據集。常見的調試測試腳本方法是首先錄制所有的業務流程和需求,然后測試人員回放測試腳本以驗證并糾正問題。測試人員繼續調試腳本直到它和可以一(或多)組數據集一起成功地回放。
當測試腳本有成百的代碼行,驗證點,分支的邏輯,錯誤處理,參數和數據在多個已錄制的業務流程之間的相關性時,調試并且解決測試腳本中的問題變得特別的乏味和難以處理。對于調試那些復雜且又冗長的測試腳本,一個更加容易管理的方法是錄制腳本的一部分并且在錄制測試腳本的其他部分之前分開調試他們。在測試單個的部分后,你可以決定測試腳本的一部分如何和另一部分工作和數據如何從一個已錄制的流程流向其他的流程。在測試腳本的所有部分都錄制后,測試人員就可以回放整個測試腳本,并確保腳本同一個或多個數據集一起從頭到尾被正確地回放了。
舉個例子,我錄制并自動化了一個執行了以下業務流程的復雜的測試腳本:
檢查在貨倉中的庫存
執行一次MRP運行
補充庫存
挑出一些要發送的貨物并且進行發貨
確定交貨需要移交的訂單
驗證發送的貨物到達了它們的目的地。
這個測試腳本有一些代碼行,參數,驗證點和需要象一個整體一樣工作的數據相關性。首先我錄制了每一個單獨的流程并且驗證了他們分別可以成功的回放。然后我將所有錄制好的流程集成尾一個大的測試腳本并且驗證它同多個數據集一起能夠成功的回放。如前面所述,一個關鍵的目的是確信在繼續錄制整個測試腳本的剩余部分之前每一個已錄制的流程可以成功的回放。我沒有錄制所有提及的流程(從1到6)并把它們排列一起回放,而不首先驗證所有的流程可以作為單獨的流程成功的回放。
這部分是為了避免等待調試腳本,直到整個測試腳本錄制好。
測試腳本的同步
測試工具會用比終端用戶手工按鍵快的多的速度回放已錄制的測試腳本。接著由于應用程序可能不夠快地顯示數據或從數據庫取出數值以允許測試腳本正確地回放,這可能會擊垮所測試的應用程序。當測試地應用程序不能響應測試腳本時,腳本執行會突然中斷,然后需要用戶干涉。為了同步所測試應用程序和回放中地測試腳本,測試小組在已錄制的測試腳本中引入了人為的等待時間。為了放慢測試腳本的執行,嵌入在測試腳本中的等待時間是最任意的且通過試驗和錯誤最佳估計。等待時間主要的問題是它們要不是等的太長就是不夠長時間。
例如,測試人員或許注意到對于所測試的應用程序測試腳本回放得太快。他可能打算放慢它幾次直到測試腳本執行和測試的應用程序相同步。這個技巧可以會造成相反的結果-甚至失敗-如果在測試執行時,由于外部的因素(例如網絡有延遲或系統維護)導致應用程序運行比新引入的等待時間更慢。在這種情況下,每次測試人員將不得不不斷的猜測一個新的合理的等待時間。用等待時間放慢腳本不是十分科學的,并且對于創建強健的,在沒有用戶干涉情況下能夠成功運行的自動化測試腳本沒有什么幫助。
如果有可能的化,測試人員應該避免引入人為的等待時間或任意的sleep變量以使測試腳本和應用程序同步。
"While"語句或嵌套的"loops"語句是用于同步需要同步點的測試腳本且不管所測試程序的響應時間都可以成功回放的正確的技術。在測試腳本種插入嵌套的loops或“while”語句也可以減少在測試腳本回放時用戶的干涉。例如,我插入"while"語句在錄制好的測試腳本里,不斷按Enter鍵直到創建了一個計劃中的協議,不管所測試應用程序要花多長時間產生協議。測試腳本不依賴所測試應用程序的響應時間工作。
已簽核,通過了同行評審
作為測試準備審核標準的一部分,測試腳本應該被正式的接受并且在開始測試循環之前被批準。SMEs, 業務分析人員和開發人員都應該參與到批準已錄制的測試腳本中。編寫已自動化的測試腳本的測試人員應該證明測試腳本可以成功的在QA環境中回放,如果有可能的話,可以帶上多種數據集。
錄制、回放隱藏的對象
腳本可能被錄制為增加或是雙擊表格中一個字段或字段位置沒有被固定的一個數組的值。如果表格或數組中字段的位置從開始錄制時就不斷地變化,腳本可能在回放時會失敗。測試腳本經常在回放中失敗就是因為那些沒有顯示或在屏幕中可見的對象的位置發生了改變。
為了回放那些位置敏感或位置受變更影響的腳本,有必要用功能性增強腳本,例如“向下滾屏”,“下一頁”或“查找”。包含這些實用性功能可以確保需要回放的隱藏對象將可以被識別,增加或是雙擊而不顧其在矩陣,表格,顯示的屏幕上的位置。
舉個例子,我曾經錄制果一個腳本,在最初錄制時它需要向下滾屏兩次來查找一個可以在表格中輸入的空字段。當我在幾個星期之后回放它時,我不得不向下滾屏四次來查找空字段,而不是相之前錄制的兩次。接著腳本失敗了,因此我在腳本中嵌入了邏輯判斷以指導腳本向下滾屏需要的次數來查找一個空字段。我通過在一個“while”循環中放置一個“下一頁”("next page")功能實現了這個目的,它可以驅動腳本不停的“下一頁”(page down)直到找到空字段。
安排重運行腳本/儲存執行日志
為了繞過測試工具不能在安排測試腳本重運行的局限,測試人員可以通過可以支持多種命令行選項的NT的scheduler安排測試腳本。測試百年應該將執行日志存儲在一個共享的驅動盤或針對審核的測試結果的測試管理工具中。
為關鍵的腳本創建自動的消息通知