精华内容
下载资源
问答
  • LR 关联函数的边界值可以为参数

    千次阅读 2014-04-23 16:51:09
    参数可以作为关联函数的边界值,如此,,非常方便查找一些新建的值,并且可以同步处理新建立的数据,因此也tong

    参数可以作为关联函数的边界值,有如下好处:

    1)非常方便查找一些新建的值,并且可以同步处理新建立的数据

    2)在controller中并发时,解决了数据不同步问题,可以让每个虚拟并发用户只处理自己的数据,不会出现两个虚拟用户抢到一个数据从而报错的情况

    -----------------------------------------

    新建一个数据的脚本:注意 {flowname} 参数

    Action()
    {
      lr_save_string("192.168.10.108:8080","IP");


    web_url("{IP}",
    "URL=http://{IP}/",
    "TargetFrame=",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=",
    "Snapshot=t3.inf",
    "Mode=HTML",
    EXTRARES,
    "URL=/Public/js/jquery-1.11.0.min.js", "Referer=http://{IP}/login/index", ENDITEM,
    "URL=/Public/font/fontawesome-webfont.eot?", "Referer=http://{IP}/login/index", ENDITEM,
    "URL=/Public/img/back.jpg", "Referer=http://{IP}/login/index", ENDITEM,
    LAST);


    lr_think_time(3);


    lr_start_transaction("login");


    web_submit_data("check_login",
    "Action=http://{IP}/login/check_login",
    "Method=POST",
    "TargetFrame=",
    "RecContentType=text/html",
    "Referer=http://{IP}/login/index",
    "Snapshot=t5.inf",
    "Mode=HTML",
    ITEMDATA,
    "Name=emp_no", "Value=admin", ENDITEM,
    "Name=password", "Value=123456", ENDITEM,
    LAST);


    web_find("web_find",
    "What=登录成功!",
    LAST);


    web_url("index",
    "URL=http://{IP}/index/index",
    "TargetFrame=",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=http://{IP}/login/check_login",
    "Snapshot=t7.inf",
    "Mode=HTML",
    LAST);


    lr_end_transaction("login", LR_AUTO);




    lr_think_time(3);


    lr_start_transaction("新建流程");


    /*点击流程*/


    // web_add_cookie("Hm_lpvt_2a935166b0c9b73fef3c8bae58b95fe4=1397875109; DOMAIN=192.168.10.108");
    /*
    web_custom_request("server",
    "URL=http://{IP}/push/server",
    "Method=POST",
    "TargetFrame=",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=http://{IP}/push/client",
    "Snapshot=t8.inf",
    "Mode=HTML",
    "EncType=application/x-www-form-urlencoded; charset=UTF-8",
    "Body=&ajax=1",
    LAST);
    */
    /*点击新建*/


    // web_add_cookie("current_node=144; DOMAIN=192.168.10.108");




    web_url("index_2",
    "URL=http://{IP}/flow/index",
    "TargetFrame=",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=http://{IP}/home/index",
    "Snapshot=t9.inf",
    "Mode=HTML",
    LAST);


    /*选择流程*/


    // web_add_cookie("ace.settings=%7B%22sidebar-collapsed%22%3A-1%7D; DOMAIN=192.168.10.108");


    // web_add_cookie("Hm_lpvt_2a935166b0c9b73fef3c8bae58b95fe4=1397875145; DOMAIN=192.168.10.108");


    // web_add_cookie("return_url=http%3A//192.168.10.108%3A8080/flow/index; DOMAIN=192.168.10.108");


    // lr_think_time(12);


    web_url("27",
    "URL=http://{IP}/flow/add/type/27",
    "TargetFrame=",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=http://{IP}/flow/index",
    "Snapshot=t12.inf",
    "Mode=HTML",
    // EXTRARES,
    // "URL=/Public/editor/themes/default/default.css", ENDITEM,
    // "URL=/Public/editor/themes/default/default.png", ENDITEM,
    LAST);




    // lr_think_time(3);
    /*点击提交*/


    // lr_think_time(12);


    web_submit_data("save",
    "Action=http://{IP}/flow/save",
    "Method=POST",
    "EncType=multipart/form-data",
    "TargetFrame=",
    "RecContentType=text/html",
    "Referer=http://{IP}/flow/add/type/27",
    "Snapshot=t19.inf",
    "Mode=HTML",
    ITEMDATA,
    "Name=ajax", "Value=0", ENDITEM,
    "Name=add_file", "Value=", ENDITEM,
    "Name=type", "Value=27", ENDITEM,
    "Name=opmode", "Value=add", ENDITEM,
    "Name=confirm", "Value=emp_3002|", ENDITEM,
    "Name=confirm_name", "Value=\r\n"
    "\t\t\t\t<span id=\"emp_3002\" data=\"emp_3002\"><nobr><b title=\"经理3002/经理<>\">经理3002/经理&lt;&gt;</b></nobr></span>\t\t\t", ENDITEM,
    "Name=consult", "Value=emp_3001|emp_3002|emp_2002|emp_3001|", ENDITEM,
    "Name=consult_name", "Value=\r\n"
    "\t\t\t\t<span id=\"emp_3001\" data=\"emp_3001\"><nobr><b title=\"经理3001/经理<>\">经理3001/经理&lt;&gt;</b></nobr><b><i class=\"icon-arrow-right\"></i></b><b><i class=\"icon-arrow-right\"></i></b><b><i class=\"icon-arrow-right\"></i></b></span><span id=\"emp_3002\" data=\"emp_3002\"><nobr><b title=\"经理3002/经理<>\">经理3002/经理&lt;&gt;</b></nobr><b><i class=\"icon-arrow-right\"></i></b><b><i class=\"icon-arrow-right\"></i></b></span><span id=\"emp_2002\" data=\"emp_2002\"><nobr><b title=\"总监2002/总监<>\">总监2002/总监&lt;&gt;</b></nobr><b><i class=\"icon-arrow-right\"></i></b></span><span id=\"emp_3001\" data=\"emp_3001\"><nobr><b title=\"经理3001/经理<>\">经理3001/经理&lt;&gt;</b></nobr></span>\t\t\t", ENDITEM,
    "Name=refer", "Value=", ENDITEM,
    "Name=refer_name", "Value=\r\n"
    "\t\t\t\t\t\t\t", ENDITEM,
    "Name=step", "Value=20", ENDITEM,
    "Name=name", "Value=flow{flowname}", ENDITEM,
    "Name=content", "Value=性能测试流程-group2", ENDITEM,
    LAST);


    web_find("web_find",
    "What=新增成功!",
    LAST);


    web_url("跳转",
    "URL=http://{IP}/flow/index",
    "TargetFrame=",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=http://{IP}/flow/save",
    "Snapshot=t20.inf",
    "Mode=HTML",
    LAST);


    lr_end_transaction("新建流程", LR_AUTO);




    /*logout*/


    lr_think_time(3);


    web_url("logout", 
    "URL=http://{IP}/login/logout", 
    "TargetFrame=", 
    "Resource=0", 
    "RecContentType=text/html", 
    "Referer=http://{IP}/flow/index", 
    "Snapshot=t22.inf", 
    "Mode=HTML", 
    LAST);


    return 0;
    }

    -------------------

    数据建立成功后,用该参数作为关联函数的边界值来取同一个数据进行下一步处理:


    Action2()
    {


    lr_save_string("192.168.10.108:8080","IP");


    web_url("{IP}",
    "URL=http://{IP}/",
    "TargetFrame=",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=",
    "Snapshot=t3.inf",
    "Mode=HTML",
    EXTRARES,
    "URL=/Public/js/jquery-1.11.0.min.js", "Referer=http://{IP}/login/index", ENDITEM,
    "URL=/Public/font/fontawesome-webfont.eot?", "Referer=http://{IP}/login/index", ENDITEM,
    "URL=/Public/img/back.jpg", "Referer=http://{IP}/login/index", ENDITEM,
    LAST);


    // web_add_cookie("Hm_lvt_2a935166b0c9b73fef3c8bae58b95fe4=1397875058,1397875084; DOMAIN=192.168.10.108");


    // web_add_cookie("Hm_lpvt_2a935166b0c9b73fef3c8bae58b95fe4=1397875084; DOMAIN=192.168.10.108");


    lr_think_time(3);


    lr_start_transaction("login");


    web_submit_data("check_login",
    "Action=http://{IP}/login/check_login",
    "Method=POST",
    "TargetFrame=",
    "RecContentType=text/html",
    "Referer=http://{IP}/login/index",
    "Snapshot=t5.inf",
    "Mode=HTML",
    ITEMDATA,
    "Name=emp_no", "Value=3002", ENDITEM,
    "Name=password", "Value=123456", ENDITEM,
    LAST);


    web_find("web_find",
    "What=登录成功!",
    LAST);


    web_url("index",
    "URL=http://{IP}/index/index",
    "TargetFrame=",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=http://{IP}/login/check_login",
    "Snapshot=t7.inf",
    "Mode=HTML",
    LAST);


    lr_end_transaction("login", LR_AUTO);


    web_set_max_html_param_len("1024");


    lr_think_time(3);


    lr_start_transaction("checkflow");


    // web_add_cookie("Hm_lpvt_2a935166b0c9b73fef3c8bae58b95fe4=1397877445; DOMAIN=192.168.10.108");
    /*
    web_custom_request("server",
    "URL=http://{IP}/push/server",
    "Method=POST",
    "TargetFrame=",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=http://{IP}/push/client",
    "Snapshot=t8.inf",
    "Mode=HTML",
    "EncType=application/x-www-form-urlencoded; charset=UTF-8",
    "Body=&ajax=1",
    EXTRARES,
    // "URL=http://hm.baidu.com/hm.gif?cc=1&ck=1&cl=24-bit&ds=1366x768&ep=48329%2C3877&et=3&fl=11.6&ja=1&ln=zh-cn&lo=0&lt=1397877429&nv=0&rnd=2018131183&si=2a935166b0c9b73fef3c8bae58b95fe4&st=4&su=http%3A%2F%2F192.168.10.108%3A8080%2Flogin%2Fcheck_login&v=1.0.57&lv=3", "Referer=http://{IP}/home/index", ENDITEM,
    LAST);
    */
    /*点击流程*/


    /*点击待审批*/


    // web_add_cookie("current_node=147; DOMAIN=192.168.10.108");




    web_reg_save_param("flow_id",
    "LB=/flow/read/id/",
    "RB=\">flow{flowname}",
    "Ord=ALL",
    "Search=Body",
     //     "NotFound=WARNING",
    LAST);






    web_url("confirm",
    "URL=http://{IP}/flow/folder/fid/confirm",
    "TargetFrame=",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=http://{IP}/home/index",
    "Snapshot=t9.inf",
    "Mode=HTML",
    LAST);


    if(0==atoi(lr_eval_string("{flow_id_count}"))) {


    lr_output_message("There is no flow to check : %s", lr_eval_string("The flow_id_count: {flow_id_count}"));




    }


    else {


    lr_save_string( lr_paramarr_random("flow_id"), "flow_random" );
    // web_add_cookie("Hm_lpvt_2a935166b0c9b73fef3c8bae58b95fe4=1397877495; DOMAIN=192.168.10.108");


    // web_add_cookie("return_url=http%3A//192.168.10.108%3A8080/flow/folder/fid/confirm; DOMAIN=192.168.10.108");


    /*选择一个流程*/




    lr_output_message("There flow_id_count  %s-------------------------------------", lr_eval_string("is: {flow_id_count}"));


    lr_output_message("There flow_random  %s-------------------------------------", lr_eval_string("is: {flow_random}"));


    web_url("{flow_random}",//初始值=131
    "URL=http://{IP}/flow/read/id/{flow_random}",
    "TargetFrame=",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=http://{IP}/flow/folder/fid/confirm",
    "Snapshot=t13.inf",
    "Mode=HTML",
    EXTRARES,
    "URL=/Public/editor/themes/default/default.css", ENDITEM,
    "URL=/Public/editor/themes/default/default.png", ENDITEM,
    LAST);


    // web_add_cookie("Hm_lpvt_2a935166b0c9b73fef3c8bae58b95fe4=1397877513; DOMAIN=192.168.10.108");




    /*点击同意*/


    // web_add_cookie("return_url=/flow/read/id/131; DOMAIN=192.168.10.108");




    web_reg_find("Search=Body",
    "SaveCount=check_count",
    "Text=操作成功",
    LAST);


    web_submit_data("approve",
    "Action=http://{IP}/flow/mark/action/approve",
    "Method=POST",
    "TargetFrame=",
    "RecContentType=text/html",
    "Referer=http://{IP}/flow/read/id/{flow_random}",
    "Snapshot=t16.inf",
    "Mode=HTML",
    ITEMDATA,
    "Name=id", "Value=155", ENDITEM,
    "Name=flow_id", "Value={flow_random}", ENDITEM,
    "Name=step", "Value=21", ENDITEM,
    "Name=comment", "Value=", ENDITEM,
    LAST);






    web_url("跳转",
    "URL=http://{IP}/flow/read/id/{flow_random}",
    "TargetFrame=",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=http://{IP}/flow/mark/action/approve",
    "Snapshot=t17.inf",
    "Mode=HTML",
    LAST);


    lr_end_transaction("checkflow", LR_AUTO);


    }//else


    /*logout*/


    lr_think_time(3);


    web_url("logout", 
    "URL=http://{IP}/login/logout", 
    "TargetFrame=", 
    "Resource=0", 
    "RecContentType=text/html", 
    "Referer=http://{IP}/flow/index", 
    "Snapshot=t22.inf", 
    "Mode=HTML", 
    LAST);




    return 0;
    }


    展开全文
  • LR性能测试关联函数

    2018-12-27 20:27:40
    关联函数放在(需要该关联数据)请求的前面。 web_reg_save_param("param_name", "LB=name=\"verify\" value=\"", "RB=\" /&gt;, LAST);

    关联函数放在(需要该关联数据)请求的前面。

    web_reg_save_param("param_name",

    "LB=name=\"verify\" value=\"",

    "RB=\" />,

    LAST);

    展开全文
  • LR中的关联函数的使用

    千次阅读 2019-06-13 10:36:31
    何时使用关联函数:在回放脚本失败时,查看失败原因是由客户端和服务会话机制产生的 在回放脚本失败时,录制一个相同的脚本进行对比(使用lr自带的网站进行登录录制): 客户发送访问服务器的请求,服务器通过...

    何时使用关联函数:在回放脚本失败时,查看失败原因是由客户端和服务会话机制产生的

    在回放脚本失败时,录制一个相同的脚本进行对比(使用lr自带的网站进行登录录制):

    客户发送访问服务器的请求,服务器通过验证客户名称和密码,如果验证通过,那么服务器会发送一个允许访问的会话指令,这个会话指令每次都不一样,所以我们在回放脚本的时候是固定的,从而导致登录失败,故我们要先在服务器响应机制里面找到会话的值,然后把会话的值放在产生变量值的方法的前面

    首先打开vu中的拓展日志:

    进行回放脚本(也可在前端页面中查看HTML找到session):

    设置关联函数:

    参数的设置:

    插入关联函数:

    重新运行脚本后就可以正确运行

    展开全文
  • Loadrunner脚本中进行关联的时候,用到了一些函数,作用是把字符串保存到参数中,并且在需要的时候检索出来。C Vusers中用到的函数有: lr_eval_string 所有出现参数的地方用它的当前值来代替。 lr_save_string 把...

      Loadrunner脚本中进行关联的时候,用到了一些函数,作用是把字符串保存到参数中,并且在需要的时候检索出来。C Vusers中用到的函数有:
     
      lr_eval_string  所有出现参数的地方用它的当前值来代替。
     
      lr_save_string   把null-terminated字符串保存到参数中。其中,null-terminated的意思,我从网上查了下是:"以空字符为结束标志的字符串",也就是以"\0"结束的字符串,其中的0是ASCII码的0,是不能用显示字符表示出来的,只有用转义字符表示了。
     
      lr_save_var 把变长字符串保存到参数中。
     
      下面再来看下每个函数的具体解释(参考帮助):
     

    lr_eval_string:

    C Language

    char * lr_eval_string (const char * instring );

      返回内嵌参数赋值后的字符串。
     
      instring: 需要赋值的字符串。
     
      lr_eval_string函数返回任何内嵌参数赋值后的输入字符串。如果字符串变量只包含一个参数,函数返回参数的当前值。
     
      内嵌参数必须在括号中。
     
      注:lr_eval_string是内部地分配内存。在每一次迭代之后会释放。如果你在循环中给参数赋值,不要使用lr_eval_string保存内存。你需要使用lr_eval_string_ext,并且在每个循环迭代中使用lr_eval_string_ext_free释放内存。
     
      这里我再补充一下:lr_eval_string_ext 在关联的数据是二进制数据,例如,数据包含嵌入的NULL字符时是非常有用的。
     
      例子:下面的例子使用lr_eval_string来代替参数row_cnt的当前值。使用lr_output_message把这个值输出到输出窗口。

     lrd_stmt(Csr1, "select count(*) from employee", -1, 1 /*Deferred*/, 2 /*Ora V7*/, 0);

    lrd_bind_col(Csr1, 1, &COUNT_D1, 0, 0);

    lrd_exec(Csr1, 0, 0, 0, 0, 0);

    lrd_save_col(Csr1, 1, 1, 0, "row_cnt");

    lrd_fetch(Csr1, 1, 1, 0, PrintRow2, 0);

    lr_output_message("value : %s",

           lr_eval_string("The row count is: {row_cnt}"));

    lr_save_string:

    C Language

    int lr_save_string (const char *param_value, const char *param_name);

      param_value:给参数赋值的值,参数值
     
      param_name:参数名称
     
      lr_save_string函数把指定的以空结束的字符串赋值给参数。这个函数在关联查询的时候非常有用。需要使用lr_eval_string来确定参数的值。
     
      例子:

     

    在下面的例子中,lr_save_string给参数emp_id赋值为777.然后这个参数被用在另一个查询中。

     lrd_stmt(Csr1, "select id from employees where name='John'", ...);

    lrd_bind_col(Csr1,1,&ID_D1,...);

    lrd_exec(Csr1, ...);

    lrd_fetch(Csr1, 1, ...);


       ID_D1
     
    0
     777 
     
    lr_save_string("777", "emp_id");

    lrd_stmt(Csr1,"select salary from payment where id ='{emp_id}'",...);

    lrd_exec(Csr1, 0, 0, 0, 0, 0);

    lr_save_var

    C Language

    int lr_save_var (const char * param_value, unsigned long const value_len, unsigned long const options, const char * param_name);

      param_value:参数值
     
      value_len:值的字节长度
     
      options:参数选项,一般为0
     
      param_name:参数名称
     
      lr_save_var函数把指定的变长字符串赋值给参数。这个函数在关联查询的时候非常有用。需要使用lr_eval_string来确定参数的值。
     
      例子:
     
      在下面的例子中, lr_save_var 用来限制参数的长度。

     Action()

    {

           #define MAX_NAME_LEN 4


    // 创建参数, InName

           lr_save_string("Fitzwilliam", "InName");

    // 把 "InName"的前四个字节保存到 "ShortName"

           lr_save_var( lr_eval_string("{InName}"),

                  MAX_NAME_LEN, 0, "ShortName");

           return 0;

    }

    Output:

    Action.c(8): Notify: Saving Parameter "InName = Fitzwilliam"

    Action.c(10): Notify: Saving Parameter "ShortName = Fitz"

     

    转载于:https://www.cnblogs.com/vinyfeng/articles/1775965.html

    展开全文
  • LR系统讲座之关联函数LR系统讲座之关联函数
  • LR12自动关联修改关联函数设置从web_reg_save_param_regexp改成web_reg_save_param_ex 从录制按钮中点击设置
  •   点击“确定”后:   如何修改已经创建好的关联规则:  
  • LR_函数

    2017-03-31 14:02:02
    一:WEB_URL Web_url(“这里是步骤名”,”URL=你要访问的地址”,LAST); 二:编码转换lr_convert_string_encoding ...lr_convert_string_encoding("楂樼骇鎼滅储",LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,
  • LR常用函数以及参数化设置

    千次阅读 2018-09-19 09:42:36
    web_reg_save_param 关联常用函数,可以根据自己需要,截取请求返回的数据,保存到定义的参数中去。 web_reg_save_param(“log”, //从返回结果中截取log的值 “LB={”", “RB=}”, “Notfound=...
  • LR常用函数总结

    千次阅读 2015-05-11 17:04:14
    事务函数:  lr_start_transaction();//标记事务的开始  lr_start_transaction();/*标记事务的结束,一般情况下,事务开始与结束联合使用*/  lr_get_trans_instance_status();//得到事务的状态  lr_get_...
  • LR函数笔记 一 --脚本关联&参数化 (1) Web_url("") step name 第一个步骤名称targetframe=main,# 打开窗口方式resource = 0 RecContentType = text/htmlreferer = 打开连接来自于哪个页面地址#防止网站攻击...
  • LR中的两个常用关联函数

    千次阅读 2008-11-13 17:46:00
    • web_reg_save_param:这是最新版,建议使用,也是最常用来做关联(correlation)的函数。语法:web_reg_save_param ( “Parameter Name” , , LAST ); • web_create_html_param、web_create_html_param_ex:这...
  • LR关联方法

    2019-03-05 14:23:19
     1)录二份相同的脚本对比脚本中的差异,每一个差异都可能是需要做关联的地方,lr_thik_time部分的差异可以忽略。  2)找到不同的部分,然后在输出窗口的【Generation Log】中按Ctrl+F,在查找窗口中粘贴差异部分...
  • LR关联的例子

    千次阅读 2013-04-07 21:52:59
    1、关联是获取服务器返回给客户端的动态数据(字符串),把该字符串保存在参数中...2、注意关联函数的位置   例子 Action() {  web_reg_save_param("UserSession",  "LB=name=userSession value=",  "RB=>",
  • LR常用函数整理

    2016-03-07 07:18:00
    1,变量转参数/赋值lr_save_string("aaa","param"):将字符串“aaa”,另存为param。 2,参数转变量char var[10];...3,取值()lr_eval_string("{param}"):取出参数{param}中的值,可嵌套在其他函数里...
  • Lr 关联设置

    2018-03-30 18:00:00
    关联难点 1.找出需要关联的值 2.找到关联位置 3.关联边界 关联原因:脚本里的值是死的,服务器的值是动态变化的,关联是将服务器返回的动态变化的值保存为参数以便后面需要用到该值的请求进行使用 1.1自己...
  • 如果客户端的某个请求是随着服务器端的响应而动态变化,我们就需要用到关联,通过关联函数获取动态的返回值,传给后面的函数使用,完成测试上下文的流程串联 为什么要有关联函数 如果客户端的某个请求是随着...
  • lr关联:手工关联和自动关联 简单的说,每一次执行时都会变动的值,就有可能需要做关联(correlation)。 VuGen提供二种方式帮助您找出需要做关联(correlation)的值: 自动关联 手动关联 一手工关联 lr8.0...
  • 实例分析lr关联与参数化的区别以及LR使用过程中的各个函数如何写!
  • LR 关联高级篇

    2012-07-13 14:26:38
    3.7.6 关联函数的高级使用 上面详细介绍了关联的作用和关联函数的详细选项,那么在工作中除了要使用关联函数获得服务器返回以外,还能做什么呢? 例如论坛一个版面中有20个帖子,如何实现随机单击其中某一个帖子...
  • 关联函数的位置

    千次阅读 2016-05-16 15:34:00
    关联函数的位置 自我总结 关联函数目前只用到了两种形式 1、 web_reg_save_param("usersession","LB=",LAST); 2、 web_reg_save_param("usersession","LB=",“ORD=ALL”,”Savelen=18“,LAST); 其中user...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,176
精华内容 4,470
关键字:

lr关联函数