在我們錄製腳本時,正常情況下一般都是使用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= 192.168.40.128:8091/ECS ",

"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=192.168.40.128:8091/ECS",

"Method=POST",

"RecContentType=text/html",

"Referer=192.168.40.128:8091/ECS",

"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=192.168.40.128:8091/ECS", ENDITEM,

"Name=submit", "Value=", ENDITEM,

LAST);

下面將使用web_custom_request函數以表單的方式進行提交請求。

web_custom_request("user.php",

"URL=192.168.40.128:8091/ECS",

"Method=POST",

"RecContentType=text/html",

"Mode=HTTP",

"Body=username=test&password=111111&act=act_login&submit=",

LAST);

為了讓代碼看上去再直觀可以將代碼修改成以下格式:

web_custom_request("user.php",

"URL=192.168.40.128:8091/ECS",

"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=192.168.40.128:8091/ECS",

"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=bing.com",

"Method=POST",

"TargetFrame=",

"Resource=0",

"Mode=HTTP",

"Body=x68x65x6Cx6Cx6F",

LAST);


推薦閱讀:
相關文章