LoadRunner FAQ
web_concurrent_start和web_concurrent_end
web_concurrent_start
語法:
int web_concurrent_start ( [char * ConcurrentGroupName,]NULL );
參數:
ConcurrentGroupName:可選的,并發組的標識符。
NULL:參數列表結束的標記符。
返回值:
整型,返回LR_PASS (0)表示成功,返回LR_FAIL(1)表示失敗。
web_concurrent_end
語法:
int web_concurrent_end ( reserved );
參數:
reserved:保留的供擴展的字段。
返回值
整型。返回LR_PASS (0)表示成功,返回LR_FAIL(1)表示失敗。
說明
web_concurrent_start函數是并發組開始的標記。web_concurrent_end,并發組結束的標記。在并發組中的函數不是立即執行的。在并發組開始時,所有的函數首先被記錄下來,當并發組結束時,所有的函數并發執行。腳本執行時,碰到 web_concurrent_end函數時,開始并發執行所有記錄的函數。
在并發組中,可以包含的函數有:web_url、web_submit_data、web_custom_request、web_create_html_param、web_create_html_param_ex、web_reg_save_param、web_add_header。
URL-based 方式將每條客戶端發出的請求錄制成一條語句,對LoadRunner來說,在該模式下,一條語句只建立一個到服務器的連接,LoadRunner提供了web_concurrent_start和web_concurrent_end函數模擬HTML-based的工作方式
LoadRunner變量
Loadrunner變量分為局部變量和全局變量。
1. 如何定義變量
在Loadrunner腳本中變量必須在開頭聲明。比如說,在vuser_init、Action、vuser_end定義變量,必須現在最頂端生命,后面才能使用。如果不這樣,編譯器是通不過的。
2. 局部變量
就像C語言一樣,變量有作用域范圍,局部變量包含在函數或者vuser_init、Action、vuser_end內部,對于其他范圍之外就不起作用了。
3. 全局變量
若要跨越vuser_init、Action、vuser_end定義變量,則需要定義全局變量。在Loadrunner的腳本錄制時,會生成一個globals.h文件,在這里定義的變量相當于Loadrunner腳本的全局變量,可以在vuser_init、Action、vuser_end中被使用。例子:
#ifndef _GLOBALS_H #define _GLOBALS_H //------------------------------------------------------------------- // Include Files #include "lrun.h" #include "web_api.h" #include "lrw_custom_body.h" //定義全局變量char * str="This is a test"; //------------------------------------------------------------------- // Global Variables#endif // _GLOBALS_H |
LR中參數的定義和賦值
1.參數的賦值和取值
lr_save_string("hello world","param");
lr_eval_string("{param}");
2.變量到參數
int x; char *y; y="hello"; x=10; lr_save_int(x,"param"); lr_save_string(y,"param1"); lr_eval_string("{param}"); lr_eval_string("{param1}"); |
3.變量讀參數
char x[100]; x="{param}"; lr_save_string("hello world","param"); lr_eval_string(x); |
LR中文件下載模擬
Action() { //定義一個整型變量保存獲得文件的大小 int flen; //保存文件句柄 long filedes; //保存文件路徑及文件名 char file[256]="/0"; //定義一個隨機數 char * strNumber; //Returns the string argument after evaluating embedded parameters. strNumber=lr_eval_string("{RandomNum}"); //將路徑保存到file變量中 strcat(file,"D://Excel//"); //將獲得的隨機數拼接在file變量之后 strcat(file,strNumber); //將下載的文件后綴名.rar拼接在file變量之后 strcat(file,".rar"); //到此為止一個LoadRunner已經獲得了一個完整的文件名 //設置參數的最大長度,注意該值必須大于文件的大小 web_set_max_html_param_len("20000"); //使用關聯函數獲取下載文件的內容,在這里不定義左右邊界,獲得服務器響應的所有內容 web_reg_save_param("fcontent", "LB=", "RB=", "SEARCH=BODY", LAST); lr_start_transaction("下載幫助文件"); //發送下載幫助文件的請求 web_url("DownLoadServlet", "URL=https://testserver3/servlet/DownLoadServlet?filename=help", "Resource=1", "RecContentType=application/x-msdownload", "Referer=", "Snapshot=t41.inf", LAST); //獲取響應中的文件長度 flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE); if(flen > 0) { //以寫方式打開文件 if((filedes = fopen(file, "wb")) == NULL) { lr_output_message("打開文件失敗!"); return -1; } //寫入文件內容 fwrite(lr_eval_string("{fcontent}"), flen, 1, filedes); //關閉文件 fclose(filedes); } lr_end_transaction("下載幫助文件",LR_AUTO); return 0; } |
如何進行數據的關聯
VuGen提供二種方式幫助您找出需要做關聯(correlation)的值:
1. 自動關聯
2. 手動關聯
自動關聯
VuGen內建自動關聯引擎(auto-correlationengine),可以自動找出需要關聯的值,并且自動使用關聯函數建立關聯。有兩種方式:
RuleCorrelation
可以在【RecordingOptions】>【InternetProtocol】>【Correlation】中啟用關聯規則,則當錄制這些應用系統的腳本時,VuGen會在腳本中自動建立關聯。
您也可以在【RecordingOptions】>【InternetProtocol】>【Correlation】檢視每個關聯規則的定義。
請依照以下步驟使用RuleCorrelation:
1. 啟用auto-correlation
1) 點選VuGen的【Tools】>【RecordingOptions】,開啟【RecordingOptions】對話窗口,選取【InternetProtocol】>【Correlation】,勾選【Enablecorrelation during recording】,以啟用自動關聯。
2) 假如錄制的應用系統屬于內建關聯規則的系統,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,請勾選相對應的應用系統。
3) 或者也可以針對錄制的應用系統加入新的關聯規則,此即為使用者自訂的關聯規則。
2. 錄制腳本
開始錄制腳本,在錄制過程中,當VuGen偵測到符合關聯規則的數據時,會依照設定建立關聯,您會在腳本中看到類似以下的腳本,此為BroadVision應用系統建立關聯的例子,在腳本批注部分可以看到關聯前的數據為何。
3. 執行腳本驗證關聯是OK的。
CorrelationStudio
當錄制的應用系統不屬于VuGen預設支持的應用系統時,RuleCorrelation可能既無法發揮作用,這時可以利用CorrelationStudio來做關聯。
CorrelationStudio會嘗試找出錄制時與執行時,服務器響應內容的差異部分,藉以找出需要關聯的數據,并建立關聯。
使用CorrelationStudio的步驟如下:
1. 錄制腳本并執行
2. 執行完畢后,VuGen會跳出下面的【ScanAction for Correlation】窗口,詢問您是否要掃描腳本并建立關聯,按下【Yes】按鈕。
3. 掃描完后,可以在腳本下方的【CorrelationResults】中看到掃描的結果。
4. 檢查一下掃瞄的結果后,選擇要做關聯的數據,然后按下【Correlate】按鈕,一筆一筆做,或是按下【CorrelateAll】讓VuGen一次就對所有的數據建立關聯。
注意:由于CorrelationStudio會找出所有有變動的數據,但是并不是所有的數據都需要做關聯,所以不建議您直接用【CorrelateAll】。
5. 一般來說,您必須一直重復步驟1~4直到所有需要做關聯的數據都找出來為止。因為有時前面的關聯還沒做好之前,將無法執行到后面需要做關聯的部份。
手動關聯
手動關聯的執行過程大致如下:
1. 使用相同的業務流程與數據,錄制二份腳本
2. 使用Diff工具比較一下生成的Action.c,找出需要關聯的數據
3. 使用web_reg_save_param函數手動建立關聯
4. 將腳本中有用到關聯的數據,以參數取代
注意動態數據不能放在vuser_init.c文件中。不是所有的差異處都要關聯的,WEB_URL()等方法的參數列表的先后順序是沒關系的,思考時間當然也可以不同。
LR的檢查點設置
常用檢查點函數如下:
1)web_find()函數用于從 HTML 頁中搜索指定的文本字符串;
2)web_reg_find()函數注冊一個請求,以在下一個操作函數(如 web_url)檢索到的HTML網頁上搜索指定的文本字符串;
3)web_image_check()函數用于從HTML頁面中查找指定的圖片;
4)web_global_verfication()屬于注冊函數,注冊一個在web頁面中搜索文本字符串的請求,與web_reg_find只在下一個Action函數中執行搜索不同的是它在之后所有的Action類函數中執行搜索指定的文本字符串;
下面分別介紹以上函數的用法:
1、web_find()函數參數舉例:
web_find("web_find","RighOf=a","LeftOf=b","What=name",LAST);
參數解釋:"web_find"定義該查找函數的名稱;“LeftOf”和“RighOf=”用來定義查找字符的左右邊界;“What=”定義查找內容;
例如上述參數舉例中的意思就是在頁面中查找左邊界為b,右邊界為a,內容為name的信息;
使用該函數注意事項:該函數是在查找頁面中的內容,所以要放在要查找的內容的后面;該函數只能在基于HTML模式錄制的腳本中進行查找
注意事項:使用該函數時,要在Vuser->Run-Tme Settings中更改下設置
勾選Enable Image and text check
系統默認是不勾選該選項的。
2、web_reg_find()函數參數舉例:
web_reg_find("Search=Body","SaveCount=ddd","Test=aaa",LAST);
參數解釋: Search用來定義查找范圍,SaveCount定義查找計數變量名稱,該參數可以記錄在緩存中查找內容出現的次數,可以使用該值,來判斷要查找的內容是否被找到;
例如上述參數舉例中的意思就是Body中查找內容為aaa的信息,并將出現次數記錄在變量ddd中;
【代碼一:web_reg_find("Text=PaymentDetails",LAST);
代碼思路:1.“Payment Details” 為你要檢查的文本;
2. 腳本執行到此處,若在頁面上找到了這幾個字符串,那腳本繼續執行下去;若沒有找到,腳本將在此報錯并且結束。
3、web_image_check()函數參數說明:
web_image_check("web_image_check","Alt=","Src=",LAST);
參數解釋:“Alt”和“Src”的值直接取該圖片在網頁源代碼中相應參數的值;
注意事項:使用該函數時,要在Vuser->Run-Tme Settings中勾選Enable Image and text check,具體操作請看web_find()中的注意事項。
插入函數的方法
1、 手工寫入,在需要插入函數的位置手工寫入該函數;
2、 光標停留在要插入函數的位置,在INSERT菜單中,選擇new step,在列表中選擇或查找要插入的函數,根據提示填寫必要的參數;
3、 在tree view模式下,在樹狀菜單中選中要插入函數的位置,右鍵,選擇insert after或insert before,根據提示填寫必要的參數;
總結:
1、 這兩個函數函數類型不同,WEB_FIND是普通函數,WEB_REG_FIND是注冊函數;
2、 WEB_FIND使用時必須開啟內容檢查選項,而WEB_REG_FIND則不沒有此限制;
3、 WEB_FIND只能用在基于HTML模式錄制的腳本中,而WEB_REG_FIND沒有此限制;
4、 WEB_FIND是在返回的頁面中進行內容查找,WEB_REG_FIND是在緩存中進行查找;
5、 WEB_FIND在執行效率上不如WEB_REG_FIND;
使用web_concurrent_start報錯
錄制方式選的是HTML-based script,改為url-based script就可以了。該函數不支持HTML-based script方式。
LR中的腳本變量聲明報錯
Loadrunner使用的是C語言的語法。腳本中變量必須在開頭聲明。比如說,在Vuser_init、Action、Vuser_end定義變量,必須現在最頂端生命,后面才能使用。如果不這樣,編譯器是通不過的。
posted on 2014-04-15 11:01 順其自然EVO 閱讀(272) 評論(0) 編輯 收藏 所屬分類: loadrunner