|
在进行压力测试设计时,总会碰到一些case需要考虑用户实际的行为对系统的影响。使用lr录制脚本时,有很多方法都可以模拟用户的真实使用状态,例如:
1、lr_think_time()函数的使用可以模拟用户浏览的操作;
2、模拟Network Speed(Runtime-setting下的Network-Speedsimulation),可以模拟用户访问速度为最大带宽、自定义带宽以及各个连接模式的带宽(ADSL、ISDN等);
3、代理设置(Runtime-setting下的Internet里的proxy设置),可以模拟用户访问的代理服务器设置;
4、IP欺骗,设置IP欺骗可以模拟vuser使用不用的IP进行脚本运行,具体设置请参考51testing里的相关。帖子
如果一个页面上有很多业务项入口,我们要测试用户访问后会选择某个业务项进入浏览的压力,这个时候我们可以考虑如下设置来模拟:
1、分别录制多个脚本,在场景控制器中加载多个组,应用不同的组策略来模拟用户的业务访问:
例:有100个用户登录首页,然后有30个人去访问【新闻】业务,有40个人访问【财经】,还有30个人访问【论坛】;
(1)、分别录制访问【新闻】、【财经】、【论坛】的脚本 ;
(2)、使用场景控制器(Controller) ;
(3)、添加组(group)【新闻】脚本,设置vuser数为30;添加组(group)【财经】脚本,设置vuser数为40;添加组(group)【论坛】脚本,设置vuser数为30。
2、在一个脚本里录制多个action,然后使用集合点(rendezvous)来一起运行多个action
例如:有100个用户登录首页,然后平均访问【新闻】、【财经】、【论坛】;
(1)、分别录制访问【新闻】、【财经】、【论坛】的脚本到不同的action里 ;
(2)、在每个action脚本主函数action(){}的开始设置同一个集合点(名称相同);
(3)、使用场景控制器(Controller)设置100个vuser运行,即可达到平均访问3个业务的效果。
除了上面的方法,我再介绍一种使用随机数的方法:
例如:未知用户数量,有70%的人使用百度( http://www.baidu.com),有17%的人使用谷歌(http://www.google.cn),有7%的人使用yahoo(http://search.cn.yahoo.com),剩余的人使用搜狗(http://www.sogou.com)进行搜索,那么怎么模拟呢?
脚本示例如下:
Action()
{
int which; //存储随机数的变量
which = rand()%100; //生成0-99的随机数并赋值给which
lr_log_message ("DebugInfo:which=%d\n",which);//调试信息
if (which >= 30)//70%访问baidu
{
web_url("www.baidu.com",
"URL=http://www.baidu.com/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
}
else if ((which >=13) and (which <30))//17%访问Google
{
web_url("www.google.cn",
"URL=http://www.google.cn/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t2.inf",
"Mode=HTML",
EXTRARES,
"Url=/images/nav_logo3.png", ENDITEM,
LAST);
}
else if ((which >=6) and (which <13)) //7%访问yahoo
{
web_url("search.cn.yahoo.com",
"URL=http://search.cn.yahoo.com/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t3.inf",
"Mode=HTML",
EXTRARES,
"Url=/testing/uppic/200709/20070911101206590.gif", ENDITEM,
"Url=/testing/uppic/200709/20070911101207694.gif", ENDITEM,
LAST);
}
else //6%访问sogou
{
web_url("www.sogou.com",
"URL=http://www.sogou.com/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t4.inf",
"Mode=HTML",
EXTRARES,
"Url=/images/tab.gif", ENDITEM,
"Url=http://pv.sogou.com/pv.gif?t?=1181198683187446?r?=", ENDITEM,
LAST);
}
return 0;
}
这么写脚本其实和组策略形成的效果没有什么分别,但是我觉得还是写这样的结构比较好,我自己也不知道为什么。
--------------------
关联
1.自动关联,在tools-recording options的correlation中,选中enable correlation during recording的复选框,在下面list中选择你需要自动关联的协议。这样在录制脚本时,在可关联处会弹出一个dialog进行选择是否对该处进行关联,这样,在你脚本录制好之后,关联已经自动生成了,十分方便。
另一种自动关联的方法是,你在tools-recording options的correlation中,不选中enable correlation during recording的复选框的情况下进行自动关联,你可以先录制一个脚本,然后选择vuser-scan action for correlation或者直接ctrl+f8来运行一下脚本,这样也能自动找到不同的地方而进行自动关联,此时你只需要钩选你需要关联的地方后点击关联即可。?lt;?3>團V
2.手工关联,需要录制2个相同业务流程的虚拟用户脚本,然后通过tools-compare with vusers来打开wdiff.exe对2个脚本进行比较,找到需要关联的部分,然后指定左右边界,然后将脚本中原来的值替换成参数即可. |
|