lr获取选项列表值作为参数传入使用

1.代码如下:

click_add_revisions()
{

    lr_think_time(6);

    web_url("revision", 
        "URL=http://192.168.1.102:8000/reversion/revision/", 
        "Resource=0", 
        "RecContentType=text/html", 
        "Referer=http://192.168.1.102:8000/", 
        "Snapshot=t4.inf", 
        "Mode=HTML", 
        EXTRARES, 
        "Url=/static/xadmin/vendor/font-awesome/fonts/fontawesome-webfont.eot?", ENDITEM, 
        LAST);

    web_add_cookie("SRCHUID=V=2&GUID=01963DB195B14EEAB6B0128DE686964D&dmnchg=1; DOMAIN=c.urs.microsoft.com");

    web_add_cookie("SRCHD=AF=NOFORM; DOMAIN=c.urs.microsoft.com");

    web_add_cookie("SRCHUSR=DOB=20200831; DOMAIN=c.urs.microsoft.com");
    
    web_reg_save_param("addrevisionscsrfmiddlewaretoken","LB='csrfmiddlewaretoken' value='","RB=' />",LAST);   //定义声明添加版本csrtoken变量
    
    web_reg_save_param("selectusers","LB=<option value="","RB=">","ORD=All",LAST);   //定义声明用户选项变量,变量内容从下面的web_link中的响应内容中获取

    web_link("增加 Revision", 
        "Text=增加 Revision", 
        "Snapshot=t5.inf", 
        EXTRARES, 
        "Url=/static/xadmin/vendor/font-awesome/fonts/fontawesome-webfont.eot?", ENDITEM, 
        "Url=https://c.urs.microsoft.com/l1.dat?cw=637194112741176080&v=3&cv=9.11.17134.0&os=10.0.17134.0.0&pg=4A72F430-B40C-4D36-A068-CE33ADA5ADF9", "Referer=", ENDITEM, 
        LAST);

    web_set_sockets_option("SSL_VERSION", "TLS1.1");

    return 0;
}

  其中  web_reg_save_param("selectusers","LB=<option value="","RB=">","ORD=All",LAST);  为表示从web_link的响应中获取左边界为<option value=",右边界为">的所有内容,使用ORD=All 表示要获取所有内容,/“ 表示转义双引号;

2.调试

  1.在 return 0;代码前打断点

  2.Run-Time Settings->Log设置:

    勾选Enable logging

    选中Always send messages

    选中Extended log

    勾选Parameter substitution :勾选此项,则可以看到参数赋值变化

3.运行,可以看到参数的选项值如下:

click_add_revisions.c(27): Notify: Saving Parameter "selectusers_1 = 1".
click_add_revisions.c(27): Notify: Saving Parameter "selectusers_2 = 324".
click_add_revisions.c(27): Notify: Saving Parameter "selectusers_3 = 325".
click_add_revisions.c(27): Notify: Saving Parameter "selectusers_4 = 326".
click_add_revisions.c(27): Notify: Saving Parameter "selectusers_5 = 327".
click_add_revisions.c(27): Notify: Saving Parameter "selectusers_6 = 328".
click_add_revisions.c(27): Notify: Saving Parameter "selectusers_7 = 329".
click_add_revisions.c(27): Notify: Saving Parameter "selectusers_8 = 330".
click_add_revisions.c(27): Notify: Saving Parameter "selectusers_9 = 331".

  表示参数selectusers获取到9个值,每个值为等号后的内容

4.使用获取到的参数

4.1.使用lr自带的函数随机获取参数列表中的值:

使用函数lr_paramarr_random()函数,代码如下:

