在運行指令碼回放過程中,有時會出現錯誤,這在實際測試中是不可避免的,畢竟自動錄製產生的指令碼難免會有問題,需要運行指令碼進行驗證,把問題都解決後才加入到情境中進行負載測試。下面結合常用的協議(如Web、Web Services協議)錄製的指令碼進行回放時出現的問題介紹一下解決的方法。
需要注意的是,回放指令碼時出現的錯誤有時是程式自身的原因導致的,因此在解決指令碼回放問題前必須保證程式錄製出的指令碼是正確的。
1.LoadRunner逾時錯誤:在錄製Web協議指令碼回放時逾時情況經常出現,產生錯誤的原因也有很多,解決的方法也不同。
錯誤現象1:Action.c(16): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s)。
錯誤分析:對於HTTP協議,預設的逾時時間是120秒(可以在LoadRunner中修改),用戶端發送一個請求到伺服器端,如果超過120秒伺服器端還沒有返回結果,則出現逾時錯誤。
解決辦法:首先在運行環境中對逾時進行設定,預設的逾時時間可以設定長一些,再設定多次迭代運行,如果還有逾時現象,需要在“Runtime Setting”>“Internet Protocol:Preferences”>“Advanced”地區中設定一個“winlnet replay instead of sockets”選項,再回放是否成功。
錯誤現象 2:Action.c(81):Continuing after Error -27498: Timed out while processing URL=http://172.18.20.70:7001/workflow/bjtel/leasedline/ querystat/ subOrderQuery.do
錯誤分析:這種錯誤常常是因為並發壓力過大,伺服器端太繁忙,無法及時響應用戶端的請求而造成的,所以這個錯誤是正常現象,是壓力過大造成的。
如果壓力很小就出現這個問題,可能是指令碼某個地方有錯誤,要仔細查看指令碼,提示的錯誤資訊會定位某個具體問題發生的位置。
解決辦法:例如上面的錯誤現象問題定位在某個URL上,需要再次運行一下情境,同時在其他機器上訪問此URL。如果不能訪問或時間過長,可能是伺服器或者此應用不能支撐如此之大的負載。分析一下伺服器,最好對其效能進行最佳化。
如果再次運行情境後還有逾時現象,就要在各種圖形中分析一下原因,例如可以查看是否伺服器、DNS、網路等方面存在問題。
最後,增加一下運行時的逾時設定,在“Run-Time Settings”>“Internet Protocol:Preferences”中,單擊“options”,增加“HTTP-request connect timeout” 或者“HTTP-request receive”的值。
2.LoadRunner指令碼中出現亂碼:在錄製Web協議指令碼時出現中文亂碼,在回放指令碼時會使回放停止在亂碼位置,指令碼無法運行。
錯誤現象:某個連結或者圖片名稱為中文亂碼,指令碼運行無法通過。
錯誤分析:指令碼錄製可能採用的是URL-based script方式,如果程式定義的字元集合採用的是國際標準,指令碼就會出現亂碼現象。
解決辦法:重新錄製指令碼,在錄製指令碼前,開啟錄製選項配置對話方塊進行設定,在“Recording Options”的“Advanced”選項裡先將“Surport Charset”選中,然後選中支援“UTF-8”的選項。
3.LoadRunner HTTP伺服器狀態碼:在錄製Web協議指令碼回放指令碼的過程中,
會出現HTTP伺服器狀態碼,例如常見的頁面-404錯誤提示、-500錯誤提示。
錯誤現象1:-404 Not Found伺服器沒有找到與請求URI相符的資源,但還可以繼續運行直到結束。
錯誤分析:此處與請求URI相符的資源在錄製指令碼時已經被提交過一次,回放時不可再重複提交同樣的資源,而需要更改提交資源的內容,每次回放一次指令碼都要改變提交的資料,保證類比實際環境,造成一定的負載壓力。
解決辦法:在出現錯誤的位置進行指令碼關聯,在必要時插入相應的函數。
錯誤現象2:-500 Internal Server Error伺服器內部錯誤,指令碼運行停止。
錯誤分析:伺服器碰到了意外情況,使其無法繼續回應請求。
解決辦法:出現此錯誤是致命的,說明問題很嚴重,需要從問題的出現位置進行檢查,此時需要此程式的開發人員配合來解決,而且產生的原因根據實際情況來定,測試人員無法單獨解決問題,而且應該儘快解決,以便於後面的測試。
4.LoadRunner請求無法找到:在錄製Web協議指令碼回放指令碼的過程中,
會出現請求無法找到的現象,而導致指令碼運行停止。
錯誤現象:Action.c(41): Error -27979: Requested form. not found [MsgId: MERR-27979]
Action.c(41): web_submit_form. highest severity level was "ERROR",0 body bytes, 0 header bytes [MsgId: MMSG-27178]"
這時在tree view中看不到此組件的相關URL。
錯誤分析:所選擇的錄製指令碼模式不正確,通常情況下,基於瀏覽器的Web應用會使用“HTML-based script”模式來錄製指令碼;而沒有基於瀏覽器的Web應用、Web應用中包含了與伺服器進行互動的Java Applet、基於瀏覽器的應用中包含了向伺服器進行通訊的JavaScript/VBScript代碼、基於瀏覽器的應用中使用HTTPS安全性通訊協定,這時則使用“URL-based script”模式進行錄製。
解決辦法:開啟錄製選項配置對話方塊進行設定,在“Recording Options”的“Internet Protocol”選項裡的“Recording”中選擇“Recording Level”為“HTML-based script”,單擊“HTML Advanced”,選擇“Script. Type”為“A script. containing explicit”。然後再選擇使用“URL-based script”模式來錄製指令碼。
5.LoadRunner不執行檢查方法:在錄製Web協議指令碼中添加了檢查方法Web_find,但是在指令碼回放的過程中並沒有執行。
錯誤現象:在指令碼中插入函數Web_find,在指令碼中設定文本以及映像的檢查點,但是在回放過程中並沒有對設定的檢查點進行檢查,即Web_find失效。
錯誤分析:由於檢查功能會消耗一定的資源,因此LoadRunner預設關閉了對文本以及映像的檢查,所以在設定檢查點後,需要開啟檢查功能。
解決辦法:開啟運行環境設定對話方塊進行設定,在“Run-time Settings”的“Internet Protocol”選項裡的“Perference”中勾選“Check”下的“Enable Image and text check”選項。
6.LoadRunner回放Web Services協議指令碼錯誤:LoadRunner 8.0版本在錄製Web Services協議的指令碼時正常,但在回放時會出現錯誤,提示停止指令碼運行。
錯誤現象:利用LoadRunner 8.0版本來錄製Web Services協議的指令碼沒有任何錯誤提示,回放指令碼時會出現如下錯誤提示“Error:server returned an incorrectly formatted SOAP response”。
錯誤分析:出現此錯誤的原因是LoadRunner8.0在錄製Web Services協議的指令碼時存在一個缺陷:
如果伺服器的作業系統是中文的,VuGen會自動將WSDL檔案的頭改為,所以才會有此錯誤提示。
解決辦法:下載兩個補丁,分別為“LR80WebServicesFPI_setup.exe”和“lrunner_web_ services_patch_1.exe”安裝上即可。