1. 程式人生 > >利用loadrunner介面測試

利用loadrunner介面測試

/*指令碼說明:
指令碼名稱:
業務功能:
交易路徑:指令碼從哪個模組到哪個模組
開發協議:
開發時間:
作者:
引數化說明:
修改記錄:
修改時間:
修改人:
修改內容:
*/

Action()
{   //新增標頭檔案標識
    web_add_header ("apikey","a0736354b1d69377716d5f891b2deb93"); //引數位置是header
lr_start_transaction ("車票查詢");
    //獲取響應報文,放進s_respond中
web_reg_save_param ("S_respond","LB=","RB=",LAST);
    //新增檢查點
web_reg_find ("Text=\"ret\":true,",LAST);
//傳送報文
    /*web_url("www.abc.com", 
    "URL=http://apis.baidu.com/qunar/qunar_train_service/traindetail?&&version=1.0&&train=G101&&from=%E5%8C%97%E4%BA%AC%E5%8D%97&&to=E4%B8%8A%E6%B5%B7%E8%99%B9%E6%A1%A5&&date=2016-07-30", 
    "TargetFrame=", 
    "Resource=0", 
    "RecContentType=text/HTML", 
    "Snapshot=t1.inf", 
    "Mode=HTML",
    LAST ); //以HTML方式傳送*/
//傳送報文
web_submit_data("select", 
    "Action=http://apis.baidu.com/qunar/qunar_train_service/traindetail", 
    "Method=get", 
    "TargetFrame=", 
    "RecContentType=text/Json", //請求內容是json格式
    "Snapshot=t7.inf", 
    "Mode=HTML", //傳送方式是HTML
    ITEMDATA, //引數位置urlparam
    "Name=version", "Value=1.0", ENDITEM, 
    "Name=train", "Value=G101", ENDITEM, 
    "Name=from", "Value=%E5%8C%97%E4%BA%AC%E5%8D%97", ENDITEM,  //請求格式也是json,傳輸引數也是json格式,與上面一樣
    "Name=to", "Value=%E4%B8%8A%E6%B5%B7%E8%99%B9%E6%A1%A5", ENDITEM,  //傳輸引數也是json格式
    "Name=date", "Value=2016-07-30", ENDITEM, 
    LAST ); 
    //web_find ("Text=\"ret\":true",LAST);
    //對響應報文進行轉碼
    lr_convert_string_encoding ( lr_eval_string ("{S_respond}"),LR_ENC_UTF8 ,NULL,"zhuanma");
    //列印轉碼後的響應報文
lr_output_message ( "%s",lr_eval_string ("{zhuanma}"));
    lr_end_transaction ("車票查詢",LR_AUTO);
return 0;
}

根據API介面文件資料,

注意的是:引數位置,URL\header;請求方式,GET\POST;引數傳輸型別,JSON\HTML

函式說明:

1.web_reg_save_param ("S_respond","LB=","RB=",LAST); //列印響應報文,把響應報文儲存在第一個引數"S_respond",顯示出來;

2.web_add_header ("apikey","a0736354b1d69377716d5f891b2deb93");//引數位置是header,就用這個函式;

3.請求成功後對指令碼進行檢查,新增檢查點:

web_reg_find ("Text=\"ret\":true",LAST);

//檢查點,檢查點必須是唯一值,有雙引號,需要進行轉譯,如:\”\”(在每個雙引號左邊加一個斜槓直到所有引數變為藍色就行)

4.說明:

%_reg_% 這個是註冊函式,註冊函式在回放日誌中都是先有一個註冊成功,下面才是該內容,例如檢查函式:(Action.c(7): Registering web_reg_find was successful   [MsgId: MMSG-26390] 回放日誌內這個顯示註冊成功)、

(Action.c(24): Registered web_reg_find successful for "Text="ret":true," (count=1)   [MsgId: MMSG-26364])上面顯示註冊成功後這裡就顯示結果。

5.web_find();是檢查性的函式,不是註冊函式,直接放在請求函式web_submit_data();web_url();等後面就可以,但是一般都是使用註冊函式;

6.lr_convert_string_encoding (lr_eval_string("{S_respond}"),LR_ENC_UTF8,NULL,"zhuanma");

//轉換字元型別,把中文字串轉為NULL,不知道具體的型別就用NULL,它就會轉為預設的型別;

7.lr_output_message ("%s",lr_eval_string ("{zhuanma}"));

  //轉換後就要用這個函式輸出到LR視窗,lr_eval_string("{}")函式主要是返回指令碼中的一個引數當前的值。

8.lr_convert_string_encoding() 轉換字元型別的函式;

9.lr_eval_string(“{}”) 返回指令碼中的一個引數當前的值

對於自定義的變數,如果直接賦值,就直接使用變數名稱;如果使用了web_reg_save_param,就使用 lr_eval_string("{rtn}")

10.lr_output_message( const char *format, exp1, exp2,...expn.);

11.lr_output_message( “%s”, “字串”);  傳送資訊到輸出視窗或日誌檔案

指令碼說明:具體看指令碼事例!

"RecContentType=text/Json", //請求內容是json格式

"Mode=HTML", //傳送頁面資訊HTML

新增事務處理:

lr_start_transaction ("車票查詢");

lr_end_transaction ("車票查詢",LR_AUTO);

用關聯做檢查點:

 1.先新增關聯,

//{"ret":true,"data"

  web_reg_save_param ("S_respond","LB={\"ret\":","RB=,\"data\"",LAST);

2.新增if判斷,字串的匹配函式,stricmp()比較函式、strstr()字串匹配,

    if (strstr(lr_eval_string ("{S_respond}"),"ture")==NULL) {

      lr_end_transaction ("車站搜尋介面",LR_FAIL);

 }else{

      lr_end_transaction ("車站搜尋介面",LR_PASS);

}

說明:

1.不是所有的介面都能用一個函式,這個不行的就換一個函式;

2.返回結果是4開頭那麼就是請求發不對造成的,新增檢查點是對下面請求報文進行檢查,下面的日誌中檢查點的內容必須唯一;

Post請求:

web_custom_request("unifiedOrder.exe", 

"URL=http://222.222.120.75:808/webCash-core/webCash/pay/unifiedOrder",
"Method=POST",    //post請求方法
"RecContentType=application/json", //請求頭,資料互動方式json
"TargetFrame=",  
"Body={S_body}",  //body裡面直接放json串
LAST ); 

body裡面直接放json串或者把抓包放進去,引數中的引號"前需要加斜槓\轉譯”如:


http header設定:

Content-Type:application/json,請求頭,資料互動協議json

Accept:application/json;   //accept指返回的響應報文,客戶端或瀏覽器可以處理的請求型別有哪些。

jmeterpost介面測試body寫法:


jmeter中有些介面需要前一個介面的結果做引數,就要寫關聯用到正則表示式。

介面測試是為了看介面呼叫的正不正確,響應報文算是一種方式,介面可以寫斷言,用斷言結果和實際結果對比。下面是斷言截圖:(jmeter中斷言和lr中檢查點是一個意思吧!)