竟然要幫測試寫loadrunner的腳本,也不好意思讓別人來幹,只好自己上咯。
借了本書,看了下,寫了一天,完成了。特意記錄下幾個注意點。
1:基本情況
對我來說,loadrunner腳本編程=loadrunner系統函數調用+基本C編程。前者實現了網絡相關應用以及一些基本系統功能,如類似printf功能。
所有函數我就都加在Action函數裏面。其實實際上,loadrunner會有一個Action.c 文件在本地,可以直接編輯。
可以在代碼裏面直接加事務範圍或者同步點。
通過設置Iterations來實現反覆調用或者Concurrent來併發執行。
2:重要函數
參考下面代碼,實現了:設置事務,get操作,post操作,並得到了每次連接的返回數據指針(preturn )
lr_start_transaction("uploading");
web_reg_save_param("preuploadcontents", "LB=", "RB=", "SEARCH=BODY", LAST);
sprintf(szURL,"URL=http://xxx.xx.xxx.xxx:8080/rest?appkey=testkey&method=ps.preupload&token=%s&appsig=8aae40dc374ea0367cf25f86fcdef9f8",token);
web_url("rest",
szURL,
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
preturn = lr_eval_string("{preuploadcontents}");
rc = atoi(&preturn[14]);
lr_output_message("preload rc = %d", rc);
if(rc != 0)
{
goto END;
}
memcpy(transid, preturn+25, 36);
//lr_output_message("transid = %s", transid);
web_reg_save_param("loadcontents", "LB=", "RB=", "SEARCH=BODY", LAST);
sprintf(sttoken,"Value=%s", token);
sprintf(sttransid,"Value=%s", transid);
// sprintf(stname,"Value=G://sb_facebook//%s.jpg", lr_eval_string("{filename}"));
sprintf(stname,"Value=G://sb_facebook//%s//%s.jpg", lr_eval_string("{logID}"), lr_eval_string("{filename}"));
lr_output_message("stname = %s", stname);
web_submit_data("upload",
"Action=http://xxx.xx.xxx.xxx:8080/rest?",
"Method=POST",
"EncType=multipart/form-data",
"RecContentType=text/html",
"Referer=http://localhost:8080/Demo/upload/uploadDemo02.html",
"Snapshot=t2.inf",
"Mode=HTTP",
ITEMDATA,
"Name=appkey", "Value=testkey", ENDITEM,
"Name=method", "Value=ps.upload", ENDITEM,
"Name=token", sttoken, ENDITEM,
"Name=tranid", sttransid, ENDITEM,
"Name=appsig", "Value=8aae40dc374ea0367cf25f86fcdef9f8", ENDITEM,
"Name=file1", stname, "File=Yes", ENDITEM,
LAST);
preturn = lr_eval_string("{loadcontents}");
rc = atoi(&preturn[14]);
lr_output_message("upload rc = %d", rc);
if(rc != 0)
{
goto END;
}
END:
lr_end_transaction("uploading", LR_AUTO);
另外,有點要注意:
如果下載的是文本文件(XML),其大小應該是iflen = strlen(lr_eval_string("{fcontents}")); //試驗過
如果下載的是raw數據,其大小應該是iflen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE); //據說,我沒試驗
3:設置參數
這個是重點了。
參數文件其實就是本地的dat文件,就是文本文件格式。
有兩個屬性要設置:
select next row:
update value on:
我上面的logID,因爲要每個vuser有一個獨立的logID,並且在每次迭代中都是不變的,所以前者選擇Unique,後者選擇Once。
我上面的filename,因爲要每個vuser在每次迭代使用不同的文件,而vuser之間保持一致,所以前者選擇Sequential,後綴選擇Each iteration。 其實前者選random也是可以的,這樣vuser之間就不一致了。