loadrunner測試登錄接口方法(帶sha1簽名算法參數)

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章