一、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的使用总结

二、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的使用总结

三、Jmeter连接mysql数据库

1、下载jia包 官网:mysql-connector-java-8.0.15  

登录官方下载网址:https://dev.mysql.com/downloads/connector/

关于Jmeter的使用总结

关于Jmeter的使用总结

关于Jmeter的使用总结

关于Jmeter的使用总结

解压缩之后

关于Jmeter的使用总结

打开Jmeter-测试计划

关于Jmeter的使用总结

关于Jmeter的使用总结

添加  JDBC Connection Configguration 控件 

关于Jmeter的使用总结

关于Jmeter的使用总结

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实现高并发请求

问题:

  1. 线程启动了就会直接发送测试请求:如果要模拟在一瞬间糕饼大量测试的时候,需要调高线程数量。
  2. 如果使用了constant throughput timer,可以模拟较长时间的并发测试,但是仍无法满足稳定的瞬间高并发测试。

解决:

  1. 使用集合点

作用:阻塞线程,直到指定的线程数量到达后,再一起释放,可以瞬间产生很大的压力。

操作步骤:

  1. 添加集合点,在Jmeter里是synchronized timer
  2. Number of Simulated Users to Group by

a.每集合够多少个模拟用户(线程)后发送一次测试请求;

b.等同于设置为线程租中的线程数;

c.确保设置的值不大于它所在线程组包含的用户数(线程数)。

EX:“Number of Simulated Users to Group by: 5”表示并发量是5。也就是说,Jmeter会等到5个线程都运行到此处时,这五个线程才开始执行后面的操作,先到达的线程将会在此等候。

  1. 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的使用总结

原因:

Jmeter依赖的jar包需要放到jmeter安装目录下的lib目录下

解决:

D:\Jmeter3\apache-jmeter-3.1\lib\ext(目录)下缺少一个jra包

jar包地址:https://jmeter-plugins.org/install/Install/#Plugins-Manager-Download

关于Jmeter的使用总结

相关文章: