loadrunder之脚本篇——集合点设置
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个用户才运行,等待超时除外。
最新文章
- BZOJ 3676: [Apio2014]回文串
- 初学者 bootstrap(二)----在路上(4)
- php 增删改查练习
- Application_Error异常处理
- HTML5探索之datalist研究
- this 关键字
- 深入浅MFC
- [ArcGIS所需的补丁]ArcGIS 10.2.2 for Desktop联系Oracle(2014年10上个月发布)数据库崩溃
- 迁移到gitbook
- Java并发编程:Thread类的使用介绍
- php 函数积累第一天
- 一个a::before的写法
- Missing number - 寻找缺失的那个数字
- Leetcode题解(21)
- scrapy 爬虫返回json格式内容unicode编码转换为中文的问题解决
- c语言中的 #ifndef、#def、#endif等宏的意思
- 安装MCScanX
- selenium相关:通过location 和 size 获取元素所在像素位置和尺寸,截取图片ROI
- WebSocket是什么原理?为什么可以实现持久连接?
- 模拟数据库丢失undo表空间
热门文章
- Crypto++库安装、测试
- DataUml Design 介绍8-DataUML 1.2版本正式发布(支持SQLite数据库、NetUML开发框架)
- centos6.5下redis的安装与配置
- openWRT自学---初始化过程和主要脚本的分析
- HibernateTools实现pojo类 数据库schma mapping映射的相互转换 二
- memcached 经常使用命令最全总结大全
- 第一百六十八节,jQuery,表单选择器
- Python urllib的urlretrieve()函数解析 (显示下载进度)
- JavaScript中trim 方法实现
- Branching / Tagging