準則: 程式設計自動化測試 Script
這個準則說明有效開發自動化測試 Script 的原則。
關係
相關元素
主要說明

測試腳 Script 的結構

如果要增加測試 Script 的可維護性和可重複使用性,它們應該先結構化,再實作。 您可能會發現有些動作會出現在多個測試 Script 中。您應該有的一項目標是識別這些動作,以便能夠重複使用它們的實作。

例如,您可能會有用來處理記錄的不同動作所組成的測試 Script。 這些測試 Script 可能是新增、修正和刪除記錄的組合:

  • 新增、修改、刪除(這個很明顯)
  • 新增、刪除、修改
  • 新增、刪除、新增、刪除、...
  • 新增、新增、新增、...

如果您將這些動作識別和實作成個別測試 Script,且在其他測試 Script 中重複使用它們,您實現的重複使用層次便比較高。

另一個目標是建立將您的測試 Script 的結構,使目標軟體的變更能夠在您的測試 Script 中造成區域化且可控制的變更。這會使您的測試 Script 對於目標軟體的變更更具復原力。 例如,軟體的登入部分有了改變。對於所有會遍訪登入部分的測試案例而言,只有與登入相關的測試 Script 需要變更。

錄製技術

如果要使測試 Script 更好維護,您應該將它們記錄成最不容易受到測試目標變更的影響。比方說,如果是填寫對話框欄位的測試 Script,便會有如何從一個欄位移至下一欄位的選項:

  • 使用 TAB 鍵
  • 使用滑鼠
  • 使用鍵盤快速鍵

在這些選項中,有些比較容易受到設計變更的影響,有些比較不會。如果新欄位是插入畫面中,TAB 鍵方式便不可靠。如果重新指派了快速鍵,它們無法提供好的記錄。如果滑鼠用來識別欄位的方法會改變,那它也不是可靠的方法。不過,有些測試自動化工具有測試 Script 錄製器,它們可以在指示之下,利用更可靠的方法來識別欄位,例如開發工具(PowerBuilder、SQLWindows 或 Visual Basic)指派給它的物件名稱。在這個方式之下,錄製的測試 Script 不會受到使用者介面次要變更(如版面配置變更、欄位標籤變更、格式變更等)的影響。

資料驅動測試

許多測試 Script 都會在給定資料輸入畫面中,輸入多組欄位資料來檢查欄位驗證功能、錯誤處理等。程序步驟是相同的,不過,資料不同。測試 Script 並不需要針對每一組輸入資料來記錄,您應該建立單一記錄,再修改它來處理多個資料集。例如,因資料無效而產生相同錯誤的所有資料集,都共用相同的記錄測試 Script。測試 Script 修改成將資料當作變數資訊來處理、從檔案或其他外部來源讀取資料集,以及在迴圈中處理所有相關的資料集。

如果已發展測試 Script 或測試程式碼,以在迴圈中處理各組輸入和輸出資料,就必須建立資料集。這些資料集所用的格式通常是文字檔中用逗號分隔的欄位記錄。 從測試 Script 和測試程式碼中,很容易讀取這個格式,也很容易建立和維護。

大部分資料庫和試算表套件都可以產生用逗號分隔的文字輸出。利用這些套件來組織或擷取資料集有兩個重要好處。首先,與簡單使用文字編輯器或文字處理器相比,它們提供可用來輸入和編輯資料的更加結構化的環境。其次,它們大部分都有能力查詢現有的資料庫和擷取傳回的資料,可讓您輕易擷取現有來源的資料集。

錯誤處理

記錄的測試 Script 是循序執行的。沒有分支點。測試 Script 中強韌的錯誤處理,需要其他回應錯誤狀況的邏輯。發生錯誤時所能採用的決策邏輯包括:

  • 分支到不同的測試 Script。
  • 呼叫試圖清除錯誤狀況的 Script。
  • 結束 Script 和啟動下一 Script。
  • 在這個測試 Script 失敗之後,結束 Script 和軟體,在下一個測試 Script 時,再重新啟動、回復測試。

每個錯誤處理技術都需要在測試 Script 中加入程式邏輯。 這個邏輯應該儘可能限制在用來控制低階測試 Script 序列的高階測試 Script。這使您能夠從錄製中,完整建立低階測試 Script。

測試 Script 同步處理和排程

當執行壓力測試時,通常最好使測試 Script 同步化,使它們能夠在預先定義的時間啟動。您可以比較所需要的時間和系統時間,將測試 Script 修改成在特定時間啟動。在網路系統中,每個測試工作站都會透過網路來共用相同的時鐘。 在下列範例(來自 BASIC 所撰寫的 Script)中,陳述式插入 Script 的開頭來暫停執行 Script,直到到達需要的時間。

InputFile$ = "TIME.DAT"
Open InputFile$ For Input As 1
Input #1, StartTime$
Close #1
Do While TimeValue(StartTime$) > Time
   DoEvents
Loop

[Start script]

在這個範例中,必要的開始時間儲存在檔案中。這使您不需要變更測試 Script,就能夠變更開始時間。 這個時間會讀取和儲存在稱為 StartTime$ 的變數中。Do While 迴圈會繼續運作,直到到達開始時間為止。DoEvents 陳述式非常重要:它可以在測試 Script 暫停並等待啟動時,讓背景作業持續執行。當沒有 DoEvents 陳述式時,系統要等到到達開始時間時,才能夠回應。

測試和除錯測試 Script

當在錄製的相同軟體上執行新錄製的測試 Script 時,應該不會有錯誤。 環境和軟體與錄製之時相同。可能會有測試 Script 無法順利執行的實例。進行測試 Script 的測試會彰顯這些情況,可讓您在真實測試中使用這些 Script 之前,更正這些 Script。這裡討論兩個典型的問題類型:

  • 用來選取使用者介面項目的方法語意不明,會使測試 Script 每次重播各不相同。例如,依文字(或標題)來辨織的兩個項目,可能會有相同的文字。當執行 Script 時,語意可能會不明。
  • 測試執行/會議專用資料會錄製下來(也就是指標、日期/時間戳記,或一些其他系統產生的資料值),但重播時會不相同。

錄製和重播的時差可能會造成問題。錄製測試 Script 來就是比執行測試 Script 慢的流程。有時這個時差會造成在軟體之前執行測試 Script。在這些情況下,您可以插入等待狀態來節流控制測試 Script 的速度,以配合軟體的速度。