背景:JMeter常被定义成性能测试工具或是自动化测试工具,都没错,同时还可以作为接口测试及web功能测试,关键使用者根据业务需求选择使用其功能;性能测试方向:后起之秀JMeter与革命前辈Loadrunner的比较,JMeter测试工具的Timer可以根据实际场景设置思考时间,用于等待或是集合点同时并发操作;言归正传,我们来看看JMeter的Timer成员有哪些,及具体作用?
1、Constant Timer :等待时间(思考时间)
Name:恒定时间元件名称(可以理解是等待(思考)时间),
Comments:注释,随意;
Thread Delay(in milliseconds):线程等待时间,单位毫秒;
tips:用法(场景),更真实的模拟用户场景,需要设置等待时间,或是等待上一个请求的时间,才执行,给sampler之间的思考时间;
2、Synchronizing Timer 集合时间(集合点)
Name:Synchronizing Timer 同步定时器名称(集合点)
Comments:注释,可以让定时器变得有意思,一目了然;
Grouping:
Number of Simulated Users to Group by: 同组用户数量,设置为0,等效于线程组中的线程数(Number of Threads(users));
Timeout in milliseconds:超时时间,单位毫秒,默认为0;如果设置为0,定时器等待同组的用户数,如果设置大于0,将以等待的最大线程数运行;如果超时,等待的用户数没有到达,定时器将停止等待;如果超时了,设置并发的用户数大于线程数,那么脚本无法停止;
tips:线程组用户数100,添加同步定时器,
线程数(100) |
定时器等待线程数(视情况而定) |
超时设置(默认为0,单位毫秒) |
设置效果(脚本运行达到的效果) |
100 |
100 |
0 |
用户等待达到100个用户,同时并发请求 |
100 |
90 |
100 |
1、刚好超时100ms,且等到90个用户并发请求; 2、等到90个用户,未超时,继续等到结束,再并发,这时用户数将大于90; 3、等到小于90和用户,又超过了设置100ms,那么以等到的用户并发请求,可能小于90; |
100 |
110 |
0 |
用户无法达到110个用户,线程将一直等待,不会停止; |
100 |
100 |
100 |
1、刚好超时100ms,等到100个用户并发请求; 2、超时100ms后,定时器以等到的最大用户数并发请求; 3、如果超时100ms,用户数没有到达100,将以等到的用户数并发请求,这是用户数可能小于100; |
100 |
0 |
0 |
定时器设置的用户数等效于线程的用户数,超时默认设置为0,用户同时并发请求 |
插入讲一个重点定时器:BeanShell Timer
Name:名称,随意;
Comments:注释,随意;
Reset bsh.Interpreter before each call:
Reset Interpreter:是否每次迭代重置解析器,默认false,官方建议长时间运行的脚本中设置True;
Parameters to be passed to BeadShell(=> String Parameters and Stringp[] bsh.args):
Parameters:BeanShell的入参;入参可以是单个变量,也可以是数组;
Script File (overrides script):
File Name:BeanShell 脚本可以从脚本文件中读取;
Script (Variables:ctx vars props log prev):编写的脚本(。。。),如:
try{
Thread.sleep(${sleeptime});
log.error("${sleeptime}");
log.warn(ctx.getThreadNum().toString());
vars.put("company","www.baidu.com");
log.info(vars.get("company"));
log.warn(props.get("log_level.jmeter"));
props.put("log_level.jmeter","ERROR");
log.warn(props.get("log_level.jmeter"));
}catch(InterruptedException e){
e.printStackTrace();
}
tips:解释一下脚本中调用JMeter的运行属性:
Log,直接调用log类,如log.error()写日志,info,warn等等
Ctx,可以获取JmeterContent实例获取运行时信息;如获取线程号log.info(ctx.getThreadNum().toString());
Vars,访问变量获取对应的值,也可以设置变量;如vars.put("company","www.baidu.com"); comany可以直接被其他元件调用${company}
Props,直接访问及修改Jmeter的属性,如log.warn(props.get("log_level.jmeter"));改变日至级别props.put("log_level.jmeter","ERROR");
Prev,访问前面sampler的结果,
3、Gaussian Random Timer 高斯定时器
这三类定时器,个人理解差不得太多,都有一个固定延迟时间,然后再给一个延迟偏差;
例如:Gaussian Random Timer 高斯定时器;
Name:定时器的名称,随意
Comments:注释,随意;
Tread Delay Properties:单位都是毫秒,固定延迟300ms,偏差100ms,意思是时间延迟300-400ms之间;
Deviation (in milliseconds):偏差值,是一个浮动范围;
Constant Delay offset (in milliseconds):固定延迟时间
4、Uniform Random Timer 暂停一个随机时间;
5、Poisson Random Timer 泊松定时器