標籤:blog http io java ar 檔案 資料 問題 cti
最近在與大家的討論中發現了LoadRunner的很多問題,出於解決問題的出發點,我也就相關自己不理解的問題在Google中搜尋了一番,並通過一些執行個體也去實際操作了一遍,發現很多問題確實並不是那麼難解決,而只是我們不夠細心,沒有認真去分析和總結。這裡簡單列舉我最近去研究的一個問題,就是關於LoadRunner在指令碼回放日誌中出現的Warning資訊,也就是所謂的警告資訊,通常我們可能覺得只要在錄製回放過程中沒有報error就認為指令碼是ok的,但是到真正去情境中去運行才發現,會不斷報錯,而且很多錯誤都覺得很摸不到頭腦,因為總會出現一些我們始料不及又難以理解的錯誤資訊,其實這個時候我們並是第一時間就去尋求協助,去論壇發貼,因為你沒有到錯誤的根本,別人也很難幫你,如果說貼出指令碼幫你調試,那估計有這個時間的人也不多,所以解決問題的方法很重要,這種方法最主要還是要靠自己來分析和總結,哪怕是最後沒有分析出什麼,也至少先去google一下,如果有解答最好,沒有解答,可能不是一般的問題,可能大家都沒有碰到,這就說明這個問題可能是由於我的操作的失誤等等。所以說解決問題應該先問自己,我分析了嗎?
我通過java寫了一個簡單的登入系統頁面,通過LR來錄製登入過程並產生指令碼,設定了自動關聯,並回放錄製指令碼,觀察回放日誌發現沒有報error資訊,說明指令碼沒有問題,將指令碼放入Controller中設定100個使用者佈建運行,發現運行一段時間開始報錯,這裡先不說報什麼錯,繼續觀察指令碼,回到Vuser中調試,再次回訪觀察記錄檔,發現如下資訊:
Warning -27077: The "vuser_init" section contains web function(s) when the "Simulate a new user on each iteration" Run-Time Setting is ON. This may produce unpredictable results with multiple iterations [MsgId: MWAR-27077]
仔細分析發現這裡的警告資訊提示"Simulate a new user on each iteration",表示在每次迭代都類比一個新的使用者,對於web登入系統來說,通常都是用session來儲存cookie資訊,而"Simulate a new user on each iteration"是LR中的一項預設設定,按照LR手冊來講,這個選項一般帶來的副作用並不十分明確。我們再來做另外一個執行個體,就是一個資料添加頁面,通過錄製指令碼來添加資料,回放過程中也提示該資訊,沒有提示error資訊,將指令碼放入Controller中運行,設定100個使用者,設定每個使用者迭代運行2次,按照計算來講就是添加200條記錄,開始運行,結果發現實際資料庫中只新增了100條記錄,再回頭尋找原因發現指令碼回放中的"Simulate a new user on each iteration",會不會跟這個有關係,根據理解,每次迭代類比一個新使用者來運行,而且該設定在LR中預設,並預設也是情況緩衝的,也就是說同時情況了session資訊,導致每次都需要重新來建立新的session才能可以添加資料,在分析日誌發現在迴圈迭代中有一個訪問頁面timeout.jsp,從這裡可以發現是session逾時引起的,可以猜想在兩次迭代中肯定是清除了cookie。在LR中找到"Simulate a new user on each iteration"的設定地區,如:
通過發現LR預設就是設定勾選"Simulate a new user on each iteration"該選項,去掉勾選之後再回放指令碼,觀察回放日誌發現,Warning資訊已經消失了。
同樣將指令碼放置Contoller中繼續之前設定,開始迴圈運行,結果會如期而至的。
通過兩個簡單的執行個體來說明LR中指令碼調試的一些關注點,對於日誌中警告資訊並不是沒有原因的,既然是警告資訊就總有可能遇到,不然系統也不會給出提示,當然在web測試中可能還是特別的多見,其實在做關聯的時候也經常有warning提示。如果大家做過用戶端軟體的壓力測試時,應該就比較熟悉warning了,通常一些用戶端軟體由於一些特定的協議,LR支援不太好,總會在錄製的指令碼運行之後發現有丟包現象,但是不會以錯誤的形式來提示,而是在回放日誌以warning來提示。
以上是個人在學習LR中的一點收穫,通過不斷總結,才會積累的更多,LoadRunner其實還是比較複雜的,如果簡單的問題都不能搞明白,後面的分析就更無從談起了。
轉:Loadrunner——Simulate a new user on each iteration設定