Loadrunner 技巧已經整理4篇了,你個一定疑問,這些知識點,網上隨處可見。確實,由於長時間沒有使用這個工具,造成我的一些概念開始在大腦中模糊,我只是用這種方式來溫習。
----------------------
在loadrunner的虛擬用戶中,術語concurrent(並發)和simultaneous(同時)存在一些區別,concurrent 是指虛擬場景中參於運行的虛擬用戶。而simultaneous與集合點(rendzvous point)關系更密切,是指在同一時刻一起執行某個任務的虛擬用戶。
我們來想象一個場景,10名運動員參加長跑比賽,出發點同時起跑,他們是並排奔跑的;跑了N圈之后,因為有體能更強的,有體能稍弱的,他們的隊形並排變成了前后。幾乎一個跑道就可以供應他們的奔跑(運行),那么其余的9條跑道就是空閑的。
為了充分的利用跑道,可以將跑道的起點設置一個集合點,當所有運動員跑完一圈后在起跑點集合,然后再同時起跑。
運動員可以看作是虛擬用戶,跑道可以看作是系統資源。設置集合點可以模式更加真實的並發請求,從而增加對系統的負載。
下面錄制一個登錄觸摸屏版139郵箱的腳本。錄制步驟:
1、打開登錄頁面
2、插入集合點
3、輸入用戶名密碼,點擊登錄按鈕
4、登錄頁面加載完成,錄制結束
腳本添加集合點
當我們在不熟悉腳本的情況下,可以通過世錄制操作面板來添加集合點。
如果你非常熟悉每一段腳本代碼的作用,可以在腳本中添加:lr_rendezvous 集合點函數。
錄制代碼如下:
Action() { web_url("wapmail.10086.cn", "URL=http://wapmail.10086.cn/", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t19.inf", "Mode=HTML", EXTRARES, "Url=http://wapmail.10086.cn:8000/img/p/logo.jpg", ENDITEM, "Url=/favicon.ico", "Referer=", ENDITEM, LAST); web_custom_request("urs.asmx", "URL=https://urs.microsoft.com/urs.asmx?MSURS-Client-Key=FcIacsb4XHR0aOJzGG/quQ%3d%3d&MSURS-Patented-Lock=NGkcbdtnuEs%3d", "Method=POST", "Resource=0", "RecContentType=text/xml", "Referer=", "Snapshot=t20.inf", "Mode=HTML", "EncType=text/xml; charset=utf-8", "Body=<RepLookup v=\"3\"><G>ED8654D5-B9F0-4DD9-B3E8-F8F560086FDF</G><O>F03F2D77-79E1-4DEC-BBF8-81A5C0790160</O><D>9.0.8110.0</D><C>9.00.8112.16421</C><OS>6.1.7601.1.0</OS><I>9.0.8112.16421</I><L>zh-CN</L><R><Rq><URL>aHR0cDovL3dhcG1haWwuMTAwODYuY24v</URL><O>POST</O><T>TOP</T><HIP>218.204.255.90</HIP></Rq><Rq><URL>aHR0cDovL3dhcG1haWwuMTAwODYuY24vaW5kZXguaHRt</URL><O>POST</O><T>ACTION</T><HIP>218.204.255.90</HIP></Rq></R></RepLookup>", LAST); web_custom_request("urs.asmx_2", "URL=https://urs.microsoft.com/urs.asmx?MSURS-Client-Key=C84C0w6qif5yiuTi%2bfaoMg%3d%3d&MSURS-Patented-Lock=EQjsDl4IFSQ%3d", "Method=POST", "Resource=0", "RecContentType=text/xml", "Referer=", "Snapshot=t21.inf", "Mode=HTML", "EncType=text/xml; charset=utf-8", "Body=<RepLookup v=\"3\"><G>ED8654D5-B9F0-4DD9-B3E8-F8F560086FDF</G><O>F03F2D77-79E1-4DEC-BBF8-81A5C0790160</O><D>9.0.8110.0</D><C>9.00.8112.16421</C><OS>6.1.7601.1.0</OS><I>9.0.8112.16421</I><L>zh-CN</L><R><Rq><URL>aHR0cDovL3dhcG1haWwuMTAwODYuY24v</URL><O>PRE</O><T>TOP</T><HIP>218.204.255.90</HIP></Rq></R></RepLookup>", LAST);
lr_rendezvous("集合點") //添加集合點
lr_start_transaction("登陸"); //添加事務 web_submit_data("index.htm", "Action=http://wapmail.10086.cn/index.htm", "Method=POST", "Referer=http://wapmail.10086.cn/", "Mode=HTML", ITEMDATA, "Name=ur", "Value=fnngj", ENDITEM, "Name=pw", "Value=heng198876", ENDITEM, "Name=apc", "Value=0", ENDITEM, "Name=_swv", "Value=5", ENDITEM, "Name=a", "Value=3,5 ", ENDITEM, "Name=_fv", "Value=3", ENDITEM, "Name=clt", "Value=5", ENDITEM, LAST); web_submit_data("index.htm_2", "Action=http://wapmail.10086.cn/index.htm", "Method=POST", "RecContentType=text/html", "Referer=http://wapmail.10086.cn/", "Snapshot=t22.inf", "Mode=HTML", ITEMDATA, "Name=ur", "Value=XXXXX", ENDITEM, //登陸用戶名 "Name=pw", "Value=ooooo", ENDITEM, //登陸密碼 "Name=apc", "Value=0", ENDITEM, "Name=_swv", "Value=5", ENDITEM, "Name=a", "Value=3,5 ", ENDITEM, "Name=_fv", "Value=3", ENDITEM, "Name=clt", "Value=5", ENDITEM, LAST); web_custom_request("handler", "URL=http://m.mail.10086.cn/wp1/w3/handler", "Method=POST", "Resource=0", "RecContentType=text/html", "Referer=http://m.mail.10086.cn/bv1/home.html?mo=U0j5GuvVaLG3Xz0qMibbQok8g34_OABo&vn=288&logintype=0&cv=3&swv=5&cli=5", "Snapshot=t23.inf", "Mode=HTML", "EncType=application/x-www-form-urlencoded;charset=UTF-8", "Body=&mo=U0j5GuvVaLG3Xz0qMibbQok8g34_OABo&vn=288&vid=&__randomNumber=1362403651558", EXTRARES, "Url=/bv1/css/public.css?vn=288", "Referer=http://m.mail.10086.cn/bv1/home.html?mo=U0j5GuvVaLG3Xz0qMibbQok8g34_OABo&vn=288&logintype=0&cv=3&swv=5&cli=5", ENDITEM, "Url=/bv1/js/home.js?vn=288", "Referer=http://m.mail.10086.cn/bv1/home.html?mo=U0j5GuvVaLG3Xz0qMibbQok8g34_OABo&vn=288&logintype=0&cv=3&swv=5&cli=5", ENDITEM, LAST); web_custom_request("costanalysis", "URL=http://m.mail.10086.cn/wp1/w3/costanalysis", "Method=POST", "Resource=0", "RecContentType=text/html", "Referer=http://m.mail.10086.cn/bv1/home.html?mo=U0j5GuvVaLG3Xz0qMibbQok8g34_OABo&vn=288&logintype=0&cv=3&swv=5&cli=5", "Snapshot=t24.inf", "Mode=HTML", "EncType=application/x-www-form-urlencoded;charset=UTF-8", "Body=&mo=U0j5GuvVaLG3Xz0qMibbQok8g34_OABo&vn=288&vid=&cmd=999&d=478&b=1&t=710&body=2&r=5&ajaxInitTime=419&ajaxCostTime=285&ajaxBeginTime=0&downBeginTime=156&initBeginTime=704&logintime=5100&homejstime=2&homeutiljstime=2&ajaxSendTime=1362403651558&redirectTime=-1&__randomNumber=1362403652268", EXTRARES, "Url=/bv1/img/global_24.png", "Referer=http://m.mail.10086.cn/bv1/home.html?mo=U0j5GuvVaLG3Xz0qMibbQok8g34_OABo&vn=288&logintype=0&cv=3&swv=5&cli=5", ENDITEM, "Url=/favicon.ico", "Referer=", ENDITEM, LAST); web_custom_request("urs.asmx_3", "URL=https://urs.microsoft.com/urs.asmx?MSURS-Client-Key=maVKmMoyQiei4%2bdFLSDDAA%3d%3d&MSURS-Patented-Lock=HitWNt%2b1Bns%3d", "Method=POST", "Resource=0", "RecContentType=text/xml", "Referer=", "Snapshot=t25.inf", "Mode=HTML", "EncType=text/xml; charset=utf-8", "Body=<RepLookup v=\"3\"><G>ED8654D5-B9F0-4DD9-B3E8-F8F560086FDF</G><O>F03F2D77-79E1-4DEC-BBF8-81A5C0790160</O><D>9.0.8110.0</D><C>9.00.8112.16421</C><OS>6.1.7601.1.0</OS><I>9.0.8112.16421</I><L>zh-CN</L><R><Rq><URL>aHR0cDovL20ubWFpbC4xMDA4Ni5jbi9idjEvaG9tZS5odG1sP21vPVUwajVHdXZWYUxHM1h6MHFNaWJiUW9rOGczNF9PQUJvJnZuPTI4OCZsb2dpbnR5cGU9MCZjdj0zJnN3dj01JmNsaT01</URL><O>PRE</O><T>TOP</T><HIP>113.108.212.38</HIP></Rq></R></RepLookup>", LAST); web_custom_request("urs.asmx_4", "URL=https://urs.microsoft.com/urs.asmx?MSURS-Client-Key=r/4pztMEzQOon4ZLeymWxw%3d%3d&MSURS-Patented-Lock=a7q4TZRzKXk%3d", "Method=POST", "Resource=0", "RecContentType=text/xml", "Referer=", "Snapshot=t26.inf", "Mode=HTML", "EncType=text/xml; charset=utf-8", "Body=<RepLookup v=\"3\"><G>ED8654D5-B9F0-4DD9-B3E8-F8F560086FDF</G><O>F03F2D77-79E1-4DEC-BBF8-81A5C0790160</O><D>9.0.8110.0</D><C>9.00.8112.16421</C><OS>6.1.7601.1.0</OS><I>9.0.8112.16421</I><L>zh-CN</L><R><Rq><URL>aHR0cDovL20ubWFpbC4xMDA4Ni5jbi9idjEvaG9tZS5odG1sP21vPVUwajVHdXZWYUxHM1h6MHFNaWJiUW9rOGczNF9PQUJvJnZuPTI4OCZsb2dpbnR5cGU9MCZjdj0zJnN3dj01JmNsaT01</URL><O>POST</O><T>TOP</T><HIP>113.108.212.38</HIP></Rq></R></RepLookup>", LAST); lr_end_transaction("登陸",LR_AUTO); //登錄事物結束 return 0; }
控制器中設置集合點策略
我們在Virtual User Generator 中回放腳本無法體現集合點的作用。集合點是在多用戶並發運行的時候才能起作用。所以,我們需要把腳本導入到Controller 中進行進一步的設置。
1、打開Controller (控制器),導入錄制的腳本。
2、菜單欄 Scenario ---> Rendezvous 打開集合點設置界面
我們可以看到Vusers 列表框里有10個集合點(1~10),這里的數量和我們設置的虛擬用戶數一致。
我們可以點擊選中某個集合點,點擊“Disable VUser” 按鈕,使其不參與集合點。(某班級早晨集合跑步,A同學肚子痛,經過老師的允許不參與早晨的集合跑步。)
點擊“Policy...”來設置集合點的策略:
下面來看看這三種策略的含義:
Release when :當所有虛擬用戶中的x % 到達集合點進釋放,即僅當指定百分比的虛擬用戶到達集合點時,才釋放虛擬用戶。
注意:此選項將會干擾場景的計划。如果選擇此選項,場景將不按計划運行。
Release when :當所有正在運行的虛擬用戶中的x %到達集合點時釋放,即僅當場景中指定百分比的、正在運行的虛擬用戶到達集合點時,才釋放虛擬用戶。
還有不在運行的虛擬用戶? 假如,設置為1分鍾啟動一個用戶,當然會存在因為用戶還沒啟動,所以無法參與集合點。
Release when : 當x 個虛擬用戶到達集合點時釋放,即僅當指定數量的虛擬用戶到達集合點時,才釋放虛擬用戶。
這個很好理解,當我用百分比不太好衡量集合點的虛擬用戶數,當然可以設置具體的用戶數。
Timeout between Vusers (虛擬用戶之間的超時)框中輸入一個超時值。
假如設置了集合10用戶並發,結果9個用戶已經集合到位,還剩1個虛擬用戶,左等右等就是等不來。那總不能一直等下去吧。設定了個時間,假如30秒還不來,那就不管它了。
超時的時長默認是30秒,我們可以根據具體的被測應用進行調整。