1. 程式人生 > >LR效能測試經驗總結(持續跟新中)

LR效能測試經驗總結(持續跟新中)

情況1: 在Vuser中迭代跑指令碼,更新客戶資訊,結束後驗證更新成功。但在controller中場景跑指令碼,發現200多個使用者並沒有更新資訊(客戶資訊頁面)

解決辦法: 在Vuser中沒有關聯,然後從新執行場景,就發現資訊更新了。原因是在指令碼中的一個request中,有需要關聯的地方。(在考慮指令碼時,應想到request與關聯的東西)

情況2:引數化

解決辦法:應該充分考慮引數化的問題,即:submit中肯定有需要引數化的,還有就是用replace功能將所有點都引數化。對於沒有變化的值可以考慮不用引數化

1.當前函式提交的地址,如果裡面有需要關聯或者引數化的內容,也需要。

2.但是在LR的每個提交函式都要重新引數化和關聯。

3.它不會像頁面一樣給你持續儲存,它只識別你當次上傳的函式內容。

情況3:不同的使用者自己有不同的客戶,怎樣做到一一對應,找到自己的客戶。因為回放時會出錯

解決辦法: 引數化使用者,名為loginname(它的取值方法隨便,可以是unique。。。。)。 再引數化客戶id(它的取值方法為,same line as loginname)

備註:也可以選擇關聯方法來

4.關聯和引數化從本質上沒有差別,在於資料來源的差別。

情況4:放置檢查點的位置,檢查點就是檢查頁面是否正確顯示,那麼在哪裡新增

解決辦法:明確指令碼中頁面的顯示文字,即,到底在哪段程式碼中是顯示這個頁面的,則檢查點要放在最後面,下個頁面的前面。

總結:

一.web_find()使用時必須開啟內容檢查選項,在Runn-time Setting設定中,Preferences中勾選 Enable image and text check; web_reg_find()函式沒有此限制
二.web_find()只能只用在基於html模式錄製的指令碼中,web_reg_find()沒有此限制
三.web_find()是在返回的頁面中進行內容查詢,web_reg_find()是在快取中進行查詢,故在執行效率上沒有web_reg_find()函式高。
四.web_reg_find的優先順序要遠遠高於web_find(),所以web_fiind()已經屬於向後相容的功能,不在推薦使用:
簡單來說,web_reg_find()函式比web_find()底層

問題一:
    錄製指令碼後添加了這個web_reg_find()函式,查詢頁面上某段字串,reply的時候沒有問題,但是在併發測試的時候就會有好多事務報錯說找不到這個字串,但是為什麼reply的時候沒有問題呢?還有就是,如果我把應用部署在處理速度較快的機子上,測試時就沒有出現這個問題,這跟伺服器響應速度有關?不太懂
解答:
    web_reg_find()函式,不是查詢頁面上某段字串,而是在快取中,web_find才是在頁面中查詢。web_reg_find的效率要高一些。
但是在併發較大的時候,伺服器還沒來得返回你請求的字串有可能loadrunner已經進行下一步操作了,所以找不到。
把應用部署在處理速度較快的機子上,測試時就沒有出現這個問題,正是因為這個原因

所有檢查點函式:

web_reg_find:從下一個迴應的HTML頁面中查詢指定的文字字串
web_find:從HTML頁面中查詢指定的文字字串
web_image_check:從HTML頁面中查詢指定的圖片
web_global_verfication:從所有後續HTTP互動中查詢指定的文字字串

web_reg_find: 是註冊型函式,一般放在請求之前,比如放在web_submit_from,  Web_castom_request();web_image();web_link();web_submit_data();web_submit_form();web_url()
函式祥解:
    web_reg_find("Fail=NotFound",//表示 如果沒有找到,檢查點函數出錯
        "Search=Body",//搜尋 的位置
        "SaveCount=logcheck", //將結果儲存到的引數
        "Text=test",//要查詢的內容文字或者圖片內容

        LAST);

情況5:

在檢查點和關聯的地方相同的前提下, 關聯當中的左右邊界值,可以左右檢查點的左右邊界值得參考。此發現需要實踐

情況6:

在模擬不同使用者下面有不同客戶情況中,可以將使用者登入引數化,而將點選自己所屬客戶進行關聯, 回放試試。若成功可省去客戶引數化。

情況7:

