我需要使用一些python脚本在目标主机上启动JMeter-server。 Jmeter有临时目录,如 / tmp / jmeter-3sc0ppq5 / 。在脚本中,我有一些正在创建文件的BeanShell,它需要出现在 bin / 目录中的自己的基本目录中:
File file = new File('errors' + File.separator + fileName);
file.getParentFile().mkdirs();
但最后,它出现了(以及 / root / 中的JMeter-server.log文件) 我的python脚本是(简化):
stdin, stdout, stderr = ssh.exec_command('cd /tmp/jmeter-3sc0ppq5/bin/')
run_jmeter_server_cmd = 'nohup java -jar "/tmp/jmeter-3sc0ppq5/bin/ApacheJMeter.jar" -Duser.dir=/tmp/jmeter-3sc0ppq5/bin/ApacheJMeter.jar -Dserver_port=11111 -s -j jmeter-server.log > /dev/null 2>&1'
command = 'echo $$; exec ' + run_jmeter_server_cmd
stdin, stdout, stderr = ssh.exec_command(command)
pid = int(stdout.readline())
如您所见,甚至尝试显式发送user.dir目录。 jmeter-server.log出现在/ root /但它说这个jmeter进程从正确的目录中获取所有配置:
2017-12-20 09:26:49,551 INFO o.a.j.u.JMeterUtils: Setting Locale to en_DK
2017-12-20 09:26:49,566 INFO o.a.j.JMeter: Loading user properties from: /tmp/jmeter-3sc0ppq5/bin/user.properties
2017-12-20 09:26:49,567 INFO o.a.j.JMeter: Loading system properties from: /tmp/jmeter-3sc0ppq5/bin/system.properties
2017-12-20 09:26:49,567 INFO o.a.j.JMeter: Setting System property: java.rmi.server.hostname=loadtest08-qa
2017-12-20 09:26:49,567 INFO o.a.j.JMeter: Setting System property: user.dir=/tmp/jmeter-3sc0ppq5/bin/
2017-12-20 09:26:49,567 INFO o.a.j.JMeter: Setting System property: server_port=10001
..............
2017-12-20 09:26:49,580 INFO o.a.j.JMeter: JMeterHome=/tmp/jmeter-3sc0ppq5
2017-12-20 09:26:49,580 INFO o.a.j.JMeter: user.dir =/tmp/jmeter-3sc0ppq5/bin/
2017-12-20 09:26:49,580 INFO o.a.j.JMeter: PWD =/tmp/jmeter-3sc0ppq5/bin
但是脚本创建的所有文件都会转到/ root /目录以及提到的jmeter-server.log
我找到的唯一一个解决方案是将run和cd命令合并为一个,但是后来我无法为java进程获得正确的PID:
run_jmeter_server_cmd = 'cd /tmp/jmeter-3sc0ppq5/bin/ApacheJMeter.jar && nohup java -jar "/tmp/jmeter-3sc0ppq5/bin/ApacheJMeter.jar" -Duser.dir=/tmp/jmeter-3sc0ppq5/bin/ApacheJMeter.jar -Dserver_port=11111 -s -j jmeter-server.log > /dev/null 2>&1
有没有办法强制jmeter使用自己的目录而不在那里做cd?
答案 0 :(得分:0)
一个好的做法是将基目录作为属性发送,并在需要时使用它。
您可以使用
发送JMeter command line-JbaseDir=/tmp/jmeter-3sc0ppq5/
在server mode中,您可能需要使用-G选项:
-G
用于定义要在服务器中设置的JMeter属性
答案 1 :(得分:0)
我的期望是您需要在调用JMeter之前传递此-Duser.dir=/tmp/jmeter-3sc0ppq5/bin
参数,然后修改您的命令,如:
run_jmeter_server_cmd = 'nohup java -Duser.dir=/tmp/jmeter-3sc0ppq5/bin -Dserver_port=11111 -jar "/tmp/jmeter-3sc0ppq5/bin/ApacheJMeter.jar" -s -j jmeter-server.log > /dev/null 2>&1'
它应该按预期开始工作。如有任何问题,请查看 jmeter.log 文件,特别是查找与o.a.j.s.FileServer:
相关的行。
您还可以使用jmeter.save.saveservice.base_prefix
属性值,并考虑使用前面提到的FileServer类来动态检测当前的JMeter主目录。
还要注意从JMeter version 3.1 it is recommended to use Groovy for any form of scripting开始盯着,所以请考虑在下一个可用机会上迁移到JSR223 Test Elements。