1. 程式人生 > >loadrunner 關聯函數web_reg_save_param

loadrunner 關聯函數web_reg_save_param

函數 從服務器 級別 從數據 數據 message 是否 submit 則表達式

當我們每次訪問網站都需要提交從服務器獲取的動態文本時就會需要用到關聯函數,就好像每次乘坐火車票我們都需要用最新的火車票,如果用舊車票就不能做火車,如果我們采用了錄制時的舊動態碼如usersession再次訪問服務器,跟服務器通信就是失敗,於是我們就需要用到web_reg_save_param函數將服務器反饋的動態碼保存成文本字符串到一個參數,而這個函數必須要放在動作函數之前,如web_url,放在動作函數之後就無法取到想要的數據。

第一,函數各參數描述

int web_reg_save_param( const char *ParamName, <List of Attributes>, LAST );  

1. ParaName:要創建的參數名,用來保存獲取的動態文本

2. List of Attributes包含:

Convert:可選屬性

HTML_TO_URL:將html編碼的數據轉換為url編碼的數據格式

HTML_TO_TEXT:將html編碼的數據轉換為純文本格式

LB:左邊界,不支援正則表達式,如果沒有指定則從數據開始的字符算

NOTFOUND:

"Notfound=error",默認設置,當找不到邊界時觸發一個錯誤

"Notfound=warning",如果找不到邊界,觸發一個警告,繼續運行腳本

兩種設置觸發的log message如下2條,一條顯示錯誤,一條顯示警告。

submit_login.c(6): 錯誤 -26377:

找不到所請求參數“usersession”的匹配項。請檢查響應數據中是否存在請求的邊界。此外,如果要保存的數據超過 256 字節,請使用 web_set_max_html_param_len 增加參數大小 [MsgId: MERR-26377]
submit_login.c(6): 通知: 保存參數“usersession = ”。
submit_login.c(6): web_submit_data("login.pl") 最高嚴重級別為“ERROR”,795 個正文字節,225 個標頭字節 [MsgId: MMSG-26388]

submit_login.c(6): 警告 -26377: 
找不到所請求參數“usersession”的匹配項。請檢查響應數據中是否存在請求的邊界。此外,如果要保存的數據超過 256 字節,請使用 web_set_max_html_param_len 增加參數大小 [MsgId: MWAR-26377] submit_login.c(6): 通知: 保存參數“usersession = ”。 submit_login.c(6): web_submit_data("login.pl") 最高嚴重級別為“warning”,795 個正文字節,225 個標頭字節 [MsgId: MMSG-26388]

ORD:默認設置為1,把查找到的第1個符合邊界設置的文本字串賦值給變量;如果設置為All則把所有找到的結果都賦值給變量,而變量則變成數組類型

RB:右邊界,不支援正則表達式,如果為空則使用直到數據結束的所有字符作為邊界。

RelFrameID:可選,在GUI腳本中不支持

SaveLen:可選,從指定偏移量中找到的值的子字符串的長度,以便保存到參數中。默認是-1,表示保存到字符串末尾

SaveOffset:可選,找到值的子字符串的偏移量,以保存到參數中。

以下查找到的子字符“125219.910247064zttAQQQpVDDDDDDDDiztfpQQti”,如果設置"SaveLen=5","SaveOffset=8"則保存到參數中的文本為10247。

Search:可選,查找範圍,可能的值是header(只搜索header)、Body(只搜索Body數據,而不是Headers)、Noresource(只搜索HTML Body,不包括所有header和資源)或all(搜索Body、Headers和資源)。默認值為ALL

第二,實際應用

Loadrunner自帶的飛機訂票系統,在登陸的時候需要提供usersession,這是一個動態碼,每次訪問打開網站都會不同,我們就用關聯函數來獲取這個值。

查看網頁源代碼:

</style>
<form method=post action=error.pl  onSubmit=‘doJSFormSubmit1(this)‘ target=body>
<input type=hidden name=userSession value=125220.012555691zttVAAtpDQfiDDDDDiztzpAczDHf>
<table border=0><tr><td>&nbsp;</td>

找到userSession所在位置,在設定左右邊界時,最好先在源代碼中查找一下看設定哪個邊界查找結果為1,如設定左邊界為“Value=”,又邊界為“>“,取到的usersession不一定是我們想要的值。

Action()
{
    web_reg_save_param("usersession","LB=userSession value=","RB=>",LAST);

    web_url("WebTours", 
        "URL=http://127.0.0.1:1080/WebTours/", 
        "Resource=0", 
        "RecContentType=text/html", 
        "Referer=", 
        "Snapshot=t2.inf", 
        "Mode=HTML", 
        LAST);
    web_reg_find("Text=Welcome, <b>llll</b>","SaveCount=count",LAST);

    web_submit_data("login.pl", 
        "Action=http://127.0.0.1:1080/WebTours/login.pl", 
        "Method=POST", 
        "RecContentType=text/html", 
        "Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home", 
        "Snapshot=t4.inf", 
        "Mode=HTML", 
        ITEMDATA, 
        "Name=userSession", "Value={usersession}", ENDITEM, 
        "Name=username", "Value=llll", ENDITEM, 
        "Name=password", "Value=1234", ENDITEM, 
        "Name=JSFormSubmit", "Value=off", ENDITEM, 
        "Name=login.x", "Value=43", ENDITEM, 
        "Name=login.y", "Value=10", ENDITEM, 
        LAST);
    if(atoi(lr_eval_string("{count}"))>0)
        lr_output_message("%s login pass",lr_eval_string("{username}"));
    else
        lr_output_message("%s login fail",lr_eval_string("{username}"));
    lr_think_time(4);

    web_url("welcome.pl", 
        "URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=1", 
        "Resource=0", 
        "RecContentType=text/html", 
        "Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home", 
        "Snapshot=t5.inf", 
        "Mode=HTML", 
        LAST);

    return 0;
}

loadrunner 關聯函數web_reg_save_param