在指令碼資料夾中,如果確實data資料夾,則說明該指令碼是手工黏貼產生,而非錄製產生,顧確實data資料夾。具體影響有哪些還要在看

情況8:

關聯當中Ord在關聯後需要手動修改為ALL 這樣才會把所有關聯加進來。例如:

web_reg_save_param("keyword", "LB=........", "RB=.........", "Ord=1", ....   LAST);

其中的1在關聯完成後,指令碼執行前需要改為ALL。因為在關聯時,找到的往往是一些符合的選項,而回放時會有錯誤,因為沒有全部包括進來。

情況9:

單獨回放沒有問題,但在場景中執行會報錯。例如:出現htt404 can not find the pageXXX,檢查通過的transaction數值,發現僅在第一次迭代時成功,檢視web server日誌,發現訪問timeout。jsp頁面,這個是seesion超時會訪問的,首先不可能是因為迭代之間的等待時間過長導致的。考慮是LR的配置問題。首先明白sessionid是用來標識會話中的各個request和respond。保留sessionid的做法用hidden file,cookie或者在URL上附件seesionid。在LR的client request中Jsessionid的資訊在cookie中,判斷此產品用cookie來記錄sessionid。

解決辦法: 在runtime setting中取消啟用的simulate a new user on iteration

備註:同樣的情況當login錄製在action中,即每次迭代重新向server發出請求,則應啟用這個simulate a new user on iteration。 因為他刪除的是action的cookie之類的。前面那種情況,在vuser_init中記錄的seesionid,傳到action中,如果啟用,則迭代時又刪除,自然回放失敗。其實不是在場景中失敗,在vuser中回放時就應該會報錯。注意兩個runtime setting 都需要配置

情況10:

問題4:如何錄製非標準 HTTP(S) 應用程式?
執行以下過程:
1.        選擇“工具”>“錄製選項”,然後單擊“瀏覽器”節點。選擇“手動啟動應用程式”。
2.        單擊“錄製代理”節點,然後選擇“使用自定義代理伺服器”選項。單擊“確定”關閉“錄製選項”。
3.        單擊“開始錄製”按鈕。VuGen 會提示您提供所錄製的應用程式需要的代理伺服器設定。注意主機和埠名。
4.        單擊“取消”,然後開啟“錄製選項”(CTRL+F7)。單擊“錄製代理”節點,然後在“使用自定義代理伺服器”部分輸入建議的代理伺服器設定。單擊“確定”關閉“錄製選項”。
5.        編輯正在錄製的應用程式中的代理伺服器設定。
6.        單擊“開始錄製”按鈕,然後開始錄製會話。
7.        在完成錄製後關閉應用程式,然後還原原始代理伺服器設定(還原失敗可能會使該應用程式無法正常執行)。
問題3:當錄製可訪問支援 SSL 的站點的 Vuser 指令碼時,彈出許多警告訊息。這些訊息應該出現嗎?如果是這樣,應該如何處理它們呢?
為了能夠錄製對支援 SSL 的站點的訪問,VuGen 提供自己的伺服器證書而非原始的伺服器證書。這將產生兩個安全衝突:
o        頒發的證書不適用於使用者要連線到的站點。
o        該證書是由未知頒發機構頒發的。
這些安全衝突會使錄製瀏覽器彈出警告訊息。
如果正在使用 Netscape 3.0 或更高版本,或者正在使用 Internet Explorer 4.0 或更高版本,那麼可以選擇忽略這些警告。您可以安全地忽略這些訊息。
注意: 彈出訊息僅在錄製指令碼時出現,而不會在執行指令碼時出現。

您可以禁止其中一些彈出訊息出現,但不能禁止全部訊息。
問題8:如果檢視 Web Vuser 指令碼,可以弄清楚 Vuser 訪問的是常規 (HTTP) 伺服器還是支援 SSL 的 (HTTPS) 伺服器嗎?
有時可以。Web Vuser 指令碼不區分安全和非安全請求:圖形 Vuser 指令碼對安全請求和非安全請求使用相同的圖示;基於文字的 Vuser 指令碼對安全請求和非安全請求使用相同的函式。但是,如果 Vuser 指令碼中的某個步驟包含 URL,那麼您或許可以根據該 URL 辨別該步驟訪問的是常規 (HTTP) 伺服器還是支援 SSL 的 (HTTPS) 伺服器。