loadrunner測試登錄接口方法(帶sha1簽名算法參數)
最近測試了一個帶sha1簽名算法參數的php登錄接口,本來是用JAVA測試接口的,可是後來發現用JAVA寫的生成sha1碼和php生成的sha1碼有差別,網上去搜了下,發現好多人說了這個,試了各種方法也無果,因爲公司有C端,c++寫出來的算法是OK的,便想到Loadrunner也是可以測試接口,可以寫個方法打包成dll給LR調用,後來就請同事寫了個dll,裏面寫了兩個方法SortAndMergerArray和StrHas1
Action()
{
int t1;
char a[100]={0};
char *appid="fzmev52qll";
char b[1000]={0};
char c[1000]={0};
char noncestr[100]={0};
char *netid="3290";
char *netcard="123456";
char *scop1="api_cardlogin";
int n=0;
char field[6][100]={
"netbar_id=3290",
"netbar_card=123456",
"noncestr",
"oauth_appid=fzmev52qll",
"scop=api_cardlogin",
"timestamp"
};
//生成一個隨機字符串給接口參數noncestr使用
int itera_num1,rand_num1,i1;
char ran[24];
char StrTable1[]="abcdefghijklmnopqrstuvwxyz0123456789";
for (i1=0;i1<=30;i1++){
rand_num1=rand()%62;
strncat(ran,StrTable1+rand_num1,1);
//lr_output_message("當前是%s",ran);
}
lr_save_string(ran,"ran1");
lr_eval_string("{ran1}");
//把生成的隨機數替換數組第三個參數值
sprintf(noncestr, "%s%s", "noncestr=",ran);
sprintf(&field[2][0], "%s", noncestr);
//參數化字符串給登錄接口參數使用
lr_save_string(appid,"oauth_appid");
lr_eval_string("{oauth_appid}");
lr_save_string(netid,"netbar_id");
lr_eval_string("{netbar_id}");
lr_save_string(netcard,"netbar_card");
lr_eval_string("{netbar_card}");
lr_save_string(scop1,"scop");
lr_eval_string("{scop}");
/*
獲取當前時間戳給參數timestamp使用
*/
t1=time();//獲取當前系統時間
lr_save_int(t1,"time1");//將t1存成整形參數time1
sprintf(a,"timestamp=%d",t1);//將t1存進數組a
lr_output_message("當前時間是%s",lr_eval_string("{time1}"));
sprintf(&field[5][0], "%s", a);
//調用dll
lr_load_dll("E:\\VuGen Scripts\\SortAndMerger.dll");
for (n=0; n<6; n++)
{
lr_output_message("lsw Field[%d]=%s", n+1, &field[n][0]);
}
//調用dll方法對接口除簽名參數進行ascii碼排序排接後返回一個字符串
SortAndMergerArray(field,6,b,1000);
lr_output_message("b = %s",b);
//對排序後的生成的字符串加上私鑰
strcat(b,"&oauth_secret=!@$#%");
lr_output_message("b = %s",b);
//調用dll中的方法對加上私鑰的字符串進行sha1加密
StrHas1(b, c, sizeof(c));
lr_output_message("c = %s",c);
//sha1加密後保存爲一個參數給接口參數sign使用
lr_save_string(c,"sign");
lr_eval_string("{sign}");
web_reg_save_param("res1",
"LB=",
"RB=",
"Search=Body",
LAST);
web_reg_find("Search=Body",
"SaveCount=count",
"Text=user_id\":\"21390",
LAST);
web_submit_data("login",
"Action=*****************",
"Method=POST",
"RecContentType=application/json",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTTP",
ITEMDATA,
"Name=netbar_id","Value={netbar_id}", ENDITEM,
"Name=netbar_card","Value={netbar_card}", ENDITEM,
"Name=noncestr", "Value={ran1}", ENDITEM,
"Name=oauth_appid","Value={oauth_appid}", ENDITEM,
"Name=scop","Value={scop}", ENDITEM,
"Name=sign", "Value={sign}", ENDITEM,
"Name=timestamp", "Value={time1}", ENDITEM,
LAST);
lr_convert_string_encoding(lr_eval_string("{res1}"),"utf-8",NULL,"Res1");
if (atoi(lr_eval_string("{count}")) > 0){ //判斷如果Welcome字符串出現次數大於0
lr_output_message("測試------返回結果正確"); }//在日誌中輸出 測試------返回結果正確
else{ //如果出現次數小於等於
lr_error_message("測試------返回結果錯誤"); //在日誌中輸出測試------返回結果錯誤
return(0);
}
return 0;
}