利用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中檢查點是一個意思吧!)