軟件測試中開發自動化測試腳本的技巧和心得
自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程。通常,在設計了測試用例并通過評審之后,由測試人員根據測試用例中描述的規程一步步執行測試,得到實際結果與期望結果的比較。在此過程中,為了節省人力、時間或硬件資源,提高測試效率,便引入了自動化測試的概念。
增量式調試腳本
錄制測試腳本,和其他的軟件開發成果一樣,會變得非常大。為了可以成功的回放,需要調試幾百行的代碼,為了參數化的數據驅動測試腳本,它可能包含了幾個數據集。常見的調試測試腳本方法是首先錄制所有的業務流程和需求,然后測試人員回放測試腳本以驗證并糾正問題。測試人員繼續調試腳本直到它和可以一(或多)組數據集一起成功地回放。
當測試腳本有成百的代碼行,驗證點,分支的邏輯,錯誤處理,參數和數據在多個已錄制的業務流程之間的相關性時,調試并且解決測試腳本中的問題變得特別的乏味和難以處理。對于調試那些復雜且又冗長的測試腳本,一個更加容易管理的方法是錄制腳本的一部分并且在錄制測試腳本的其他部分之前分開調試他們。在測試單個的部分后,你可以決定測試腳本的一部分如何和另一部分工作和數據如何從一個已錄制的流程流向其他的流程。在測試腳本的所有部分都錄制后,測試人員就可以回放整個測試腳本,并確保腳本同一個或多個數據集一起從頭到尾被正確地回放了。
舉個例子,我錄制并自動化了一個執行了以下業務流程的復雜的測試腳本:
錄制測試腳本,和其他的軟件開發成果一樣,會變得非常大。為了可以成功的回放,需要調試幾百行的代碼,為了參數化的數據驅動測試腳本,它可能包含了幾個數據集。常見的調試測試腳本方法是首先錄制所有的業務流程和需求,然后測試人員回放測試腳本以驗證并糾正問題。測試人員繼續調試腳本直到它和可以一(或多)組數據集一起成功地回放。
當測試腳本有成百的代碼行,驗證點,分支的邏輯,錯誤處理,參數和數據在多個已錄制的業務流程之間的相關性時,調試并且解決測試腳本中的問題變得特別的乏味和難以處理。對于調試那些復雜且又冗長的測試腳本,一個更加容易管理的方法是錄制腳本的一部分并且在錄制測試腳本的其他部分之前分開調試他們。在測試單個的部分后,你可以決定測試腳本的一部分如何和另一部分工作和數據如何從一個已錄制的流程流向其他的流程。在測試腳本的所有部分都錄制后,測試人員就可以回放整個測試腳本,并確保腳本同一個或多個數據集一起從頭到尾被正確地回放了。
舉個例子,我錄制并自動化了一個執行了以下業務流程的復雜的測試腳本:
- 檢查在貨倉中的庫存
- 執行一次MRP運行
- 補充庫存
- 挑出一些要發送的貨物并且進行發貨
- 確定交貨需要移交的訂單
- 驗證發送的貨物到達了它們的目的地。
這個測試腳本有一些代碼行,參數,驗證點和需要象一個整體一樣工作的數據相關性。首先我錄制了每一個單獨的流程并且驗證了他們分別可以成功的回放。然后我將所有錄制好的流程集成尾一個大的測試腳本并且驗證它同多個數據集一起能夠成功的回放。如前面所述,一個關鍵的目的是確信在繼續錄制整個測試腳本的剩余部分之前每一個已錄制的流程可以成功的回放。我沒有錄制所有提及的流程(從1到6)并把它們排列一起回放,而不首先驗證所有的流程可以作為單獨的流程成功的回放。
這部分是為了避免等待調試腳本,直到整個測試腳本錄制好。
這部分是為了避免等待調試腳本,直到整個測試腳本錄制好。
測試腳本的同步
測試工具會用比終端用戶手工按鍵快的多的速度回放已錄制的測試腳本。接著由于應用程序可能不夠快地顯示數據或從數據庫取出數值以允許測試腳本正確地回放,這可能會擊垮所測試的應用程序。當測試地應用程序不能響應測試腳本時,腳本執行會突然中斷,然后需要用戶干涉。為了同步所測試應用程序和回放中地測試腳本,測試小組在已錄制的測試腳本中引入了人為的等待時間。為了放慢測試腳本的執行,嵌入在測試腳本中的等待時間是最任意的且通過試驗和錯誤最佳估計。等待時間主要的問題是它們要不是等的太長就是不夠長時間。
例如,測試人員或許注意到對于所測試的應用程序測試腳本回放得太快。他可能打算放慢它幾次直到測試腳本執行和測試的應用程序相同步。這個技巧可以會造成相反的結果-甚至失。绻跍y試執行時,由于外部的因素(例如網絡有延遲或系統維護)導致應用程序運行比新引入的等待時間更慢。在這種情況下,每次測試人員將不得不不斷的猜測一個新的合理的等待時間。用等待時間放慢腳本不是十分科學的,并且對于創建強健的,在沒有用戶干涉情況下能夠成功運行的自動化測試腳本沒有什么幫助。
如果有可能的化,測試人員應該避免引入人為的等待時間或任意的sleep變量以使測試腳本和應用程序同步。
"While"語句或嵌套的"loops"語句是用于同步需要同步點的測試腳本且不管所測試程序的響應時間都可以成功回放的正確的技術。在測試腳本種插入嵌套的loops或“while”語句也可以減少在測試腳本回放時用戶的干涉。例如,我插入"while"語句在錄制好的測試腳本里,不斷按Enter鍵直到創建了一個計劃中的協議,不管所測試應用程序要花多長時間產生協議。測試腳本不依賴所測試應用程序的響應時間工作。
已簽核,通過了同行評審
作為測試準備審核標準的一部分,測試腳本應該被正式的接受并且在開始測試循環之前被批準。SMEs, 業務分析人員和開發人員都應該參與到批準已錄制的測試腳本中。編寫已自動化的測試腳本的測試人員應該證明測試腳本可以成功的在QA環境中回放,如果有可能的話,可以帶上多種數據集。
錄制、回放隱藏的對象
腳本可能被錄制為增加或是雙擊表格中一個字段或字段位置沒有被固定的一個數組的值。如果表格或數組中字段的位置從開始錄制時就不斷地變化,腳本可能在回放時會失敗。測試腳本經常在回放中失敗就是因為那些沒有顯示或在屏幕中可見的對象的位置發生了改變。
為了回放那些位置敏感或位置受變更影響的腳本,有必要用功能性增強腳本,例如“向下滾屏”,“下一頁”或“查找”。包含這些實用性功能可以確保需要回放的隱藏對象將可以被識別,增加或是雙擊而不顧其在矩陣,表格,顯示的屏幕上的位置。
舉個例子,我曾經錄制果一個腳本,在最初錄制時它需要向下滾屏兩次來查找一個可以在表格中輸入的空字段。當我在幾個星期之后回放它時,我不得不向下滾屏四次來查找空字段,而不是相之前錄制的兩次。接著腳本失敗了,因此我在腳本中嵌入了邏輯判斷以指導腳本向下滾屏需要的次數來查找一個空字段。我通過在一個“while”循環中放置一個“下一頁”("next page")功能實現了這個目的,它可以驅動腳本不停的“下一頁”(page down)直到找到空字段。
安排重運行腳本/儲存執行日志
為了繞過測試工具不能在安排測試腳本重運行的局限,測試人員可以通過可以支持多種命令行選項的NT的scheduler安排測試腳本。測試百年應該將執行日志存儲在一個共享的驅動盤或針對審核的測試結果的測試管理工具中。
為關鍵的腳本創建自動的消息通知
可以用錯誤處理程序邏輯增強測試腳本,當錯誤發生時它可以不斷的發送錯誤信息給無限設備或email地址。一些測試腳本是關鍵性的業務并且可能在午夜批量地運行。正確并成功運行這些關鍵性業務的測試腳本會作為其他自動化任務的一個依賴或者前提條件。
通常也包括在關鍵業務腳本中一旦出現失敗時自動發送消息通知的邏輯。
編制文檔
為了使測試腳本可重用并且更容易維護,文檔化所有和執行測試腳本,測試腳本的頭文件,任何執行測試腳本的特殊條件相關的信息,例如:
為了回放那些位置敏感或位置受變更影響的腳本,有必要用功能性增強腳本,例如“向下滾屏”,“下一頁”或“查找”。包含這些實用性功能可以確保需要回放的隱藏對象將可以被識別,增加或是雙擊而不顧其在矩陣,表格,顯示的屏幕上的位置。
舉個例子,我曾經錄制果一個腳本,在最初錄制時它需要向下滾屏兩次來查找一個可以在表格中輸入的空字段。當我在幾個星期之后回放它時,我不得不向下滾屏四次來查找空字段,而不是相之前錄制的兩次。接著腳本失敗了,因此我在腳本中嵌入了邏輯判斷以指導腳本向下滾屏需要的次數來查找一個空字段。我通過在一個“while”循環中放置一個“下一頁”("next page")功能實現了這個目的,它可以驅動腳本不停的“下一頁”(page down)直到找到空字段。
安排重運行腳本/儲存執行日志
為了繞過測試工具不能在安排測試腳本重運行的局限,測試人員可以通過可以支持多種命令行選項的NT的scheduler安排測試腳本。測試百年應該將執行日志存儲在一個共享的驅動盤或針對審核的測試結果的測試管理工具中。
為關鍵的腳本創建自動的消息通知
可以用錯誤處理程序邏輯增強測試腳本,當錯誤發生時它可以不斷的發送錯誤信息給無限設備或email地址。一些測試腳本是關鍵性的業務并且可能在午夜批量地運行。正確并成功運行這些關鍵性業務的測試腳本會作為其他自動化任務的一個依賴或者前提條件。
通常也包括在關鍵業務腳本中一旦出現失敗時自動發送消息通知的邏輯。
編制文檔
為了使測試腳本可重用并且更容易維護,文檔化所有和執行測試腳本,測試腳本的頭文件,任何執行測試腳本的特殊條件相關的信息,例如:
- 為了關閉書本調整所測試應用程序中的日期
- 更新任何需要唯一數據的字段
- 為了環境判斷模式(context sensitive)/ 模擬模式(analog) /位圖錄制,調整顯示器設置
- 列出所有有依賴的測試腳本
- 指出為了執行腳本需要的權限級別或用戶的角色
- 在什么條件下腳本會失敗,以及重新運行腳本的繞行方法
- 需要在腳本運行過程中打開或關閉的應用程序
- 指明數據的格式,例如,歐洲日期格式VS美國日期格式,等等
此外,腳本中需要包含一個描述(例如,它是干什么用的)和特別用途(例如,回歸測試)的文件頭。腳本的文件頭應該包括腳本的作者,所有者,創建和修改日期,腳本可以追溯到的需求識別符,腳本所支持的業務范圍,腳本中的變量和參數數量。在測試腳本中提供這些信息使以后的測試工作中的腳本的執行,修改和維護更容易些。
實行測試腳本的版本控制
許多公司花好幾萬英鎊購買測試工具,但是卻忽略了測試工具的副產品-錄制好的測試腳本。為了公司構建中的自動化測試腳本的庫和存儲庫,強烈建議對自動化測試腳本實行版本控制。版本控制幫助追蹤測試腳本中的變更,并可維護同一測試腳本的多個版本。
堅持測試腳本命名標準和存儲
測試腳本應當遵循項目公認的命名標準,并且應該存儲在指定的庫中,例如一個共享的驅動盤或測試管理工具中。
測試經理應當指明包括如下方面的測試腳本命名標準:
實行測試腳本的版本控制
許多公司花好幾萬英鎊購買測試工具,但是卻忽略了測試工具的副產品-錄制好的測試腳本。為了公司構建中的自動化測試腳本的庫和存儲庫,強烈建議對自動化測試腳本實行版本控制。版本控制幫助追蹤測試腳本中的變更,并可維護同一測試腳本的多個版本。
堅持測試腳本命名標準和存儲
測試腳本應當遵循項目公認的命名標準,并且應該存儲在指定的庫中,例如一個共享的驅動盤或測試管理工具中。
測試經理應當指明包括如下方面的測試腳本命名標準:
- 項目的名稱(例如,GSI代表著Global SAP Implementation)
- 版本號(例如,即將發布或部署的版本號)
- 主題或測試種類(例如,SC代表安全測試,LT代表負載測試)
- 有序的測試用例編號
- 標題或將要測試的功能(例如,來自外部供應商的采購業務)
遵循這些技巧使測試人員能夠為他們的組織構建更強健的測試腳本。當然,開發可維護的測試腳本最大化自動化測試工具的效益。當自動化測試腳本用在以后的測試工作中,減少了完成一個測試循環所需要的時間時,公司就可以意識到自動化測試工具帶來的投資回報(ROI)。以上的技術將幫助公司構建符合這些目標的測試腳本。
延伸閱讀
文章來源于領測軟件測試網 http://www.anti-gravitydesign.com/