使用python脚本,基本目录启动Jmeter服务器

时间:2017-12-20 09:53:36

标签: python jmeter

我需要使用一些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?

2 个答案:

答案 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