场景设计-集合点设置
1 作用
通过让多用户在同一时间点上进行并发操作来测试系统的并发处理的能力
2 实现
通过集合点函数来实现。
注意:集合点经常和事务结合起来使用。集合点只能插入到Action部分,vuser_init
和vuser_end中不能插入集合点。所以,如果要模拟并发登录,那么必须把登录操作放到Action中
3 具体步骤
例子:模拟10个用户并发登录Web Tours
1、插入集合点函数
打开VuGen,光标定位在要插入Insert- >Rendezvous
填写集合点名称
说明:集合点的名称最好要有意义,能够清楚的说明该集合点完成的动作。
查看脚本(新增集合点函数rendezvous)
Action2()
{
lr_rendezvous("login"); //插入集合点
//提交登录表单
web_submit_data("login.pl",
"Action=http://127.0.0.1:1080/WebTours/login.pl",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t10.inf",
"Mode=HTML",
ITEMDATA,
"Name=userSession", "Value=114160.918590522fiHcVfcpcfDfcDcpQVDf", ENDITEM,
"Name=username", "Value=jojo", ENDITEM,
"Name=password", "Value=bean", ENDITEM,
"Name=JSFormSubmit", "Value=off", ENDITEM,
"Name=login.x", "Value=45", ENDITEM,
"Name=login.y", "Value=3", ENDITEM,
LAST);
return 0;
}
当脚本在多用户运行的情况下,每次运行到这个函数都会检查一下集合点的策略来决定是等待还是继续运行
2、集合点设置
利用脚本创建场景,Controller中,Scenario->Rendezvous…
说明:仅当脚本中含有集合点函数时,才可以设置场景中的集合点。
说明:这里可以根据需要禁用/开启集合点,禁用或开启用户,可设置集合点策略
2.1、 策略设置
说明:
a) Policy
满足后策略才释放虚拟用户
策略1:Release when N% of all Vusers arriver the rendezvous
是指占全部用户百分之N的用户都运行到了集合点函数才释放集合,然后让这些用户并发运行后面的脚本
策略2:Release when N% of all running Vusers arriver at the rendezvous
是指占所有正在运行用户百分之N的用户都运行到了集合点才释放集合,然后让这些用户并发运行后面的脚本。
策略3:Release when N Vusers arrive at the rendezvous
是指指定数量(N)的用户运行到了集合点才释放集合,然后让这些用户并发运行后面的脚本
b) Timeout between Vusers N seconds(集合点超时)
超时时间是指虚拟用户之间的时间差,当出现两个虚拟用户到达集合点的时间差超过设定的超时时间时,所有在集合点处于等待状态中的用户将全部释放。
在 脚本运行时,每个虚拟用户到达集合点时都会去检查一下集合点的策略设置,如果不满足,那么就在集合状态等待,直到集合点策略满足后,才运行下一步操作。但 是可能存在前一个虚拟用户和后一个虚拟用户达到集合点的时间间隔非常长的情况,所以需要设置一个超时的时间,如果超过这个时间就不等待迟到的虚拟用户了
这里选择策略1,保存,设计场景,每5秒开启2个用户
查看查看运行到集合点的用户数
4 注意事项
1、集合点和事务
集合点应该放在事务外,如果事务内存在集合点,那么虚拟用户在集合点等待的过程也会被算入事务时间,导致早进入集合点的用户的响应时间有误。
2、集合点和Action。
集合点仅对Action section起作用。对init action或end action无效,无法设置集合点
3、集合点是分批次的(按指定数量一批一批的运行)
那么如果有10个用户,设置指定8个用户到达集合点才运行,那么前面8个到达集合点则释放该8个用户,后面到达集合点的用户也是等到满足8个用户才运行,等待超时除外。