LoadRunner快速使用入门之Vugen

概念解释

性能测试基本概念:并发、集合点、参数化、事务、响应时间、关联、检查点 
首先看下面一张图:


并发 
如果当前需要10个客户端同时对服务端进行操作,可以理解为10个用户并发(或者说讲一份脚本通过某种方法,模拟十份脚本运行这就叫做并发) 
集合点 
如果当前需要10个客户端同一时刻进行登陆,那么在那个时刻的标志,可以理解为集合点 
参数化 
10个用户对服务端进行操作,在登陆过程中,每个用户的uname和pwd不同,通过某种手段,使其在同一份脚本中,每个用户取到对应的uname和pwd,这种手段谓之参数化 
事务 
对某一操作进行衡量时,可以将该操作看成一个事务,或者说是将该操作事务化 
响应时间 
衡量事物的一个标志 
关联 
十个用户登录后,会获得十个不同的sessionid,将服务端返回的sessionid捕获且正确分配到下一次使用,这就叫关联,类似于形参这一概念 
检查点 
每个用户登录后,校验登陆成功与否

Vugen

参数化

参数化的方法 
方法一,右键—【Replace with a new parameter】 
方法二,菜单【insert】—-【new Parameter…】

     web_url("zhbg",
          "URL={Parameter_url}",
          "TargetFrame=",
          "Resource=0",
          "RecContentType=text/html",
          "Referer=",
          "Snapshot=t1.inf",
          "Mode=HTML",
          EXTRARES,
          "URL=scripts/platform/generatorHelp.js", ENDITEM,
          LAST);
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

参数化的文件类型 
1)file 
2)Random Number 
参数取值方式 
Select next row【选择下一行】: 
顺序(Sequential):按照参数化的数据顺序,一个一个的来取。 
随机(Random):参数化中的数据,每次随机的从中抽取数据。 
唯一(Unique):为每个虚拟用户分配一条唯一的数据 
这里写图片描述 
Update value on【更新时的值】: 
每次迭代(Each iteration) :每次迭代时取新的值,假如50个用户都取第一条数据,称为一次迭代;完了50个用户都取第二条数据,后面以此类推。 
每次出现(Each occurrence):每次参数时取新的值,这里强调前后两次取值不能相同。 
只取一次(once) :参数化中的数据,一条数据只能被抽取一次。(如果数据轮次完,脚本还在运行将会报错) 
这里写图片描述

注意:上面两个选项都有三种情况,如果将他们进行组合,将产生九种取值方式。

Select next row【选择下一行】 Update Value On【更新时的值】 Replay Result【结果】
顺序(Sequential) 每次迭代(Each iteration) 结果:分别将15条数据写入数据表中;功能说明:每迭代一次取一行值,从第一行开始取。当所有的值取完后,再从第一行开始取;如:如果参数化文件中有15条数据,而迭代设置为16次,那执行结果中,参数化文件第一行的数据有两条
顺序(Sequential) 每次出现(Each occurrence) 结果:分别将15条数据写入数据表中;功能说明:每迭代一次取一行值,从第一行开始取。当所有的值取完后,再从第一行开始取;如:如果参数化文件中有15条数据,而迭代设置为16次,那执行结果中,参数化文件第一行的数据有两条
顺序(Sequential) 只取一次(once) 结果:表中写入15条一模一样的数据。功能说明:每次迭代都取参数化文件中第一行的数据。
随机(Random) 每次迭代(Each iteration) 结果:表中写入15条数据,但可能有重复数据出现;功能说明:每次从参数化文件中随机选择一行数据进行赋值
随机(Random) 每次出现(Each occurrence) 结果:表中写入15条数据,但可能有重复数据出现;功能说明:每次从参数化文件中随机选择一行数据进行赋值
随机(Random) 只取一次(once) 结果:表中写入15条相同数据;功能说明:第一次迭代时随机从参数化文件中取一行数据,后面每次迭代都用第一次迭代的数据。
唯一(Unique) 每次迭代(Each iteration) 结果:分别将15条数据写入数据表中;功能说明:第一次迭代取参数化文件中的第一条数据,第二次迭代取第二条数据,以此类推。注:如果设置迭代次数为16次。结果:在执行第16次迭代时会抛异常,异常日志可在LoadRunner的回放日志(replayLog)中看到。
唯一(Unique) 每次出现(Each occurrence) 结果:分别将15条数据写入数据表中;功能说明:第一次迭代取参数化文件中的第一条数据,第二次迭代取第二条数据,以此类推。注:如果设置迭代次数为16次,而参数化文件中只有15条数据,明显数据不够。此时可以设置“when out of values”属性来判断当数据不够时的处理方式Abort Vuser:中断虚拟用户;Countinue in a cylic manage:循环取参数化文件中的值,即:当参数化文件中的值取完后又从参数化文件的第一行开始取值。Countinue with last value:继续用最后一条数据
唯一(Unique) 只取一次(once) 结果:表中写入15条相同数据;功能说明:每次都取参数文件中的第一条数据进行赋值

