很多朋友对于jmeter时间函数和jmeter入门不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
本文目录
一、jmeter参数化的三种 ***
1、 *** 明确:jmeter参数化的三种 *** 包括:CSV数据配置器法、用户定义的变量法以及JMeter内置函数法。
2、CSV数据配置器是JMeter中常用的参数化 *** 。使用此 *** ,我们可以将测试数据以CSV格式的文件存储,并在JMeter中通过配置CSV数据配置器来引用这些文件中的数据。步骤如下:创建CSV文件并指定测试数据列,在JMeter中添加CSV Data Config Element组件并配置相应的文件路径和数据列,最后在请求中引用配置好的变量。这种 *** 的优点是易于 *** 作且数据格式直观。
3、用户定义的变量法是通过JMeter的User Defined Variables(用户定义的变量)功能来实现参数化的一种方式。在JMeter的测试计划或线程组级别,我们可以添加用户定义的变量,并为其设置初始值和可能的动态值。这些变量可以在请求中直接使用。用户定义的变量法适用于参数数量较少且变化不频繁的场合。它 *** 作简单,对于简单的参数化需求来说是一个不错的选择。
4、JMeter内置函数法是一种更为灵活和强大的参数化方式。JMeter提供了多种内置函数,如时间相关的函数、字符串处理函数等,这些函数可以在请求中使用以生成动态参数。此外,JMeter还支持自定义函数和 *** 件扩展功能。通过合理使用这些函数和 *** 件,我们可以实现复杂的参数化需求。内置函数法的优点是功能丰富且灵活 *** 强,适用于复杂的测试场景。但相对于前两种 *** ,使用内置函数需要对JMeter的功能有更深入的了解。
5、以上三种 *** 各有特点,根据测试需求和场景的不同,可以选择最适合的参数化方式来提高测试效率和效果。
二、jmeter中实现每隔一定时间 ***
在实际项目的测试中,往往会遇到业务流程必须是先登录再执行后续相关 *** 作的业务场景。有的登录请求中会用到token的验证,token的实效时长设定的比较短,项目组又不愿意去修改实效时长。此时在测试稳定 *** 的过程中必须在token实效前重新进行一次登录 *** 作。
目前使用jmeter的测试过程中未想到其他的好 *** ,暂时的实现 *** 如下:
登录 *** 作放到仅一次 *** 中,在仅一次 *** 中使用beanshell脚本获取当前的时间,仅一次 *** 后面增加beanshell脚本判断运行时长,脚本后面增加if *** 判断运行时长,若超过条件则重新进行登录 *** 作,并在if *** 下增加beanshell再次获取当前时间戳。
具体jmeter脚本实现如下:
2、仅一次 *** 中beanshell sampler获取当前时间内容:
long timestart= System.c *** rentTimeMillis()/1000;
String timestartString= String.valueOf(timestart);
vars.put("timestartString",timestartString);
3、Beanshell判断运行时长脚本内容:
long timesNow= System.c *** rentTimeMillis()/1000;
String aaa= vars.get("timestartString");
long timestartLong= Long.parseLong(aaa);
long bbb= timesNow-timestartLong;
vars.put("bbb",String.valueOf(bbb));
//log. *** ("生成数值测试cccccccccc"+bbb);
4、if逻辑 *** 中内容:jexl3函数的使用可自行查找。
5、if *** 下的beanshell sampler再次获取时间戳内容:
long timestart= System.c *** rentTimeMillis()/1000;
String timestartString= String.valueOf(timestart);
vars.put("timestartString",timestartString);
//log. *** ("生成数值测试cccccccccc");
以上是针对登录token实效后重新刷新或者登录的实现 *** 的记录,后续获取其他同学有更好的 *** 可分享学习。
三、Jmeter 问题锦集
j *** a.io.FileNotFoundException:rmi_keystore.jks
1、不进行文件校验,打开 [ jmeter安装目录 ] *** ;bin *** ;jmeter-server.bat文件
2、运行 create-rmi-keystore.bat(Windows)/ create-rmi-keystore.sh(Linux)文件并自行填写相关信息,运行后,bin目录下会多出一个 rmi_keystore.jks文件,然后将这个文件拷贝到想要运行的 sl *** e机上,就可以不使用 *** 1
Error in rconfig *** e() method j *** a.rmi.ConnectException: Connection refused to host: 1 *** .168.xxx.xxx; nested exception is:
j *** a.net.ConnectException: Connection timed out: connect
1、1 *** .168.xxx.xxx这个IP可能是虚拟网卡的 IP,关闭所有的虚拟网卡,只保留本地 ***
2、检查sl *** e服务器的防火墙是否打开,需要关闭
3、通信双方的机器没有识别到有效的远程IP,考虑将远程 *** 调用服务器的主机IP进行固定设置,再作效果检查
4、开始测试,但是测试速度非常慢,测试结果也是非常大的值,检查sl *** e服务器和被测试服务器之间是否可以 ping通 ***
Master机修改 jmeter.bat(windows)/ jmeter.sh(Liunx)
Error in rconfig *** e() method j *** a.rmi.ConnectException:Connection refused to host
j *** a.net.ConnectException:Connection timed out:connect
由于连接被拒绝,这意味着防火墙可能已切断连接
需要在JMeter和目标服务器之间打开端口
Response too large to be displayed. Size: 412152> 204800
1、打开 [ jmeter安装目录 ] *** ;bin *** ;user.property文件
2、右击测试用例——添加—— *** ——保存响应到文件,填写要保存的文件名
3、将文件中的返回结果粘贴到此用例的响应断言中
Not able to find J *** a executable or version. Please check yo *** J *** a installation. errorl *** l=2
1、errorl *** l=1,当前 *** 安装的 jdk版本过低
2、errorl *** l=2,没有配置 jdk环境变量所致
3、errorl *** l=3,当前 *** 安装的 jdk版本过低,不符合 jmeter要求所致
配置对应这个 jmeter版本的 jdk版本的环境变量
打开 jmeter.bat文件,注释 set DUMP=-XX:+HeapDumpOnOutOfMemoryError
1、检查 salve机器上的 jmeter-server是否启动
2、检查 JMeter.properties中 remote_hosts的配置是否错误
1、启动 salve机器上的 jmeter-server
2、正确配置 JMeter.properties中 remote_hosts
1、Non HTTP response message: The target server failed to respond
2、Non HTTP response code: j *** a.net.SocketException
调整超时时间,jmeter的 http请求中,工具会默认勾选 Use KeepAlive,在运行时,jmeter.properties中的 httpclient.timeout设置默认是注销的,也就是连接空闲,立马断开
打开 [ jmeter安装目录 ] *** ;bin *** ;jmeter.properties文件
根据情况设置10-60毫秒,能解决报错问题,问题还是没有真正解决
Server failed to start: j *** a.rmi.RemoteException: Cannot start.*** is a loopback address.
An error occ *** red: Cannot start.*** is a loopback address.
2、打开 [ jmeter安装目录 ] *** ;bin *** ;jmeter.properties文件
Waiting for possible shutdown message on port 4445
在 *** ster跑测试脚本时,会一直提示如下信息,导致测试一直跑不起来
这个是用于 *** shutdown message的,如果不需要,可以直接设置为0即可
打开 [ jmeter安装目录 ] *** ;bin *** ;jmeter.properties文件
Could not reserve enough space for 2097152KB object heap
打开 [ jmeter安装目录 ] *** ;bin *** ;jmeter.bat文件
could not find ApacheJmeter_core.jar
jmeter.gui.action.RemoteStart: Failed to initialise remote engine j *** a.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
配置了 127.0.0.1,但是未开启本机的 jmeter-s *** r.bat/jmeter-s *** r
开启本机的 jmeter-s *** r.bat/jmeter-s *** r
运行成功,响应断言也正确通过,但是察看结果树里为空
模式(Mode)(采样结果发送模式)默认是Standard,在采样结果产生后立即发送
打开 [ jmeter安装目录 ] *** ;bin *** ;jmeter.properties文件
Response code: Non HTTP response code: j *** a.net.SocketTimeoutException
Response message: Non HTTP response message: connect timed out
发生该错误时,jmeter已经连接上服务器,查看load time没有超过设定的request timeout时间,错误可能的原因是,服务器那边未处理该线程的请求,或者为保证服务能力,断掉了连接。
为了验证该猜想,持续大于半小时向服务器发送该并发数量的请求,一段时间后,request收到503的response,证明猜想
J *** a.NET.BindException: Address already in use: connect
短时间内new socket *** 作很多,而socket.close() *** 作并不能立即释放绑定的端口,而是把端口设置为TIMEWAIT状态,过段时间(默认240s)才释放,(用netstat-na可以看到),最后 *** 资源耗尽(windows上是耗尽了pool of ephemeral ports,这段区间在1024-5000之间)
在运行 JMeter agent的机器上,添加注册表条目HKEY_LOCAL_MACHINE *** ;SYSTEM *** ;C *** rentControlSet *** ;Services *** ;Tcpip *** ;Parameters
jmeter脚本运行的过程中,服务器 *** 能参数没有明显变化(CPU,内存,I/O),但request的响应时间很长。
观察jmeter agent机器 *** 使用情况, *** 使用持续达到带宽的 *** 峰值。request发送的过程中pending在 *** 中,实际并发的request并没有同一时间到达服务器,所以服务器没有明显变化。
提高jmeter agent机器 *** 带宽。
j *** a.io.IOException: Error writing to server
j *** a.net.SocketException: Connection reset
打开 [ jmeter安装目录 ] *** ;bin *** ;jmeter.bat文件
j *** a.net.SocketException: Unreco *** ized Windows Sockets error: 0: recv failed
打开 [ jmeter安装目录 ] *** ;bin *** ;jmeter.properties文件
j *** a.net.SocketTimeoutException: Read timed out
打开 [ jmeter安装目录 ] *** ;bin *** ;jmeter.properties文件
For perfor *** nce it is a *** ised to check"Interpret Condition as Variable Expression"
and use __jexl3 or __groovy evaluating to true or false or a variable that contains true or false.
${JMeterThread.last_sample_ok) can be used to test if last sampler was successful
对于4.x之后的版本 JMeter中的 If Controller,在Expression输入框中直接输入判断的表达式,如1== 1、${threadNum}> 2,而不做求值计算(true/false)就执行JMeter是没有效的,达不到预期的效果。采用JMeter比较早期的版本(如:2.x版本),直接就写判断的表达式,并没有作真假求值运算也能被识别
1、在Expression输入框中,建议将判断条件解释为变量表达式,并使用__jexl3函数或__groovy函数对该变量表达式求值为true/false
2、可输入值为true/false的变量
3、${JMeterThread.last_sample_ok}可用于检测最后一个取样器是否成功执行
j *** a.lang.IllegalStateException: Engine is busy- please try later
2、控制机、执行机未设置需要连接的IP
2、打开 [ jmeter安装目录 ] *** ;bin *** ;jmeter-server文件
3、打开 [ jmeter安装目录 ] *** ;bin *** ;system.properties文件
Response code: Non HTTP response code:org.apache.http.conn.ConnectTimeoutException
Response message: Non HTTP responsemessage: Connect to 10.15.107.112:90 *** timed out
Non HTTPresponse code说明没有收到来自服务器的 response。
导致 ConnectTimeoutException错误的可能有 JMeter本身问题,也可能是服务器问题。
通过分布式运行 JMeter的方式来消除 JMeter本身的影响
关于jmeter时间函数的内容到此结束,希望对大家有所帮助。