使用 Load Runner 對web服務器壓力測試總結


                                                                    Load Runner 壓力測試總結

      當項目需要你的時候,開發人員可能充當不同的角色。比如身邊的測試人員說,我不會壓力測試。但是現在客戶又需要壓力測試,那怎么辦呢?到底怎么辦呢?做為就技術人員的你,這個時候就的勇敢的站出來- 開始研究loadrunner,對框架進行壓力測試。

      Loadrunner 簡介:
          LoadRunner,是一種預測系統行為和性能的負載測試工具。通過以模擬上千萬用戶實施並發負載及實時性能監測的方式來確認和查找問題,LoadRunner能夠對整個企業架構進行測試。通過使用 LoadRunner,企業能最大限度地縮短測試時間,優化性能和加速應用系統的發布周期。 LoadRunner是一種適用於各種體系架構的自動負載測試工具,它能預測系統行為並優化系統性能。(摘自:百度知道)

      LoadRunner 在網絡上以及HP已經提供了相當多的的技術資料。網絡上也有很多這方面的資料。至於詳細的使用說明本文將不再一一闡述。
      本文重點只是給大家分享我在使用loadrunner過程中曾經被困擾過的環節。

      一、安裝:
           loadrunner 的安裝需要注意:如你您是XP系統可以安裝 loadrunner9.5如果想錄制IE8腳本,您需要安裝IE8插件。注:這個我自己沒試
       過,只是有安裝過XP的同事有提及。具體的插件安裝包,百度一下很容易找到。需要着重強調的是,如果您是win7操作系統,我親身經歷的感受就是裝了loadrunner9.5 再裝IE8插件,loadrunner 依然還存在各種問題、各種不穩定。網絡上有文章指出將Loadrunner9.50升級至
       9.5.1或者9.5.2然后在裝HP的IE8補丁。最后google了下發現loadrunner最新版本是11。且可以支持WIN7。最后就沒在折騰9.5.0版本。直接裝上了11版本.

      二、網絡環境:
          當我們使用Loadrunner錄制腳本的時候,特別是通過IE錄制腳本,要密切注意。安裝loadrunner的機器的IE是否開啟了代理設置
          如果開啟,Loadrunner11 在錄制腳本的時候會出現各種不穩定。這個問題當時困擾了我很久。

      三、錄制腳本:
          錄制腳本屬loadrunner 重要環節之一。這里挑出幾條個人認為比較重要的來和大家分享:
          1.參數設定
              我們第一次錄制腳本成功后生成C腳本內中的參數都是由web表單客戶實際操作的業務數據,但是這些數據都是“硬編碼”。簡單的說我們把這腳本運行時,會將之前錄入的內容插入到數據庫內(假設數據校驗都是合法)。可是我們的實際壓力測試時不可能將錄制的腳本只運行一次。實際會根據各種場景各種場合進行策略性的執行已錄制腳本。同時我們也需要准備充分的數據集(比如File Parameter)讓腳本來執行。這些都可以在腳本內使用Parameter 來替換,比如以下腳本:
              web_submit_data("GetProvinceAutoInputData",
              "Action=http://192.168.0.1:8080/MasterData/GetProvinceAutoInputData",
              "Method=POST",
              "RecContentType=application/json",
              "Referer=http://192.168.0.1:8080/MasterData/BasCity",
              "Snapshot=t14.inf",
              "Mode=HTML",
              ITEMDATA,
              "Name=assemblyName", "Value=", ENDITEM,
              "Name=sortFields", "Value=", ENDITEM,
              "Name=displayFields", "Value=ProvinceCode;ProvinceName", ENDITEM,
              "Name=displayLabels", "Value=鐪佷喚緙栫爜;鐪佷喚鍚嶇О", ENDITEM,
              "Name=queryFieldName", "Value=ProvinceName", ENDITEM,
              "Name=recordsPerPage", "Value=5", ENDITEM,
              "Name=filter", "Value=", ENDITEM,
              "Name=parentFieldName", "Value=", ENDITEM,
              其中第14行中“Value=5”這里的5 是由UI段傳入的。我們可以通過LoadRunner的參數將其替換,選中5點擊右鍵選擇Replace whith a parameter 輸入parameter name、parameter type. name值可以取一個容易識別業務的名詞。type的選項有13種,其中包括隨機參數、自增長參數、文件參數等,這里不做一一介紹,具體的請查看相關文檔。通過設置參數,我們就可以在腳本多次運行時候使用不同的業務數據模擬真實的用戶操作和並發。

          2.loadrunner file parameter 列之間互相依賴
             這里提一下file parameter ,試想如果我們有20個用戶去錄入用戶訂單(order)。同時維護好訂單明細(orderDetails)。假設
             訂單號是由用戶自己輸入的且是不能重復的。那么我們需要為這個場景准備錄入數據。同時假設20人在某一段時間內錄入20個訂單
             每人錄入一個。這里以file parameter來處理錄入數據。數據結構如下
             OrderCode OrderPrice Operator
             0001      100        user1
             0002      200        user3
             0003      300        user4
             0004      400        user5
             0005      600        user6
             .....

             以上文件在Loadruner中是以dat文件來保存,默認以notepad 打開。數據設置非常簡單,唯一需要指出的是參數依賴。
             比如我們選擇這個file parameter作為某一個業務參數。只能選擇order表中的一個列,而不是所有table。所以這里涉及到
             table中列的互相依賴。假設一個用戶用0001 OrderCode 那么這個用戶必然會用到 100 的price和 user1的operator。
             列之間互相依賴可以有Vuser -> Parameter List 進入修改界面。通過select next row 欄目選擇 same line as 字段名
             這樣該列就能實現以上所述的列之間的依賴。

          3.Loadrunner運行后參數返回值
               繼續參考Order 和 OrderDetail 例子,假設當Order保存后,應用程序自動生成 一個OrderId,且該OrderId為GUID。
            也就是說該OrderId是我們事先無法預知的,也就無法准備該值來進行壓力測試。我們以LoadRunner的的錄制腳本來講解這個場景下如何使用LoadRunner。

          首先請先參考Loadrunner   web_reg_save_param 這個函數參數說明:

          語法:int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);

         參數說明:
            ParamName: 存放得到的動態內容的參數名稱
            list of Attributes: 其它屬性,包括:Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, SaveLen。屬性值不分大小寫
            Notfound: 當在返回信息中找不到要找的內容時應該怎么處理
            Notfound=error: 當在返回信息中找不到要找的內容時,發出一個錯誤訊息。這是缺省值。
            Notfound=warning: 當在返回信息中找不到要找的內容時,只發出警告,腳本也會繼續執行下去不會中斷。
            LB( Left Boundary ) : 返回信息的左邊界字串。該屬性必須有,並且區分大小寫。
            RB( Right Boundary ): 返回信息的右邊界字串。該屬性必須有,並且區分大小寫。
            RelFrameID: 相對於URL而言,欲查找的網頁的Frame。此屬性質可以是All或是數字,該屬性可有可無。
            Search : 返回信息的查找范圍。可以是Headers,Body,Noresource,All(缺省)。該屬性質可有可無。
            ORD : 說明第幾次出現的左邊界子串的匹配項才是需要的內容。該屬性可有可無,缺省值是1。如為All,則將所有找到的內容儲存起來。
            SaveOffset : 當找到匹配項后,從第幾個字元開始存儲到參數中。該屬性不能為負數,缺省值為0。
            SaveLen :當找到匹配項后,偏移量之后的幾個字元存儲到參數中。缺省值是-1,表示一直到結尾的整個字串都存入參數。
            Convert : 可取的值有以下兩種:
              HTML_TO_URL : 將 HTML-encoded 資料轉成 URL-encoded 資料格式
              HTML_TO_TEXT : 將 HTML-encoded 資料轉成純文字資料格式

            ok,現在開始在錄制腳本內使用這個函數:
               //定義這個主表將要生成的ID,具體參數含義參考上文中的web_reg_save_param 參數說明,這里就不再解釋了。
               web_reg_save_param("Id","LB=Id\":\"", "RB=\"}","Notfound=warning","Search=Body", LAST);
               //http服務端保存腳本
                  web_custom_request("SaveOrder",
                  "URL=http://192.168.0.1:8080/Order/SaveTmsOrder",
                  "Method=POST",
                  "Resource=0",
                  "RecContentType=application/json",
                  "Referer=http://192.168.0.1:8080/Order/TmsOrder",
                  "Snapshot=t10.inf",
                  "Mode=HTML",
                  "Body=TnNo=&TnTypeCode=OUTBOUND&FeeTypeCode=AUTO+CALCULATION&ShipperName=%E5%8C%97%E4%BA%AC%E4%BB%93%E5%BA%93&ShipperCode=BJ&ShipperId=0569ccc3-6625-4ffb-b659-2e4fb3b10bc5&ShipperNameEn=BJ&ShipperTypeCode=&ShipperTypeName=&ShipperOfficeCode=BJ&ShipperOfficeName=%E5%8C%97%E4%BA%AC%E4%BB%93%E5%BA%93&ShipperAttribute=0&OriginCityCode=Beijing&OriginCityName=beijing"
                  "ConsigneeName={ConsigneeName}&"
                  "ConsigneeCode={ConsigneeCode}&"
                  ........

                 //在loadrunner 的控制台輸出 服務端返回的ID
                  lr_output_message("%s",lr_eval_string("{Id}"));

                  下面如果還有其他地方需要用到這個Id,請使用 "Value={Id}"。

         小結:

           文中只是提到了本人在實際壓力測試中使用loadrunner過程中的一些心得,當然功能強大的Loadrunner 遠不止這么一點功能可以來讓我們挖掘。比如loadrunner事務的使用、對事務插入集合點等。強大的圖標分析器等等
         這些就留給讀者自己去實踐了。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM