loadrunner socket协议问题归纳(5)
獲取服務器的返回值,可以用web_reg_save_param函數,該參數最好放到:
語法:
int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);?
參數說明:
o ParamName: 存放得到的動態內容的參數名稱o list of Attributes: 其它屬性,包括:Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, SaveLen。屬性值不分大小寫o Notfound: 當在返回信息中找不到要找的內容時應該怎么處理o Notfound=error: 當在返回信息中找不到要找的內容時,發出一個錯誤訊息。這是缺省值。o Notfound=warning: 當在返回信息中找不到要找的內容時,只發出警告,腳本也會繼續執行下去不會中斷。o LB( Left Boundary ) : 返回信息的左邊界字串。該屬性必須有,并且區分大小寫。o RB( Right Boundary ): 返回信息的右邊界字串。該屬性必須有,并且區分大小寫。o RelFrameID: 相對于URL而言,欲查找的網頁的Frame。此屬性質可以是All或是數字,該屬性可有可無。o Search : 返回信息的查找范圍。可以是Headers,Body,Noresource,All(缺省)。該屬性質可有可無。o ORD : 說明第幾次出現的左邊界子串的匹配項才是需要的內容。該屬性可有可無,缺省值是1。如為All,則將所有找到的內容儲存起來。o SaveOffset : 當找到匹配項后,從第幾個字元開始存儲到參數中。該屬性不能為負數,缺省值為0。o SaveLen :當找到匹配項后,偏移量之后的幾個字元存儲到參數中。缺省值是-1,表示一直到結尾的整個字串都存入參數。?要獲取返回值,那么有2種方法:
第一種方法是通過?SaveOffset?來獲取指定的值,這個方法適用于返回的值或是格式比較固定,不會有什么變動,比如有些接口,返回1,表示已經響應成功,那么可以用這個方法來獲取。或是返回來的字段順序都不變,都可以使用該方法。但是當返回值的順序有變,而我們要取指定的字段值時,就不適用了,在第二種方法再描述。
第一個接口請求后,服務器返回值:
{"orderId":"9854578067073400832","message":"創建訂單成功","status":100}?
因為返回的數據格式比較固定,數據的順序很少變化,那么可以用如下的函數來獲取:
web_reg_save_param("orderId","LB=","RB=","ORD=1","SaveOffset=1","SaveLen=31", //獲取運行結果里的orderId "orderId":"9854578067073400832""Search=Body",LAST);這種方法不是很靈活,很容易報錯,當返回值有變動時或是返回值的順序有變動,必須要重新修改,否則運行還是會報錯。用第二種方法,通過取返回值的邊界值,達到目的:
web_reg_save_param("orderId","LB=orderId","RB=message","ORD=1","SaveLen=23","Search=Body",LAST);?
會發現"SaveLen"取的值不一樣,因為第一種方法取的值是"orderId":"9854578067073400832",第二種方法,取的值是":"9854578067073400832"
這里只需要傳的參數修改一下就可以了,如我在用第一種方法時,用如下的參數:
{"account":"13900001111","posId":"N9NL10255029","couponMoney":0,"couponInfo":"","payMoney":0.01,"barcode":"130122475934385558","channelId":"WX",?
如果用第二種方法,用如下的參數:
{"account":"13900001111","posId":"N9NL10255029","couponMoney":0,"couponInfo":"","payMoney":0.01,"barcode":"130122475934385558","channelId":"WX","orderId?
取得返回值,用如下的數據進行拼接: ?
lr_save_string(lr_eval_string("{NewParam}{orderId}}"),"orderId2");?
?
因為代碼里面的4接口是業務的一個部分,但在測試接口的時候,可以不用管,所以只是放在代碼里面盡可能的模擬業務而已,實際在本代碼中,沒有什么用處,是5接口創建訂單號orderId給第18接口,并作為第18個接口的參數進行請求,完整的代碼如下:
Action() { /*18接口的參數
{"account":"13900001111","posId":"N9NL10255029","couponMoney":0,"couponInfo":"","payMoney":0.01,"barcode":"130122475934385558","channelId":"WX", {"account":"13900001111","posId":"N9NL10255029","couponMoney":0,"couponInfo":"","payMoney":0.01,"barcode":"130122475934385558","channelId":"WX","orderId5接口的參數 {"account": 13900001111,"payMoney":0.01}
4接口的參數 {"account": 13900001111} *///18掃描支付接口的前半部分參數char * tmpParam = lr_eval_string("{NewParam}");//5創建訂單接口的參數char * tmpParam2 = lr_eval_string("{NewParam_2}");//4獲取商戶開通支付方式char * tmpParam3 = lr_eval_string("{NewParam_1}");web_set_proxy("10.16.1.151:180"); //設置請求頭,沒有這個,請求會不認得 web_custom_request該函數的json請求web_add_header("content-type","application/json");lr_save_string(lr_eval_string("{NewParam_1}"),"tmpParam3");web_custom_request("4","URL=http://10.16.1.151:180/getMerchantPayType","Body={tmpParam3}","Method=POST","mode=HTML",LAST);web_add_header("content-type","application/json"); //把5創建訂單的參數,獲取過來,賦值給tmpParam2lr_save_string(lr_eval_string("{NewParam_2}"),"tmpParam2");//獲取5接口返回的參數,指定的參數SaveOffset=31,然后賦值給orderId /*web_reg_save_param("orderId","LB=","RB=","ORD=1","SaveOffset=1",//獲取運行結果里的orderId 45"SaveLen=31","Search=Body",LAST); */ //獲取5接口返回的參數,指定的參數,然后賦值給orderIdweb_reg_save_param("orderId","LB=orderId","RB=message","ORD=1","SaveLen=23","Search=Body",LAST);//5接口創建訂單,向服務器請求 web_custom_request("5","URL=http://10.16.1.151:180/onlineOrder","Body={tmpParam2}","Method=POST","mode=HTML",LAST);
//返回的參數 {"orderId":"9854578277036064768","message":"創建訂單成功","status":100}
//獲取5接口返回的參數orderId賦值給orderIdlr_save_string(lr_eval_string("{orderId}"),"orderId");//打印獲取服務器回復指定的參數lr_output_message(lr_eval_string("{orderId}"));//參數并接,賦值給orderId2,作為18掃描支付接口的參數 會發現這里有2個},參數里面因為少了一個},所以在參數后面補充}lr_save_string(lr_eval_string("{NewParam}{orderId}}"),"orderId2");lr_output_message(lr_eval_string("===========:{orderId2}"));web_add_header("content-type","application/json");//掃描支付接口請求web_custom_request("18","URL=http://10.16.1.151:180/scanPay","Body={orderId2}","Method=POST","mode=HTML",LAST);return 0; }
轉載于:https://www.cnblogs.com/VseYoung/p/loadrunner_5.html
總結
以上是生活随笔為你收集整理的loadrunner socket协议问题归纳(5)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单用户登录
- 下一篇: CentOS6.5 缺少 libstdc