LoadRunner函數詳解之web_submit_data

定義:處理無狀態或者上下文無關的表單提交。它用來生成表單的GET或POST請求,這些請求與Form自動生成的請求是一樣的,發送這些請求時不需要表單上下文。
函數形式:web_submit_data( const char *StepName, const char *Action, , ITEMDATA, , [ EXTRARES, ,] LAST );
這裏寫圖片描述

說明:

  • 當VuGen設爲基於URL的錄製模式,或者基於HTML的錄製方式時,但 Recording Options—HTML Advanced下的A script containing explicit URLs only選項被選中時,web_submmit_data函數纔會被錄製。

  • 不論採用URL查詢的方式(GET),還是採用請求體發送(POST)的方式,此函數都指示出Form中的數據是如何發送到服務器的。

  • 如果VuGen處於HTTP錄製模式下,此時記錄Web進程時,會產生此函數。在提交Form時,如果無法生成web_submit_form函數,VuGen也會生成web_submit_data函數。

  • 在錄製選項中,Toos—Recording Option下—Recording選項中,有一個Advanced HTML選項,可以設置是否錄製非HTML資源。只有選擇了“Record within the current script step”時,List of Resource Attributes纔會被錄製到。非HTML資源(如:gif和jpg等圖象文件)。

  • 任何對於“EncType”的指定都會覆蓋web_add_[auto_]header函數指定的Content-Type。當省略了“EncType”時,任何一個web_add_[auto_]header函數都會起作用。如果既沒有指定EncType也沒有web_add_[auto_]header函數,且“Method=POST”,“application/x-www-form-urlencoded”會作爲默認值來使用。其他情況下,不會產生Content-Type請求頭。

  • ContentType:文件類型標識符,如果“EncType”是“multipart/form-data”用來上傳文件時,需要用到“ContentType”。當在ITEMDATA中的Data子句中指定了“File=Yes”,且文件也在此子句中,ContentType才適用,此時它會作爲同一個子句的值來傳遞。正常情況下,“Content-Type”根據所上傳文件的擴展名自動生成。如:

7d025e2b16b064e\r\n Content–Disposition: form–data; name="uploaded_file"; filename="D:\\temp\\a.txt"\r\n Content–Type: text/plain\r\n \r\n
  • “ContentType”如果指定了空值,那麼“Content-Type”頭將不包含在文件中。如果沒有顯示的指定“ContentType”的值,當上傳的文件爲空時,不管文件擴展名是什麼,都默認使用“application/x-unknown-content-type”做爲”ContentType”的值。VuGen不會檢查指定的ContentType是否有效。

  • 通常情況下,如果錄製了web_submit_data函數,VuGen會把“name”和“value”一起錄製到ITEMDATA一節中。如果不想在腳本中以明文顯示“value”,可以對它進行加密。把“Value”改爲“EncryptedValue”,然後把錄製到的值改爲加密後的值。請參考web_submit_form中相關的內容。

示例1:一般的表單提交

web_submit_data("default.aspx", 
    "Action=http://lazarus/flightnet/default.aspx", 
    "Method=POST", 
    "TargetFrame=", 
    "RecContentType=text/html", 
    "Referer=http://lazarus/flightnet/", 
    "Snapshot=t7.inf", 
    "Mode=HTML", 
    ITEMDATA, 
    "Name=grpType", "Value=radRoundtrip", ENDITEM, 
    "Name=lstDepartingCity", "Value=DEN", ENDITEM, 
    "Name=lstDestinationCity", "Value=LAX", ENDITEM, 
    "Name=txtDepartureDate", "Value=8/19/2003", ENDITEM, 
    "Name=txtReturnDate", "Value=8/19/2003", ENDITEM, 
    "Name=txtQuantity", "Value=1", ENDITEM, 
    "Name=radClass", "Value=1", ENDITEM, 
    "Name=radSeat", "Value=1", ENDITEM, 
    "Name=btnAvailableFlights", "Value=Next >", ENDITEM, 
    LAST ); 

示例2:web_submit_data使用POST方法提交兩個文件

web_submit_data("Attachments", 
    "Action=http://[email protected]/Attachments?YY=45434", 
    "Method=POST", 
    "EncType=multipart/form–data", 
    "TargetFrame=", 
    "RecContentType=text/html", 
    "Referer=http:///[email protected]/Compose?YY=20435", 
    "Snapshot=t5.inf", 
    "Mode=HTML", 
    ITEMDATA, 
        "Name=userFile0", 
        "Value=E:\\sense_sensibility\\Elinor.htm", 
        "File=yes", 
        "ContentType=text/html", // Override default "text/plain" for .txt files 
        FilePath=Elinor.txt", 
        "ContentTransferEncoding=html/text", 
    ENDITEM, 
        "Name=userFile1", 
        "Value=E:\\sense_sensibility\\Marianne.jpg", 
        "File=yes", 
    ENDITEM, 
    LAST ); 

注:表單中enctype="multipart/form-data"的意思是設置表單的MIME編碼。默認情況,這個編碼格式是application/x-www-form-urlencoded,不能用於文件上傳;只有使用了multipart/form-data,才能完整的傳遞文件數據,進行下面的操作。
enctype="multipart/form-data"是上傳二進制數據; form裏面的input的值以2進制的方式傳過去。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章