本例通過(guò)一個(gè)使用HTTP/HTML協(xié)議發(fā)送、獲取服務(wù)器數(shù)據(jù)的vuser腳本,分析LoadRunner如何進(jìn)行HTTP關(guān)聯(lián)。
下面這個(gè)例子包括兩個(gè)事務(wù):上傳數(shù)據(jù)到服務(wù)器、下載服務(wù)器數(shù)據(jù),通過(guò)關(guān)聯(lián)將服務(wù)器返回的數(shù)據(jù)保存下來(lái),方便就行分析。
1、定義變量
在Action最前面定義變量,否則會(huì)報(bào)錯(cuò)。
代碼:
merc_timer_handle_t timer; double wasteTime=0; char *ActualBuffer; int NumberOfBytes; char *tmp; char tmpcode[24]={0}; //iterator int i=0; int j = 0; int m = 0; //mobile char codearray[100][24]={0}; //存儲(chǔ)mobile下載的代碼,每個(gè)代碼暫設(shè)為24字節(jié)長(zhǎng) char* code; short codelen; //存儲(chǔ)mobile下載的代碼的長(zhǎng)度 short codenum; //總代碼個(gè)數(shù) int retUL = -1; //上傳返回值 //int lenUL = 0; //上傳返回長(zhǎng)度 int retDL = -1; //下載返回值 int lenDL = 0; //下載返回長(zhǎng)度 int flag = 0; //符合的code總數(shù) //pc //char retcodeUL[10]={0}; //char retcodeDL[2048]={0}; char* pcretUL; char pccode[24]={0}; char pccodearray[1024][24]={0}; short pccodelen=0; |
2、保存服務(wù)返回?cái)?shù)據(jù)
在定義變量或常量后,開始定義事務(wù)、進(jìn)行關(guān)聯(lián)。
代碼:
web_set_max_html_param_len("2000000");//設(shè)置頁(yè)面接收最大的字節(jié)數(shù),該設(shè)置應(yīng)大于下載文件的大小 //使用關(guān)聯(lián)函數(shù)獲取下載文件的內(nèi)容,在這里不定義左右邊界,獲得服務(wù)器響應(yīng)的所有內(nèi)容 web_reg_save_param("filecontent", "LB=", "RB=", "Search=BODY", LAST); lr_rendezvous("Re_UL_PC"); lr_start_transaction("UL_PC"); //pc上傳 web_url("create", "URL=http://10.15.107.112:9089/sys/userdata/create?userid={userid}&content={'group0':[{'data':'{code1}.stk','time':1376904823299640},{'data':'{code2}.stk','time':1376904823299647},{'data':'{code3}.stk','time':1376904823299651},{'data':'{code4}.stk','time':1376904836969909}]}&fileName=mystock.json&rawtype=true&Accept=json", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t1.inf", "Mode=HTTP", LAST); pcretUL = lr_eval_string("{filecontent}"); if(NULL != strcmp(pcretUL,"{\"state\":1")) lr_end_transaction("UL_PC",LR_PASS); else lr_end_transaction("UL_PC",LR_FAIL); |
在上述代碼中,web_reg_save_param函數(shù)起到了關(guān)聯(lián)作用,必須在調(diào)用web_url之前使用,它的作用類似一個(gè)注冊(cè)機(jī)制。調(diào)用了語(yǔ)句web_reg_save_param("filecontent", "LB=", "RB=", "Search=BODY", LAST);之后,LoadRunner自動(dòng)將服務(wù)器返回的HTTP數(shù)據(jù)的BODY中左右邊界(LB左邊界,RB右邊界)之內(nèi)的內(nèi)容保存到變量filecontent中。具體參數(shù)說(shuō)明請(qǐng)參考幫助文檔。
filecontent由系統(tǒng)自動(dòng)分配,我們只需要給它傳個(gè)名字,以后可以直接使用該變量。pcretUL = lr_eval_string("{filecontent}");將變量filecontent的內(nèi)容提取賦值給我們自定義變量pcretUL。注意調(diào)用形式。
獲取到服務(wù)器數(shù)據(jù)后,通過(guò)添加自己的判斷邏輯,來(lái)斷定事務(wù)成功或失敗。