事务

插入事务的方法:插入事务操作可以在录制脚本过程中,也可以在录制结束后进行。可以在脚本中找到需要添加事务的部分,直接插入

lr_start_transaction("事务");

.....

lr_end_transaction("事务",LR_AUTO); 
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

注意: 
1、开始与结束函数必须成对出现 
2、事务的名称必须一样。 
当然,我们也可以将鼠标定位到要插入事务的位置,通过菜单栏来插入事务(insert—>start transaction/end transaction) 
这里写图片描述


检查点

函数:

Web_reg_find( “Search=Body”,     // 定义查找范围
            “SaveCount=ddd”    // 定义查找计数变量名称
            “Text=aaa”         // 定义查找内容
              LAST); 
   
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

示例脚本:

Action()
{

    web_reg_find("Search=Body",
        "Text=Welcome to the Web Tours site.",
        "SaveCount=count1",
        LAST);
    lr_start_transaction("事务");
    web_url("WebTours",
        "URL=http://127.0.0.1:2080/WebTours/",
        "Resource=0",
        "RecContentType=text/html",
        "Referer=",
        "Snapshot=t1.inf",
        "Mode=HTML",
        LAST);

if(atoi(lr_eval_string("{count1}"))>=1)

     lr_end_transaction("事务",LR_PASS);
else
     lr_end_transaction("事务",LR_FAIL);

return 0;
}

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

思考时间

函数: lr_think_time(); 
示例代码:

Action()
{

    web_reg_find("Search=Body",
        "Text=Welcome to the Web Tours site.",
        "SaveCount=count1",
        LAST);
    lr_start_transaction("事务");
    web_url("WebTours",
        "URL=http://127.0.0.1:2080/WebTours/",
        "Resource=0",
        "RecContentType=text/html",
        "Referer=",
        "Snapshot=t1.inf",
        "Mode=HTML",
        LAST);

    lr_think_time(8);
if(atoi(lr_eval_string("{count1}"))>=1)

     lr_end_transaction("事务",LR_PASS);
else
     lr_end_transaction("事务",LR_FAIL);

    trans_time=lr_get_transaction_wasted_time("事务");  //获得消耗时间
    if (trans_time) {
        lr_output_message("The duration up to the submit is %f seconds",trans_time);  //打印输出消耗实时间
    }else{
        lr_output_message("the duration cannot be determined. ");
    }

return 0;
}

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

思考时间设置: 
打开loadrunner 的Virtual User Generator 
菜单栏:Vuser —Run-Time settings…,切换到Thark Time选项 
这里写图片描述
lgnore think time :忽视思考时间,也就说勾选这一项的时候 ,你脚本中加入的lr_think_time 函数设置是无效的。选中这一项,运行上面的脚本。 
Replay think time:回放思考时间 
As recorded : 使用当前设定的思考时间。 
Multiply recorded think time by: 录制思考时间乘以,使用录制思考时间的倍数。 
Use random percentage of recorded think time : 使用录制思考时间的百分比。


