JMeterThread:Test failed! java.l
一、问题描述
JMeter执行分布式测试时,Windows主控机(Master机)上JMeter的GUI界面中操作【Remote Start All】,发现并没有从负载机返回数据到主控机的JMeter界面中,到Linux负载机(Slave机)中jmeter-server.log日志文件中查询,其中抛出如下异常:
2019-01-03 15:43:44,086 INFO o.a.j.t.JMeterThread: Thread finished: Thread Group 1-19
2019-01-03 15:43:44,133 INFO o.a.j.t.JMeterThread: Thread started: Thread Group 1-20
2019-01-03 15:43:44,135 ERROR o.a.j.t.JMeterThread: Test failed!
java.lang.IllegalArgumentException: File E:\CI_Env\TestData\username.txt must exist and be readable
二、问题分析
提取jmeter-server.log日志中的关键信息 "ERROR o.a.j.t.JMeterThread: Test failed!
java.lang.IllegalArgumentException: File E:\CI_Env\TestData\username.txt must exist and be readable",提示JMeter设置的线程组执行失败,E:\CI_Env\TestData\username.txt 对应的文件 username.txt 不存在or不可读。
分析:
绝对路径(E:\CI_Env\TestData\username.txt)中的文件 username.txt 是Windows主控机上JMeter使用了【CSV Data Set Config】配置元件来配置参数化的用户名变量,达到模拟大量用户登录的场景。该绝对路径连同jmx脚本发送到Linux负载机执行时,Linux中并不能找到该路径以及该路径下的username.txt文件,因此执行不成功。
三、解决方案
前提:预先在主控机和负载机中分别对JMeter配置环境变量
1.主控机(Master):
1)将csv参数化文件username.txt存放于JMeter的bin目录下(与jmeter-server服务文件在同一目录),Windows中,如:E:\CI_Env\apache-jmeter-4.0\bin\username.txt
2)【CSV Data Set Config】配置元件中设置Filename:采用相对路径,如:username.txt
2.负载机(Slave):
将csv使用的参数化文件username.txt分别上传到每一台负载机的JMeter的bin目录下存放,Linux中,如:/usr/local/jmeter/apache-jmeter-4.0/bin/username.txt
执行测试效果如下:
参考资料:
[1] JMeter报错 ERROR o.a.j.t.JMeterThread: Test failed!
[2] Jmeter压测-负载机为windows和linux,参数化使用CSV Data Set Config
[3] Jmeter分布式测试中常见问题及注意事项
[4] 主机控制jmeter远程负载机发起压力时无法读取参数化csv文件数据的解决办法
[5] JMeter使用 远程csv文件注意