性能测试工具 loadrunner 测试登录接口方法 (带 sha1 签名算法参数)

Sorin · 2018年04月06日 · 916 次阅读

最近测试了一个带 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;
}
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册