集合点

函数: lr_rendezvous() 
示例代码:

Action()
{
    lr_rendezvous("集合点")  //添加集合点
    lr_start_transaction("事务");
    web_url("WebTours",
        "URL=http://127.0.0.1:2080/WebTours/",
        "Resource=0",
        "RecContentType=text/html",
        "Referer=",
        "Snapshot=t1.inf",
        "Mode=HTML",
        LAST);  
     lr_end_transaction("事务",LR_AUTO);
    return 0;
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

集合点设置: 
1、打开Controller (控制器),导入录制的脚本。 
2、菜单栏 Scenario —> Rendezvous 打开集合点设置界面 
这里写图片描述 
点击“Policy…”来设置集合点的策略: 
这里写图片描述 
Release when :当所有虚拟用户中的x % 到达集合点进释放,即仅当指定百分比的虚拟用户到达集合点时,才释放虚拟用户。 
注意:此选项将会干扰场景的计划。如果选择此选项,场景将不按计划运行。 
Release when :当所有正在运行的虚拟用户中的x %到达集合点时释放,即仅当场景中指定百分比的、正在运行的虚拟用户到达集合点时,才释放虚拟用户。 
  还有不在运行的虚拟用户? 假如,设置为1分钟启动一个用户,当然会存在因为用户还没启动,所以无法参与集合点。 
Release when : 当x 个虚拟用户到达集合点时释放,即仅当指定数量的虚拟用户到达集合点时,才释放虚拟用户。 
  这个很好理解,当我用百分比不太好衡量集合点的虚拟用户数,当然可以设置具体的用户数。 
Timeout between Vusers (虚拟用户之间的超时):框中输入一个超时。 
  假如设置了集合10用户并发,结果9个用户已经集合到位,还剩1个虚拟用户,左等右等就是等不来。那总不能一直等下去吧。设定了个时间,假如30秒还不来,那就不管它了。


关联

自动关联 
选择菜单栏Vuser —> Scan Script for Correlations (快捷键ctrl + F8 )弹出下面窗口 
这里写图片描述 
扫描相关性可能需要几分钟,你想继续么? 当然,点击“Yes” 
选中需要关联的内容,点击“ Correlation ”

手动关联 
web_reg_save_param(): 
示例代码:

     web_reg_save_param("p_City",
          "LB=\">",
          "RB=</option>",
          "ORD=1",
          LAST);
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

关联步骤: 
寻找需要关联的内容 
1.抓包,与开发讨论 
2.脚本对比 
1、录制第一份脚本,保存为“关联a” 。 
2、录制第二份脚本(操作步骤与第一次保持一致),调用loadrunner自带的WinDiff(Tools–>campare with users ),选择“关联a” 
这里写图片描述
黄色部分为脚本不同的地方,也就是有可能需要关联的地方(注意:在这之前应对脚本进行处理,删除不必要的请求,尽可能的缩小可能关联的区域) 
建立关联 
1、使用web_reg_save_param函数建立关联脚本 
2、或者找到对应请求,选择Tree 视图模式,点击HTTP View 下查看Response Body 中,打到需要关联的内容,右键在下拉列表中选择“Create Coorelation”

web_reg_save_param_ex(): 
菜单栏Insert — new step 打开add step 窗口 
这里写图片描述 
搜索web_reg_save_param_ex 函数,选中函数,点击OK ,弹出函数的设置窗口: 
这里写图片描述

Prameter name: 此设置存放参数的名称。 
Left boundary: 此处设置左边界,这里是用来填写关联对于数据处理的左匹配内容规则。 
Match case : 默认情况下边界是检查Match case ,也就是检查大小写的。 
Binary data : 如果要关联的内容是非ASCII 字符的,需要选择此项 
Regular expression : 在LR11 中关联提供了使用正则表达式的功能,但是LR11 Patch3 中取消web_reg_save_param_ex 函数对此功能的设置。 
Reight boundary: 此处设置右边界。 
DFEs : 在录制选项和回放中我们提供了DFE的功能,在关联这里也支持DFE的数据处理。 (DFE等后面再解释,或你自行查资料) 
Ordinal : 这个关键字在很多函数里面都有应用,在这里可以填写任意一个整数,也可以填All 。如果填写数字,那么说明从返回的记录中取出对应顺序的值,而填写All 的话将会返回所有内容。 
Save Offset : 设置关联的内容偏移量,从第几位开始进行关联操作。 
Save Length : 关联出来的内容所需要保存的长度。 
Warm if text was not found (Default is Error) : 对于关联的对象不存在的处理。 
Filters : 下面的选项都是帮助关联返回限定的,通过这些设置可以进一步减少返回的范围。


示例脚本

Action()
{

    char  *string =lr_eval_string("{phone}");

    char  str1[1000]="Body={\"requests\":{\"global\":\"\",\"request0\":{\"MOBILE_TEL\":\"137";
    char *str2="\",\"SMS_TYPE\":\"1\",\"COMPANY_ID\":\"10100\",\"CHANNEL\":\"16\",\"CHANNEL_NO\":\"137";
    char *str3="\",\"THIRD_ACCT_ID\":\"\"}}}";
    char  lstr1[10000]="Body={\"requests\":{\"global\":\"\",\"request0\":{\"MOBILE_TEL\":\"137";
    strcat(str1,string);
    strcat(str1,str2);
    strcat(str1,string);
    strcat(str1,str3);



    strcat(lstr1,string);
    strcat(lstr1,"\",\"INVITE_CODE\":\"");





    lr_output_message(lr_eval_string(string));
    lr_output_message(str1);


web_reg_save_param("MSG_CODE",
                   "LB=MSG_CODE\":\"",
                   "RB=\",\"MSG_CONTEXT",
                   "Ord=1",
                   "Search=Body",
                   LAST);




web_reg_save_param("MSG_CONTEXT",
                   "LB=MSG_CONTEXT\":\"",
                   "RB=\"}]},\"message",
                   "Ord=1",
                   "Search=Body",
                   LAST);

web_reg_find("Text=\"flag\":1", "SaveCount=flag", LAST);


    lr_rendezvous("getSmsCode");


    lr_start_transaction("getSmsCode");


    web_custom_request("getSmsCode",
    "URL=http://192.168.14.50:8088/kwdf_acct2/getSmsCode.do",
    "Method=POST",
    "TargetFrame=",
    "Resource=0",
    "Referer=",
    "Mode=HTTP",
        str1,
     LAST);


if(atoi(lr_eval_string("{flag}"))>=1)

     lr_end_transaction("getSmsCode",LR_PASS);
else
     lr_end_transaction("getSmsCode",LR_FAIL);



    strcat(lstr1,lr_eval_string("{MSG_CODE}"));
    strcat(lstr1,"\",\"AUTH_CODE\":\"");
    strcat(lstr1,lr_eval_string("{MSG_CONTEXT}"));
    strcat(lstr1,"\",\"COMPANY_ID\":\"10100\",\"CHANNEL\":\"16\",\"CHANNEL_NO\":\"137");
    strcat(lstr1,string);
    strcat(lstr1,"\",\"THIRD_ACCT_ID\":\"\",\"CHANNEL_EXT\":\"\",\"EXT_FIELD\":\"\"}}}");       

//  lr_output_message("----------------------");
//  lr_output_message(lstr1);

web_custom_request("login",
    "URL=http://192.168.14.50:8088/kwdf_acct2/login.do",
    "Method=POST",
    "TargetFrame=",
    "Resource=0",
    "Referer=",
    "Mode=HTTP",
    lstr1,
    LAST);



    return 0;
}

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
0
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值