在JMeter中运行sh脚本

9

在进行负载测试时,我希望在运行jmeter测试之前随机化我的测试值。为此,我想使用以下bash脚本:

#! /bin/bash
cat data.dsv | shuf > randomdata.dsv

这应该在jmeter中执行。我尝试使用BeanShell Sampler和此命令(我使用此命令始终找到正确的文件路径,无论在哪台机器上执行它):

execute(${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}random.sh)

但我总是收到这个错误信息:
ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval   In file: inline evaluation of: ``execute(/home/user/git/path/'' Encountered "( /" at line 1, column 8.

有什么想法或者是一些最佳实践吗?我还没有找到。


这个 execute(/home/user/git/path) 是你的用户 shell 初始化脚本中的片段,还是仅仅偶然出现的东西? - Etan Reisner
1个回答

14

我建议改用操作系统进程采样器,这样会更容易使用,类似于:

操作系统进程采样器示例配置

关于Beanshell方法,没有必要在Beanshell采样器中使用__Beanshell函数,因为每次调用该函数都会创建一个Beanshell解释器实例,导致性能开销。您可以将代码放入采样器的“脚本”区域中。

import org.apache.jmeter.services.FileServer;

StringBuilder command = new StringBuilder();
FileServer fileServer = FileServer.getFileServer();
command.append(fileServer.getBaseDir());
command.append(System.getProperty("file.separator"));
command.append("random.sh");
Process process = Runtime.getRuntime().exec(command.toString());
int returnValue = process.waitFor();
return String.valueOf(returnValue);

请查看如何使用BeanShell:JMeter最喜欢的内置组件指南,了解在JMeter中使用Beanshell脚本的信息。


谢谢您的建议,但是使用这些链接(我也尝试了OS进程采样器),我遗憾地无法完成我想要的。我真的不知道为什么似乎没有针对这种情况的简单示例。我在尝试一些奇怪的东西吗? - KingKoelsch
1
你可能需要在 OS Process Sampler 中提供 shell 解释器的完整路径和脚本的完整路径,例如 /bin/bash /opt/jmeter/bin/random.sh,这应该能够解决问题。如果需要,我可以更新答案并提供 OS Process Sampler 的截图。 - Dmitri T
感谢您的关注!如果您能向我展示操作系统进程采样器的截图,我将不胜感激。 - KingKoelsch
我已经更新了我的回答,并附上截图,如有需要,请随意替换工作目录和参数。 - Dmitri T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接