web_custom_request方法可以發(fā)送POST和GET類型的請求
web_submit_data只能發(fā)送POST類型的請求
所有web_submit_data方法發(fā)送的請求都可以使用web_custom_request來實(shí)現(xiàn)
web_custom_request可以實(shí)現(xiàn)web_submit_data無法實(shí)現(xiàn)的請求瞧掺,
比如“查詢所有郵件并刪除”這個(gè)案例中竿痰,查詢時(shí)我們使用關(guān)聯(lián)把所有郵件對應(yīng)的標(biāo)識抓取成一個(gè)數(shù)組奋刽,如果使用web_submit_data來完成這 個(gè)刪除的請求诫欠,需要很多個(gè)web_submit_data請求才能完成,但使用web_custom_request就可以通過一個(gè)請求完成莱褒,方法是自己 寫代碼拼一個(gè)web_custom_request 方法POST請求的Body值击困。
web_submit_data請求中提交的數(shù)據(jù)是以這樣的方式存在的
“Name=屬性名稱,”,“Value=屬性值”
如:
[cpp]view plaincopy
“Name=locale”,?“Value=L2″,?ENDITEM,
“Name=dataCenter”,?“Value=yh”,?ENDITEM,
“Name=username”,?“Value=12044″,?ENDITEM,
如果我們想提交的某個(gè)屬性包含包含多個(gè)值(上文的例子中就是這樣的情況),它就無法處理了保礼,只能通過多個(gè)web_submit_data來處理沛励。
下面是一個(gè)典型的web_submit_data和web_custom_request請求,可以看到web_custom_request中提交的數(shù)據(jù)(body)是以這樣的方式存在的
“Body=屬性名稱=屬性值&屬性名稱=屬性值&……”
[cpp]view plaincopy
web_submit_data(“l(fā)ogin”,
“Action=http://192.168.14.21:78……ndex_sso.jsp”,
“Method=POST”,
“RecContentType=text/html”,
“Referer=http://192.168.14.21:7888…%3D%2Findex_sso.jsp”,
“Mode=HTML”,
ITEMDATA,
“Name=locale”,?“Value=L2″,?ENDITEM,
“Name=dataCenter”,?“Value=yh”,?ENDITEM,
“Name=username”,?“Value=12044″,?ENDITEM,
“Name=password”,?“Value=”,?ENDITEM,
“Name=_eventId”,?“Value=submit”,?ENDITEM,
“Name=isPureWeb”,?“Value=true”,?ENDITEM,
“Name=solutionName”,?“Value=eas”,?ENDITEM,
“Name=dbType”,?“Value=1″,?ENDITEM,
“Name=easSessionId”,?“Value=eas;yh;L2;12044;BaseDB”,?ENDITEM,
“Name=userAuthPattern”,?“Value=BaseDB”,?ENDITEM,
“Name=loginFlow”,?“Value=true”,?ENDITEM,
LAST);
web_custom_request(“CommonQueryDialog.jsf_3″,
“URL=http://192.168.14.21:7888/ea…ueryDialog.jsf”,
“Method=POST”,
“Resource=0″,
“RecContentType=text/javascript”,
“Referer=http://192.168.14.21:7888/…DailyLoanUERc%2Bihtml”,
“Mode=HTML”,
“EncType=application/x-www-form-urlencoded;charset=UTF-8″,
“Body=queryDialog%3AselectSolutionList=%E6%9F%A5%E8%AF%A2&queryDialog%3Aj_iduserFilterPanel_3_value=Kd5QoAEPEADgAAf8wKgEDMznrtQ%3D&=%E6%B9%96%E5%8D%97%E4%BA%9A%E5%8D%8E%E4%B9%B3%E4%B8%9A%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&queryDialog%3Aj_iduserFilterPanel_6=&queryDialog%3Aj_iduserFilterPanel_9_value=3&=%E5%A4%A7%E4%BA%8E%E7%AD%89%E4%BA%8E&queryDialog%3Aj_iduserFilterPanel_11=0&queryDialog%3Aj_iduserFilterPanel_14_value=&=&queryDialog%3Aj_iduserFilterPanel_17_value=&=&queryDialog%3Aj_iduserFilterPanel_20_value=&=&queryDialog%3Aj_iduserFilterPanel_23_value=&=&queryDialog%3Aj_iduserFilterPanel_26_value=&=&queryDialog%3Aj_iduserFilterPanel_29_value=&=&queryDialog%3Aj_iduserFilterPanel_32=&queryDialog%3Aj_iduserFilterPanel_35_value=&=&queryDialog%3Aj_iduserFilterPanel_38=2008-08-01&queryDialog%3Aj_iduserFilterPanel_41=2008-08-28&queryDialog%3AfilterGrid_modifiedData=%5B%5D&queryDialog%3AfilterGrid_removedData=%5B%5D&queryDialog%3A_postback=&queryDialog%3AuserFilterPanel=%2Fcp%2Fbc%2FdailyLoanBillCommQuery.xhtml&javax.faces.ViewState={vs2}”,
LAST);
通過我的觀察炮障,發(fā)現(xiàn)有兩種情況下的POST請求會(huì)被LoadRunner錄制為web_custom_request,
1.上文提到的批量提交多條同屬性名稱的數(shù)據(jù)的請求
2.header屬性x-requested-by值為XMLHttpRequest的POST請求
這兩種實(shí)現(xiàn)請求的方法還有一個(gè)需要注意的地方就是web_custom_request中body中的屬性值如果包含一些特殊字符目派,必須通過URL編碼,否則Web服務(wù)器會(huì)返回500錯(cuò)誤胁赢,一個(gè)典型的例子是如果Body中包含ViewState企蹭,ViewState中常常有“=”之類的特殊字符,此時(shí)必須通過URL編碼,LoadRuner中提供了一個(gè)這樣的編碼轉(zhuǎn)換函數(shù)
[cpp]view plaincopy
web_convert_param(“vs1″,?“SourceEncoding=HTML”,??“TargetEncoding=URL”,?LAST);
除LoadRunner外谅摄,你可以在Fiddler中按Ctrl+E來轉(zhuǎn)換
原網(wǎng)址:http://blog.csdn.net/Manchester117/article/details/7914632