submit_revisions()
{
    char *preseluser,preseluseres[30];  //定义字符变量preseluser,用来表示预选用户,其中变量preseluseres作为preseluser的跳板,直接引用preseluser,就会成为一个常量
                                        //定义字符串变量preseluseres,字符串长度为30
    preseluser=lr_paramarr_random("selectusers");    //使用lr_paramarr_random函数随机获取selectusers列表中任意一项作为字符变量preseluser的值
    lr_output_message("preseluser=%s",preseluser);   //打印preseluser的值
    
    sprintf(preseluseres,"Value=%s",preseluser);  //使用sprintf函数,将"Value=%s"作为变量preseluseres的值
    lr_output_message("preseluseres=%s",preseluseres);   //打印preseluseres的值,验证preseluseres值是否正确,真正运行时可以把此行注释掉

    web_submit_data("add", 
        "Action=http://192.168.1.102:8000/reversion/revision/add/", 
        "Method=POST", 
        "EncType=multipart/form-data", 
        "RecContentType=text/html", 
        "Referer=http://192.168.1.102:8000/reversion/revision/add/", 
        "Snapshot=t6.inf", 
        "Mode=HTML", 
        ITEMDATA, 
        "Name=csrfmiddlewaretoken", "Value={addrevisionscsrfmiddlewaretoken}", ENDITEM, 
        "Name=csrfmiddlewaretoken", "Value={addrevisionscsrfmiddlewaretoken}", ENDITEM, 
        "Name=date_created_0", "Value={DateParame}", ENDITEM, 
        "Name=date_created_1", "Value={HourMinParam}", ENDITEM, 
        "Name=user", preseluseres, ENDITEM,    //引用preseluseres的值
        "Name=comment", "Value=123", ENDITEM, 
        "Name=version_set-TOTAL_FORMS", "Value=0", ENDITEM, 
        "Name=version_set-INITIAL_FORMS", "Value=0", ENDITEM, 
        "Name=version_set-MIN_NUM_FORMS", "Value=0", ENDITEM, 
        "Name=version_set-MAX_NUM_FORMS", "Value=1000", ENDITEM, 
        "Name=version_set-__prefix__-revision", "Value=", ENDITEM, 
        "Name=version_set-__prefix__-object_id", "Value=", ENDITEM, 
        "Name=version_set-__prefix__-content_type", "Value=", ENDITEM, 
        "Name=version_set-__prefix__-db", "Value=", ENDITEM, 
        "Name=version_set-__prefix__-format", "Value=", ENDITEM, 
        "Name=version_set-__prefix__-serialized_data", "Value=", ENDITEM, 
        "Name=version_set-__prefix__-object_repr", "Value=", ENDITEM, 
        "Name=version_set-__prefix__-id", "Value=", ENDITEM, 
        "Name=_save", "Value=", ENDITEM, 
        EXTRARES, 
        "Url=/static/xadmin/vendor/font-awesome/fonts/fontawesome-webfont.eot?", "Referer=http://192.168.1.102:8000/reversion/revision/", ENDITEM, 
        LAST);

    return 0;
}

  其中定义字符变量preseluser,来获取selectusers列表中的随机值,用字符变量preseluseres获取 “Value=%s”通过变量preseluser的拼接值,再使用preseluseres的值

  运行代码后,看添加结果是否正确即可(应该正确运行添加);

4.2. 不使用自带函数编写,代码如下:

char preseluseres[30];

