在《性能測試工具選擇策略--仿真度對比測評分析報告》一文詳細分析了使用相同的web頁面,分別使用LoadRunner,Jmeter,kylinTOP工具進行錄製腳本並執行得出在靜態請求頁面下,Loadrunner12與kylinTOP的仿真能力都很是的高,接近真實場景。此次咱們進一步分析,對於對態請求界面,二者的差別性(此次咱們改用kylinPET與LoadRunner12.60進行對比分析)。css
被測試對象URL:http://59.110.158.28/Example/ ,這是一個簡單的登陸和內容加載頁面。html
首面登陸界面web
頁面登陸成功後的內容:瀏覽器
登陸過程過程當中,按下F12按鈕,能夠看到頁面加載過程全部請求。getNews共有6個動態的併發請求。網絡
使用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 }
錄製完成,設置LoadRunner的運行代理功能,主要是方便Fiddler工具抓取HTTP請求(Fiddler只能經過代理方式抓取請求,不支持網卡抓取)。ide
使用錄製好的腳本,新建測試場景,這裏不要建的過於複雜,只要能讓腳本運行一次便可。運行成功後,從Fiddler上抓取的HTTP請求瀑布圖看,6個併發的動態請求,所有變爲串行執行,頁面的加載時間由原來最大的請求時間決定,現變爲6個請求時間之和(11.7秒),相同網絡下,真實結果爲:1-4秒不等。工具
錄製完成後,設置proxy代理,方便fiddler抓取HTTP請求性能
從執行結果看,頁面加載事務時間是2.8秒,Fiddler的抓包圖看,最後6個動態請求是併發請求。
對於頁面的動態請求,LoadRunner 12.60版本(筆者採用發稿時最新版本),是串行請求,致使測試結果的頁面加時間變長,而kylinPET是併發請求(與真實瀏覽器狀況相同),測試結果更接近於瀏覽器的真實結果 。
也就是說LoadRunner 12版本,對於靜態請求的測試結果與真實狀況比較接近,而若是是動態的請求,變得很是不可信。這也是爲何論壇中有人說,測試結果與真實結果差距大的緣由。