Loadrunner與kylinPET的能力對比測試--web動態請求

概述      

在《性能測試工具選擇策略--仿真度對比測評分析報告》一文詳細分析了使用相同的web頁面,分別使用LoadRunner,Jmeter,kylinTOP工具進行錄製腳本並執行得出在靜態請求頁面下,Loadrunner12與kylinTOP的仿真能力都很是的高,接近真實場景。此次咱們進一步分析,對於對態請求界面,二者的差別性(此次咱們改用kylinPET與LoadRunner12.60進行對比分析)。css

被對象分析

 被測試對象URL:http://59.110.158.28/Example/  ,這是一個簡單的登陸和內容加載頁面。html

 首面登陸界面web

 頁面登陸成功後的內容:瀏覽器

 

登陸過程過程當中,按下F12按鈕,能夠看到頁面加載過程全部請求。getNews共有6個動態的併發請求。網絡

LoadRunner12.60錄製腳本並運行:

  • 腳本錄製

使用LoadRunner12.60自帶的錄製功能,使用Chrome瀏覽器進行腳本錄製(注意:錄製過程須要安裝一個fiddler,在錄製腳本前,啓動fiddler),錄製完成後要進行自動關聯和手動關聯兩個動做,併發

自動關聯ticket和手動關聯:validateCode,不然腳本沒法運行。如下是關聯後,action部份內容展現,腳本中手工增長了一個頁面加載事務(從提交登陸至腳本請求結尾)jsp

  1 Action()
  2 {
  3    
  4     web_add_auto_header("Upgrade-Insecure-Requests","1");
  5     
  6     web_reg_save_param_ex("ParamName=validateCode", "LB=validateCode\">","RB=<\/span>",LAST);
  7  
  8     web_url("Example", 
  9         "URL=http://59.110.158.28/Example/", 
 10         "Resource=0", 
 11         "RecContentType=text/html", 
 12         "Referer=", 
 13         "Snapshot=t45.inf", 
 14         "Mode=HTML", 
 15         EXTRARES, 
 16         "Url=images/button/btn_login.png", "Referer=http://59.110.158.28/Example/css/login.css", ENDITEM, 
 17         LAST);
 18  
 19     web_add_auto_header("Origin", 
 20         "http://59.110.158.28");
 21  
 22 /*相關性註釋 - 切勿更改!  Original value='ST-1610868492644' Name ='ticket' Type ='ResponseBased'*/
 23     web_reg_save_param_regexp(
 24         "ParamName=ticket",
 25         "RegExp=ticket=(.*?)\\\r\\\n",
 26         SEARCH_FILTERS,
 27         "Scope=Headers",
 28         "IgnoreRedirections=No",
 29         "RequestUrl=*/login*",
 30         LAST);
 31         
 32 lr_start_transaction("頁面加載");
 33  
 34     web_submit_form("login", 
 35         "Snapshot=t46.inf", 
 36         ITEMDATA, 
 37         "Name=name", "Value=admin", ENDITEM, 
 38         "Name=password", "Value=admin", ENDITEM, 
 39         "Name=validate", "Value={validateCode}", ENDITEM, 
 40         LAST);
 41  
 42     web_revert_auto_header("Upgrade-Insecure-Requests");
 43  
 44     web_add_auto_header("X-Requested-With", 
 45         "XMLHttpRequest");
 46     
 47  
 48     web_submit_data("getNews",
 49         "Action=http://59.110.158.28/Example/getNews",
 50         "Method=POST",
 51         "RecContentType=text/plain",
 52         "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
 53         "Snapshot=t47.inf",
 54         "Mode=HTML",
 55         ITEMDATA,
 56         "Name=times", "Value=6", ENDITEM,
 57         LAST);
 58  
 59     web_submit_data("getNews_2",
 60         "Action=http://59.110.158.28/Example/getNews",
 61         "Method=POST",
 62         "RecContentType=text/plain",
 63         "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
 64         "Snapshot=t48.inf",
 65         "Mode=HTML",
 66         ITEMDATA,
 67         "Name=times", "Value=1", ENDITEM,
 68         LAST);
 69  
 70     web_submit_data("getNews_3",
 71         "Action=http://59.110.158.28/Example/getNews",
 72         "Method=POST",
 73         "RecContentType=text/plain",
 74         "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
 75         "Snapshot=t49.inf",
 76         "Mode=HTML",
 77         ITEMDATA,
 78         "Name=times", "Value=4", ENDITEM,
 79         LAST);
 80  
 81     web_submit_data("getNews_4",
 82         "Action=http://59.110.158.28/Example/getNews",
 83         "Method=POST",
 84         "RecContentType=text/plain",
 85         "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
 86         "Snapshot=t50.inf",
 87         "Mode=HTML",
 88         ITEMDATA,
 89         "Name=times", "Value=5", ENDITEM,
 90         LAST);
 91  
 92     web_submit_data("getNews_5",
 93         "Action=http://59.110.158.28/Example/getNews",
 94         "Method=POST",
 95         "RecContentType=text/plain",
 96         "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
 97         "Snapshot=t51.inf",
 98         "Mode=HTML",
 99         ITEMDATA,
100         "Name=times", "Value=2", ENDITEM,
101         LAST);
102  
103     web_submit_data("getNews_6",
104         "Action=http://59.110.158.28/Example/getNews",
105         "Method=POST",
106         "RecContentType=text/plain",
107         "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
108         "Snapshot=t52.inf",
109         "Mode=HTML",
110         ITEMDATA,
111         "Name=times", "Value=3", ENDITEM,
112         LAST);
113 lr_end_transaction("頁面加載",LR_AUTO);
114     return 0;
115 }
View Code

 

錄製完成,設置LoadRunner的運行代理功能,主要是方便Fiddler工具抓取HTTP請求(Fiddler只能經過代理方式抓取請求,不支持網卡抓取)。ide

腳本執行:

        使用錄製好的腳本,新建測試場景,這裏不要建的過於複雜,只要能讓腳本運行一次便可。運行成功後,從Fiddler上抓取的HTTP請求瀑布圖看,6個併發的動態請求,所有變爲串行執行,頁面的加載時間由原來最大的請求時間決定,現變爲6個請求時間之和(11.7秒),相同網絡下,真實結果爲:1-4秒不等。工具

   

     

kylinPET腳本錄製並運行

錄製完成後,設置proxy代理,方便fiddler抓取HTTP請求性能

  

腳本執行

從執行結果看,頁面加載事務時間是2.8秒,Fiddler的抓包圖看,最後6個動態請求是併發請求。

 

 

總結

    對於頁面的動態請求,LoadRunner 12.60版本(筆者採用發稿時最新版本),是串行請求,致使測試結果的頁面加時間變長,而kylinPET是併發請求(與真實瀏覽器狀況相同),測試結果更接近於瀏覽器的真實結果 。

也就是說LoadRunner 12版本,對於靜態請求的測試結果與真實狀況比較接近,而若是是動態的請求,變得很是不可信。這也是爲何論壇中有人說,測試結果與真實結果差距大的緣由。

相關文章
相關標籤/搜索