submit_revisions()
{
    char *preseluser;  //定义字符变量preseluser,用来表示预选用户,其中变量preseluseres作为preseluser的跳板,直接引用preseluser,就会成为一个常量
                                        //定义字符串变量preseluseres,字符串长度为30
    char *preselusertwo,preselusertwoes[30]; 
    
//    char preseluserstr[30];  //定义字符变量preseluserstr,作为拼接后的赋值变量
    
    int selectuserscount;  //定义整型变量selectuserscount,用来获取参数{selectusers_count}的值
    int userrandnum=0;    //定义整型变量userrandnum,用来作为获取随机selectusers列表的下标值
    
    selectuserscount=atoi(lr_eval_string("{selectusers_count}"));  //使用lr_eval_string函数获取参数变量selectusers_count的值,然后用atoi函数将字符串转为整型数值,最后赋值给变量selectuserscount
    lr_output_message("selectuserscount=%d",selectuserscount);  //打印selectuserscount的值
    
    userrandnum=rand()%(selectuserscount)+1;  //从0到selectuserscount随机出一个数并将这个数加1赋值给变量userrandnum
    sprintf(preseluseres,"{selectusers_%d}",userrandnum);   //拼接获取得到selectusers_%d选项值,例如selectusers_2
    
    lr_output_message("第%d个用户:%s",userrandnum,lr_eval_string(preseluseres));  //打印随机获得的选项用户内容
    
    
    
                            
    /*preseluser=lr_paramarr_random("selectusers");    //使用lr_paramarr_random函数随机获取selectusers列表中任意一项作为字符变量preseluser的值
    preselusertwo = lr_paramarr_random("selectusers");   //随机获取selectusers列表中任意一项作为字符串变量preselusertwo的值
    lr_output_message("preseluser=%s",preseluser);   //打印preseluser的值
    lr_output_message("preselusertwo=%s",preselusertwo);   //打印preselusertwo的值
    
    while(1)
    {
        if(preselusertwo==preseluser)
        {
            preselusertwo = lr_paramarr_random("selectusers");  //重新随机获取值
            lr_output_message("preselusertwo=%s",preselusertwo);   //打印preselusertwo的值
        }
        else
            break;  //否则退出循环
    }
    
    
    sprintf(preseluseres,"Value=%s",preseluser);  //使用sprintf函数,将"Value=%s"作为变量preseluseres的值
    lr_output_message("preseluseres=%s",preseluseres);   //打印preseluseres的值,验证preseluseres值是否正确,真正运行时可以把此行注释掉
    */

    web_submit_data("add", 
        "Action=http://192.168.1.102:8000/reversion/revision/add/", 
        "Method=POST", 
        "EncType=multipart/form-data", 
        "RecContentType=text/html", 
        "Referer=http://192.168.1.102:8000/reversion/revision/add/", 
        "Snapshot=t6.inf", 
        "Mode=HTML", 
        ITEMDATA, 
        "Name=csrfmiddlewaretoken", "Value={addrevisionscsrfmiddlewaretoken}", ENDITEM, 
        "Name=csrfmiddlewaretoken", "Value={addrevisionscsrfmiddlewaretoken}", ENDITEM, 
        "Name=date_created_0", "Value={DateParame}", ENDITEM, 
        "Name=date_created_1", "Value={HourMinParam}", ENDITEM, 
        "Name=user", preseluseres, ENDITEM,    //引用preseluseres的值
        "Name=comment", "Value=123", ENDITEM, 
        "Name=version_set-TOTAL_FORMS", "Value=0", ENDITEM, 
        "Name=version_set-INITIAL_FORMS", "Value=0", ENDITEM, 
        "Name=version_set-MIN_NUM_FORMS", "Value=0", ENDITEM, 
        "Name=version_set-MAX_NUM_FORMS", "Value=1000", ENDITEM, 
        "Name=version_set-__prefix__-revision", "Value=", ENDITEM, 
        "Name=version_set-__prefix__-object_id", "Value=", ENDITEM, 
        "Name=version_set-__prefix__-content_type", "Value=", ENDITEM, 
        "Name=version_set-__prefix__-db", "Value=", ENDITEM, 
        "Name=version_set-__prefix__-format", "Value=", ENDITEM, 
        "Name=version_set-__prefix__-serialized_data", "Value=", ENDITEM, 
        "Name=version_set-__prefix__-object_repr", "Value=", ENDITEM, 
        "Name=version_set-__prefix__-id", "Value=", ENDITEM, 
        "Name=_save", "Value=", ENDITEM, 
        EXTRARES, 
        "Url=/static/xadmin/vendor/font-awesome/fonts/fontawesome-webfont.eot?", "Referer=http://192.168.1.102:8000/reversion/revision/", ENDITEM, 
        LAST);

    return 0;
}

用如下代码:

    int selectuserscount;  //定义整型变量selectuserscount,用来获取参数{selectusers_count}的值
    int userrandnum=0;    //定义整型变量userrandnum,用来作为获取随机selectusers列表的下标值
    
    selectuserscount=atoi(lr_eval_string("{selectusers_count}"));  //使用lr_eval_string函数获取参数变量selectusers_count的值,然后用atoi函数将字符串转为整型数值,最后赋值给变量selectuserscount
    lr_output_message("selectuserscount=%d",selectuserscount);  //打印selectuserscount的值
    
    userrandnum=rand()%(selectuserscount)+1;  //从0到selectuserscount随机出一个数并将这个数加1赋值给变量userrandnum
    sprintf(preseluseres,"{selectusers_%d}",userrandnum);   //拼接获取得到selectusers_%d选项值,例如selectusers_2
    
    lr_output_message("第%d个用户:%s",userrandnum,lr_eval_string(preseluseres));  //打印随机获得的选项用户内容

替换如下代码:

preseluser=lr_paramarr_random("selectusers");    //使用lr_paramarr_random函数随机获取selectusers列表中任意一项作为字符变量preseluser的值
lr_output_message("preseluser=%s",preseluser);   //打印preseluser的值
sprintf(preseluseres,"Value=%s",preseluser);  //使用sprintf函数,将"Value=%s"作为变量preseluseres的值
    lr_output_message("preseluseres=%s",preseluseres);   //打印preseluseres的值,验证preseluseres值是否正确,真正运行时可以把此行注释掉

实际上就是将随机生成数据的过程通过自定义的方式而不是系统自带的lr_paramarr_random函数来生成.

建议:一般建议使用系统自带函数生成,不然会多谢很多代码,好处是:可以按照自己的方式打印输出随机到的内容

原文地址:https://www.cnblogs.com/jingzaixin/p/13628308.html