偶是测试新手,希望前辈们能多多指教。

设置或不设置duration,事务何时开始停止?用户停在什么状态【转载】

上一篇 / 下一篇  2011-05-24 18:41:26 / 个人分类:LoadRunner学习日志

今天上午看了Zee一篇早期的文章,其中针对的问题是:“设置或不设置duration,事务何时开始停止?用户停在什么状态?”他就此问题进行了两个场景实验,对duration和事务停止的关系进行了验证,个人对此感觉理解不够透彻,自己重新做了一遍,并新增三个场景方案,也相信即使是刚入门的都能理解,其中脚本将继续采用他的作为例子。

脚本:
Action() {
   lr_start_transaction("TEST");
   lr_log_message("思考时间开始");
   lr_think_time(10);
   lr_log_message("思考时间结束");
   lr_end_transaction("TEST", LR_AUTO);

   return 0; 
   }

 

场景1
虚拟用户数:100
Ramp up:同时加载全部
Duration:所有虚拟用户只运行一遍
Ramp down:同时停止所有虚拟用户

根据上图,得知场景执行情况:100虚拟用户大概花了4秒完成了加载,同时也全部都完成了int部分的执行,在6秒后,有一个用户完成了action部分的执行(此时正好是一个Vuser跑完整个脚本需要的时间——10秒——InitTime + ActionTime + EndTime = 4 + 6 + 0 = 10),END部分也迅速的完成了。

结论:

虚拟用户数最高的时候不一定就是服务器压力最大的时候。

场景2
虚拟用户数:100
Ramp up:10个虚拟用户/10秒
Duration:所有虚拟用户只运行一遍
Ramp down:同时停止所有虚拟用户

 

根据上图,得知场景运行情况:1个虚拟用户在完成脚本的int部分以后,花了10秒执行完毕action部分,并立即进入到END部分。但是,整个场景中虚拟用户最高在线只有10。
结论:

QUANTITY 不一定等于 目标并发用户数

 而实际上,许多的初学者都误以为在Controller中QUANTITY即目标并发用户数。


场景3
虚拟用户数:100
Ramp up:10个虚拟用户/10秒
Duration:1min
Ramp down:同时停止所有虚拟用户

 

根据上图,得知场景运行情况:1个虚拟用户在完成脚本int部分以后,开始执行脚本Action部分,当执行完Action部分以后,该虚拟用户没有立即进入End部分,而是继续脚本的执行。 再通过Int事务数的查看,发现整个场景中,Int事务总数为100,也就是说虚拟用户执行完Action部分以后既没有进入到End,也没有进入到Int,这段时间继续重复的执行Action部分。
结论:
脚本在场景中,Int部分以及End部分仅会被每个虚拟用户执行一次,若场景中存在Duration时间上的设置,则虚拟用户将在这段时间内重复的执行脚本中的Action部分。

  

场景4
虚拟用户数:100
Ramp up:10个虚拟用户/10秒
Duration:1min
Ramp down:10个虚拟用户/10秒

根据上图,得知场景运行情况:在Duration时间结束以后,虚拟用户总数开始下降,下降是以每10秒减少10用户的速度执行,未开始被“释放”的虚拟用户仍继续执行Action中的事务,直到Controller对其进行“释放”。
结论:
在Ramp down部分,虚拟用户并不是仅仅在等待Controller对其进行“释放”,未“释放”的用户仍然继续执行脚本Action部分,已“释放”的用户,执行完End部分后退出(根据End事务总数100得出)。


场景5
虚拟用户数:100
Ramp up:100个用户/秒
Duration:1min
Ramp down:100个用户/秒

根据上图,得知场景运行情况:在Duration时间结束以后,即时设置为每秒释放100虚拟用户,但实际上Controller仍将等待Duration部分中未执行完事务的用户执行完以后才进入脚本End部分(如图:Action中事务的结束伴随的是Action的结束,Action的结束伴随的是End的开始并结束)。
结论:
随着Ramp down时间的开始,虚拟用户并没有立即停止“手上”的事务,而是在事务执行完以后才开始执行End

 


TAG:

 

评分:0

我来说两句

Open Toolbar