loadrunner獲取服務器返回的值,並作為下一個請求的參數


獲取服務器的返回值,可以用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","orderId 5接口的參數 {"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創建訂單的參數,獲取過來,賦值給tmpParam2 lr_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接口返回的參數,指定的參數,然后賦值給orderId web_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賦值給orderId lr_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; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM