測試對象:某Web即時通訊系統(以下稱WebIM)
開發語言:XML
數據通訊協議:Web(HTTP/HTML)協議、Windows Sockets協議
底層數據庫:Mysql
服務器操作系統:Redhad 4
腳本實現功能:登入系統後,再退出系統。
問題1:錄制開發的腳本可以成功回放,但是數據庫的logout表裡卻查不到“登出”的用戶?
分析:錄制的時候只選用了單協議:Web(HTTP/HTML)協議,而WebIM的實現不只用到了Web(HTTP/HTML)協議,也用到了 Windows Sockets協議。在定位了問題的"原因"之後,筆者嘗試錄制多協議的腳本,結果回放失敗。回放失敗是因為Webim在登錄的過程中有個加密驗證的過程。腳本回放時提交了上一次的經過Sha1加密後的密文,而此時服務器端的Sha1密文已經發生了改變。從而導致了失敗。
解決方法:
a、使用雙協議錄制腳本
b、開發Sha1算法的DLL文件並在腳本中調用。
問題2:錄制的腳本中並沒有捕獲到服務器返回的Session ID?
分析和方案:Webim的開發用到了XML和Windows Sockets協議,因此按照正常的思路,Loadrunner在錄制腳本時,也應該采用XML和Windows Sockets協議,但實際情況是這樣的,錄制的腳本中並沒有捕獲到服務器返回的Session ID。既然公司內網的Jabberd服務器有專門的測試客戶端,筆者決定通過這個客戶端錄制腳本,由於這個客戶端和服務器的通信協議是Windows Sockets,因此錄制協議也采用了這個最底層的協議。這一次,錄制的腳本中捕獲到了服務器返回的Session ID。為了保證腳本回放時能夠動態的獲取到這個Session ID,需要做“關聯”操作,筆者使用了lrs_save_searched_string()函數,對腳本做了處理。
問題3:如何調用Dll來對服務器返回的序列和Password加密,以產生Sha1的密文?
分析和方案:腳本中加載了Dll庫文件後,在調用庫文件中的加密函數對Session ID+Password字符序列加密時,必須采用如下格式endes(a,b),其中的a代表源序列,b代表密文。經過這樣的步驟處理後,調試腳本,就可以看到密文了。
問題4:Buf中參數化密文後,腳本還是不能編譯通過,存在語法錯誤?
分析和方案:發現Loadrunner參數化,是按照它內置的機制執行的,符合這個機制,編譯就能通過。
後來在Gen中的Tools—>general option中找到了可以更改這個機制的地方,修改完了之後,腳本再次編譯,這次OK了。
問題5:錯誤提示:沒有足夠的虛擬用戶分配給這個NewPara?
分析和方案:loadrunner中在對用戶名和密碼或其他數據參數化了以後,不要將參數刪除後,重新參數化,否則就會出現上述問題。筆者決定重新錄制腳本,重新參數化,重新修改腳本。事實證明這樣做是正確的,編譯運行後,5個虛擬用戶的腳本正確無誤的通過。