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