一、Jmeter获取当前系统时间和对系统时间加减
| time | ${__time()} |
| YMD | ${__time(YMD)} |
| HMS | ${__time(HMS)} |
| YMDHMS | ${__time(YMDHMS)} |
| yyMMdd | ${__time(yyMMdd)} |
| yyyy-MM-dd | ${__time(yyyy-MM-dd)} |
结果:
time=1577257801655
YMD=20191225
HMS=151001
YMDHMS=20191225-151001
yyMMdd=191225
yyyy-MM-dd=2019-12-25
H 24小时制的小时, h 12小时制的小时;
S 毫秒,s秒;
M 月份,m分钟;
D 一年的第几天,d一个月的第几天。
${__time(yyyy-MM-dd HH:mm:ss:SSS,time)} :格式化生成时间格式 2019-12-25 15:07:10:635
${__time(,)}:默认该公式精确到毫秒级别, 13位数 1577257727436 (毫秒)
${__time(/1000,)}:该公式精确到秒级别, 10位数 1577257727 (秒)
当前时间${__timeShift(,,,,)}
增加一天${__timeShift(,,P1d,,)}
增加一H ${__timeShift(,,PT1H,,)}
${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,,,)}
${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,P1d,,)}
${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,PT1H,,)}
${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,PT10m,,)}
${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,PT20S,,)}
${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,P1dT1H10m20s,,)}
${__time(YMDHMS,)}
${__time(YYYYMMDHMS,)}
二、Jmeter中常见的问题
1、返回数据:
{"success":true,"result":["01","02","03","04","05","06","07","08"]}
正则表达式提取器:"result":(.+)} 取得是:["01","02","03","04","05","06","07","08"]
2、postman调用接口返回200 response返回正常 ,Jmeter返回502 查看端口号(默认8080)是否写全还有URL(Content-type:aplication/json) utf-8等
3、接口返回405 查看请求方式是否正确
4、601 获取token失败
5、400请求的入参存在问题
6、415 查看请求协议是否正确 (htp/https)
7、正则提取数据库中一列数据 itemId\n(.*)\n(.*)\n(.*)\n(.*)\n(.*) 模板:$1$$2$$3$$4$$5$
8、判断多数值对不对(添加debug) id_g1、id_g2 是debug中用正则提取出来的数据
在Beanshell断言中添加判断
if(${id_g1}!=10200){
Failure = true;
FailureMessage = "不匹配";
return;
}
if(${id_g2}!=10191){
Failure = true;
FailureMessage = "不匹配";
return;
}
9、怎样在JDBC request中执行多条一类的sql语句
在 JDBC Connection Configuration的URL中配置 ?allowMultiQueries=true
例如:
三、Jmeter连接mysql数据库
1、下载jia包 官网:mysql-connector-java-8.0.15
登录官方下载网址:https://dev.mysql.com/downloads/connector/
解压缩之后
打开Jmeter-测试计划
添加 JDBC Connection Configguration 控件
2、添加到测试计划中
3、添加JDBC Connection Configuration 填写数据库信息
4、database url:jdbc:mysql://rm-bp1n333xx086yq3t4io.mysql.rds.aliyuncs.com
JDBC driver class:com.mysql.jdbc.Driver
username: dba_admin
password: 5=NBS5GDDPLQ
四、Jmeter实现高并发请求
问题:
- 线程启动了就会直接发送测试请求:如果要模拟在一瞬间糕饼大量测试的时候,需要调高线程数量。
- 如果使用了constant throughput timer,可以模拟较长时间的并发测试,但是仍无法满足稳定的瞬间高并发测试。
解决:
- 使用集合点
作用:阻塞线程,直到指定的线程数量到达后,再一起释放,可以瞬间产生很大的压力。
操作步骤:
- 添加集合点,在Jmeter里是synchronized timer
- Number of Simulated Users to Group by
a.每集合够多少个模拟用户(线程)后发送一次测试请求;
b.等同于设置为线程租中的线程数;
c.确保设置的值不大于它所在线程组包含的用户数(线程数)。
EX:“Number of Simulated Users to Group by: 5”表示并发量是5。也就是说,Jmeter会等到5个线程都运行到此处时,这五个线程才开始执行后面的操作,先到达的线程将会在此等候。
- Timeout in milliseconds
a.超时时间,即多少毫秒后同时释放已集结的的线程,发送测试请求;
b.如果设置为0,Timer将等待线程数达到了"Number of Simultaneous Users to Group"中设置的值才释放。如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间(毫秒为单位)后还没达到"Number of Simultaneous Users to Group"中设置的值,Timer将不再等待,释放已到达的线程。
2、设置线程组属性
因为现在是使用集合点来实现高并发测试,所以现在线程组属性中就可以设置线程在较长的时间来启动,这样测试机器的压力就会相对小一点;
3、添加相关请求,结果树等,运行查看效果
通过结果树可以看到,请求是批量执行的;
1)开始执行的脚本,观察请求的增加数量趋势;
或
2)对比请求的发送时间;
注意:2、Synchronizing timer 仅作用于同一个JVM中的线程。
所以,如果使用并发测试,确保"Number of Simultaneous Users to Group by"中设置的值不大于它所在线程组包含的用户数。
(原文:Synchronizing timer blocks only within one JVM, so if using Distributed testing ensure you never set "Number of Simultaneous Users to Group by" to a value superior to the number of users of its containing Thread group considering 1 injector only)
试想:a.如果分布式测试时,synchronizing timer作用于所有jvm,那么jvm之间或者说监控jvm工作的部件就需要频繁通讯,确定线程的数量及状态等,然后集结了足够的线程后,又要发送信号让Jmeter来发送测试请求,中间存在延时,这样就无法模拟更真实的高并发了,而且这个东西还会消耗测试机器的一部分性能,会给测试结果带来负面影响;
所以暂时是只支持控制单个jvm,如果后面有办法解决上面那些问题后,就可以实现控制多个jvm,控制总并发量;
b.如果分布式测试,并使用了Synchronizing timer,且设置的值是小于单个jvm的线程数量;
但是,较难确保所有jvm都在同一时间点集结了同样数量的线程数,这样就很难下测试结论了,因为都不知道是多少并发下的性能表现;当然了,可以将线程的启用时间拉长,并将超时时间延长,这样就很可能会与同一时刻集结到足够的线程,达到超高并发的测试;
所以,分布式测试与Synchronizing timer一般不是同时使用的;如果非要用,则需要慎重设置相关参数;
3、如果设置Timeout in milliseconds为0,且线程数量无法达到"Number of Simultaneous Users to Group by"中设置的值,那么Test将无限等待,除非手动终止。
这个无法达到的情况有如下几种:
a.设置的值大于线程数量,这样就永远无法达到了;
b.最后一批线程数不够集合点数目;
五、Jmeter导入脚本时报错原因和解决
报错截图:
原因:
Jmeter依赖的jar包需要放到jmeter安装目录下的lib目录下
解决:
D:\Jmeter3\apache-jmeter-3.1\lib\ext(目录)下缺少一个jra包
jar包地址:https://jmeter-plugins.org/install/Install/#Plugins-Manager-Download