LoadRunner介面函數web_custom_request
在我們錄製腳本時,正常情況下一般都是使用HTML記錄的方式來錄製腳本。生成的腳本中絕大部分都是使用web_submit_data或web_submit_form函數來提交請求。但是如果請求不能使用web_submit_data或web_submit_form函數提交時,那麼LoadRunner會生成自動定義請求函數來提交請求。自定義請求函數為web_custom_request。
對於使用HTML方式錄製好的腳本也可以通過重新生成腳本的方式,將腳本變成以自定義請求函數提交請求的腳本。其步驟如下:
1) 選擇重新生成腳本
對於使用HTML方式錄製好的腳本也可以通過重新生成腳本的方式,將腳本變成以自定義請求函數提交請求的腳本。其步驟如下:
單擊Tools菜單,在彈出的下拉菜單中選擇Regenerate Script,如圖所示。
2) 在彈出的對話框中單擊「選項」按鈕,如圖所示。
3) 設置錄製方式。
在彈出的Regenerate Options對話框中,選擇Recording選項,然後再選擇URL-based script選項,單擊「URL Advanced」。
在彈出的Advanced URL對話框中,選中「Use web_custom_request only」選擇項。如圖所示。
完成後腳本會修改為都是以自動定義請求的方式發送請求。
web_custom_request函數語法如下:
int web_custom_request( const char *RequestName, <List of Attributes>,
[EXTRARES, <List of Resource Attributes>,] LAST );
web_custom_request函數主要包括以下屬性選項:
1) URL
提交請求的地址
2) Method
表單提交的方法,一般有兩種:GET或POST。
3) TargetFrame
表示當前鏈接或資源的Frame名稱。除了Frame的名字,還可以設置以下參數:
_BLANK:打開一個新的窗口。
_PARENT:使用最新的Frame代替上級的Frame。
_SELF:替換最新更改過的Frame。
_TOP:替換整個頁面。
4) EncType
使用的編碼方法的類型,指定內容類型(Content-Type),指定其做為回放腳本時「Content-Type」請求頭的值,例如「text/html」。Web_custom_request函數不會處理未編碼過的請求體,請求體參數將會使用已經指定的編碼方式。因此,如果指定了不匹配HTTP請求體的「EncType」,會引起服務端產生錯誤。通常建議不要手動修改錄製時的「EncType」值,因為任何對於「EncType」的指定都會覆蓋web_add_[auto_]header函數指定的Content-Type。當指定了「EncType=」(空值)時,不會產生「Content-Type」 請求頭。當省略了「EncType」時,任何一個web_add_[auto_]header函數都會起作用。如果既沒有指定EncType也沒有web_add_[auto_]header函數,且「Method=POST」,「application/x-www-form-urlencoded」會做為默認值來使用。其他情況下,不會產生Content-Type請求頭。
5) RecContentType
表示響應頭的內容類型。錄製腳本時響應頭的內容類型。例如text/html、 application/x-javascript等。如果沒有設置Resource屬性,那麼可以用它來確定目標URL是否是可記錄的資源。此屬性包含主要的和次要的資源。最頻繁使用的類型是 text、application、image。次要的類型根據資源不同變化很多。例如:「RecContentType=text/html」:表示html文本,「RecContentType=application/msword」:表示當前使用的是Msword。
6) Referer
表示當前頁面關聯的頁面,如果當前的位置是一個明確的,那麼此項可以省略。
7) Body
表示請求體的內容。即請求時所用到的相關參數。
8) Raw Body
表示請求體是以指針的方式進行傳遞。Raw Body的語法格式如下:
RAW_BODY_START,
緩存數據指針
(int) length,
RAW_BODY_END
如以下實例:
char *test="helloworld"
web_custom_request("StepName",
"URL= http://192.168.40.128:8091/ECShop_V2.7.3_UTF8_release0411/upload/user.php ",
"Method=POST",
RAW_BODY_START,
" test ",
5,
RAW_BODY_END,
LAST);
9) BodyFilePath
作為請求體傳送的文件的路徑。它不能與下面的屬性一起使用:Body或者其他Body屬性或Raw Body屬性包括BodyBinary、BodyUnicode、RAW_BODY_START或Binary=1
10) Mode
表示兩種錄製方式:HTML或HTTP。
關於Body中數據傳輸的方式有三種:一是表單格式的數據;二是JSON格式的數據;三是二進位格式的數據。
下面是一個登錄的腳本,錄製使用的是web_submit_data函數提交請求的。
web_submit_data("user.php",
"Action=http://192.168.40.128:8091/ECShop_V2.7.3_UTF8_release0411/upload/user.php",
"Method=POST",
"RecContentType=text/html",
"Referer=http://192.168.40.128:8091/ECShop_V2.7.3_UTF8_release0411/upload/user.php",
"Snapshot=t40.inf",
"Mode=HTTP",
ITEMDATA,
"Name=username", "Value=test", ENDITEM,
"Name=password", "Value=111111", ENDITEM,
"Name=act", "Value=act_login", ENDITEM,
"Name=back_act", "Value=http://192.168.40.128:8091/ECShop_V2.7.3_UTF8_release0411/upload/", ENDITEM,
"Name=submit", "Value=", ENDITEM,
LAST);
下面將使用web_custom_request函數以表單的方式進行提交請求。
web_custom_request("user.php",
"URL=http://192.168.40.128:8091/ECShop_V2.7.3_UTF8_release0411/upload/user.php",
"Method=POST",
"RecContentType=text/html",
"Mode=HTTP",
"Body=username=test&password=111111&act=act_login&submit=",
LAST);
為了讓代碼看上去再直觀可以將代碼修改成以下格式:
web_custom_request("user.php",
"URL=http://192.168.40.128:8091/ECShop_V2.7.3_UTF8_release0411/upload/user.php",
"Method=POST",
"RecContentType=text/html",
"Mode=HTTP",
"Body=username=test&"
"password=111111&"
"act=act_login&submit="
,
LAST);
下面將使用web_custom_request函數以JSON的方式進行提交請求。
web_custom_request("user.php",
"URL=http://192.168.40.128:8091/ECShop_V2.7.3_UTF8_release0411/upload/user.php",
"Method=POST",
"RecContentType=text/html",
"Mode=HTTP",
"Body=username=test&password=111111&act=act_login&submit=",
"Body= {"username":test,"password":111111,"act":act_login,"submit":}",
LAST);
也可以使用Body發送二進位格式的數據,如以下代碼:
web_custom_request("test",
"URL=http://www.bing.com",
"Method=POST",
"TargetFrame=",
"Resource=0",
"Mode=HTTP",
"Body=x68x65x6Cx6Cx6F",
LAST);
推薦閱讀: