LoadRunner(三)再識web_custom_request函式
web_custom_request函式在LR中使用非常普遍,特別是在手工指令碼替代錄制指令碼的今天,幾乎所有的請求都使用此函式來完成。
從理論上講,該函式屬於萬能函式,完全可以替代web_link()、web_url()、web_submit_data()這些函式的存在。
事情是這樣的:昨天在對某一介面進行指令碼編寫的時候,發現一個很奇怪的情況,該介面呼叫方式為:http://xxxxxxx/xx/xx?data=“json資料”的方式來進行;最初的想法是直接在web_custom_request函式的URL引數中拼接json資料,這種方式在最初的幾條資料的情況下是可以完美的實現的,如下程式碼:
web_custom_request("web_custom_request",
"URL={URL}
"Method=POST",
.....
LAST);
但是專案要求JSON資料至少需要上百條,這上百條資料拼接起來長度直接上2000位元組,此時LR回放直接報錯:
Action.c(44): 錯誤 -26631: 對於“http://......”,HTTP 狀態程式碼=400 (Bad Request) [MsgId: MERR-26631]
Action.c(44): web_custom_request("web_custom_request") 最高嚴重級別為“ERROR”,324 個正文位元組,179 個標頭位元組 [MsgId: MMSG-26388]
Action.c(44): 錯誤 -27748: 生成 HTTP 請求時,緩衝區溢位。嘗試增加執行時設定中的“網路緩衝區大小”。 [MsgId: MERR-27748]
之類的錯誤層出不窮,然後想到既然如此,為何不把內容寫入Body中,這樣傳送的時候會自動分片,於是有了如下的寫法:
web_custom_request("web_custom_request",
"URL=http://192.168.51.123:81/dc-api/action",
"Method=POST",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t2.inf",
"Mode=HTML",
"EncType=text/html",
"Body=data={param}",
LAST);
執行後是不報錯了,但是介面部分返回缺提示:
{"Result":false,"Message":"傳入data為空","Code":"ERR-0x00000095","Version":"","Data":null}
這就奇怪了,然後修改了各種方法,都不行,最後進行了如下修改:
web_custom_request("web_custom_request",
"URL=http://192.168.51.123:81/dc-api/action",
"Method=POST",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t2.inf",
"Mode=HTML",
"EncType=application/x-www-form-urlencoded",
"Body=data={param}",
LAST);
即指定了EncType為application/x-www-form-urlencoded的方式,介面提示成功了。
通過研究後發現,web_custom_request的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請求頭。
在後面分析的時候,也是通過抓包方式發現了確實兩種不同編碼方式有不同的請求頭,而不同的頭在介面方向接收的時候處理會出現異常。
相關文章
- loadrunner常用函式函式
- loadrunner常用函式總結函式
- LoadRunner函式學習筆記函式筆記
- 隨便寫倆Loadrunner函式函式
- 第三章 初識vLookup函式函式
- Loadrunner 使用者自定義函式使用[轉]函式
- LoadRunner函式中文翻譯系列之一--Action函式
- 三、函式函式
- 再探JS---eval函式JS函式
- Loadrunner C/S關聯函式(LSP)AND(LSSS)使用-案例函式
- 為LoadRunner寫一個lr_save_float函式函式
- 在LoadRunner中使用檔案的相關函式函式
- 初識函式函式
- scala(三)函式函式
- 初識loadrunner wasted timeAST
- 初識vLookup函式函式
- 09 初識函式函式
- 【知識點】inline函式、回撥函式、普通函式inline函式
- 再談函式和一等公民函式
- 函式學習三函式
- ORACLE單行函式與多行函式之三:數值函式Oracle函式
- 初識Lambda表示式(匿名函式)函式
- 在LoadRunner中轉換字串大小寫的C語言函式字串C語言函式
- 三角函式:基礎知識&&Omega範圍問題函式
- 初識建構函式函式
- ORACLE函式介紹第三篇 著名函式之聚合函式Oracle函式
- JavaScript學習筆記(七)—— 再說函式JavaScript筆記函式
- 溫故知新----再談建構函式 (轉)函式
- webgl內建函式--角度和三角函式Web函式
- 字串函式學習三字串函式
- 三角函式公式函式公式
- 前端基礎(三):函式前端函式
- angular 三大核心函式Angular函式
- Oracle 內建函式三Oracle函式
- C++再議建構函式及複製建構函式深度複製C++函式
- JS函式知識點梳理JS函式
- day-09-初識函式函式
- Golang字串函式認識(二)Golang字串函式