1. 程式人生 > 實用技巧 >LoadRunner 實現token的解析與認證

LoadRunner 實現token的解析與認證

問題描述:

1、當前系統通過token實現系統安全驗證,登入成功後,token被儲存在返回體中(reaponse body),後續伺服器請求時,需要將該token新增到請求頭部(request header)中;
2、當前web服務訪問時,強制限制必須適應谷歌瀏覽器;
3、Lr錄製指令碼時,需要通過代理的方式錄製,但錄製結果回放時,總是提示錯誤:

Error -26630: HTTP Status-Code=401 (Unauthorized) for ***;

##解決辦法:
1、開啟錄製的指令碼,預設為指令碼[Script]模式,需要切換到樹[Tree]檢視;

2、在左側列表彙總找到系統登入請求[login]步驟,在右側找到[Response Body]步驟,返回資料為json格式,如下:

{
“code” : 200,
“message” : “操作成功”,
“name”:admin,
“token”:“3E78453A8B17F3A4EBA1B19D7F4D22D4-NKifP2w4mhXI9vl1YZynupr”
}

3、選擇[token]的值域內容,右鍵選擇[Create Parameter];切換到[Script]檢視,看到如下Lr新增內容:

//Correlation comment - Do not change!Original value='3E78453A8B17F3A4EBA1B19D7F4D22D4-NKifP2w4mhXI9vl1YZynupr' Name ='CorrelationParameter_1'
// Lr自動新增的引數解析演算法
web_reg_save_param_ex(
	"ParamName=CorrelationParameter_1",
	"LB=\"",
	"RB=\",",
	SEARCH_FILTERS,
	"Scope=Body",
	"RequestUrl=*/login*",
	LAST);
	
// 修訂[token]解析演算法:
// 按照預設Lr解析[token]的演算法,無法獲取到真正的token,需要修訂如下:
web_reg_save_param_ex(
	"ParamName=my_token", // 修改引數名,便於記憶
	"LB=\"token\":\"", // 修改 token 值解析演算法
	"RB=\",",
	SEARCH_FILTERS,
	"Scope=Body",
	"RequestUrl=*/login*",
	LAST);

// 登入模組-此部分為Lr自動生成部分,不需要修改;
web_custom_request("login",
	"URL=http://192.168.0.1:8080/test/login",
	"Method=POST",
	"Resource=0",
	"RecContentType=application/json",
	"Referer=http://192.168.0.1:8080/test/index.html",
	"Snapshot=t6.inf",
	"Mode=HTML",
	"EncType=application/json",
	"Body={\"userName\":\"admin\",\"password\":\"123456\"}",
	LAST);

// 新增:將解析出的 token 自動新增在每一個後續請求的頭部(request header):
web_add_auto_header("Authorization", "{my_token}"); 		

// 後續的web請求,自動新增token認證:
web_url(***);
web_submit_data(***);
//Correlation comment - Do not change!Original value='3E78453A8B17F3A4EBA1B19D7F4D22D4-NKifP2w4mhXI9vl1YZynupr' Name ='CorrelationParameter_1'
// Lr自動新增的引數解析演算法
web_reg_save_param_ex(
"ParamName=CorrelationParameter_1",
"LB=\"",
"RB=\",",
SEARCH_FILTERS,
"Scope=Body",
"RequestUrl=*/login*",
LAST);

// 修訂[token]解析演算法:
// 按照預設Lr解析[token]的演算法,無法獲取到真正的token,需要修訂如下:
web_reg_save_param_ex(
"ParamName=my_token", // 修改引數名,便於記憶
"LB=\"token\":\"", // 修改 token 值解析演算法
"RB=\",",
SEARCH_FILTERS,
"Scope=Body",
"RequestUrl=*/login*",
LAST);

// 登入模組-此部分為Lr自動生成部分,不需要修改;
web_custom_request("login",
"URL=http://192.168.0.1:8080/test/login",
"Method=POST",
"Resource=0",
"RecContentType=application/json",
"Referer=http://192.168.0.1:8080/test/index.html",
"Snapshot=t6.inf",
"Mode=HTML",
"EncType=application/json",
"Body={\"userName\":\"admin\",\"password\":\"123456\"}",
LAST);

// 新增:將解析出的 token 自動新增在每一個後續請求的頭部(request header):
web_add_auto_header("Authorization", "{my_token}");

// 後續的web請求,自動新增token認證:
web_url(***);
web_submit_data(***);

至此完成token解析與認證。

參考:

https://www.cnblogs.com/amy7758/p/5639006.html