执行包含 java -jar Runtime.exec() 的 shell 脚本,需要 java,OS 级别或应用程序级别

Executing shell script containing java -jar Runtime.exec(), which java will it take, OS level or application level

我正在尝试通过 beanshell 从我的 jmeter 测试中执行一个 java jar。

我遵循的方法是创建一个 shell 脚本,使用 Runtime.exec() 函数通过 beanshell 执行它。

我的问题是这个 shell 脚本的执行是否会从 instance/host/OS 级别开始 java,或者它将作为当前 [=] 的一部分执行39=] 应用程序正在使用。

可能有一些悬而未决的问题,我想在此之前提供答案:

  1. 我有一个 Maven 项目,我在其中指定 java。
  2. 构建运行具有 beanshell 执行 jar 文件的 jmeter 脚本。
  3. 我还对 jar 执行的输出进行了一些处理(将特定输出写入另一个文件,因此我编写了 shell 脚本)。
  4. 我使用这个特定的输出,并在查询之前用它添加到我在 jmeter 中的请求。

感谢任何帮助。

在某种程度上,两者都是。

shell 脚本将作为您的 Java 程序的一部分执行,但它将使用系统默认的 Java 可执行文件执行,除非您指定了 Java 在 exec() 方法调用中可执行。

取决于您 运行 您的应用程序。如果你只是使用

Runtime.getRuntime().exec("java -jar ...."); 

Process instance will look for java executable which is available in your OS PATH。如果 PATH 中没有 java 可执行文件 - 调用将失败。


请注意 starting from JMeter 3.1 it is recommended to use JSR223 Test Elements and Groovy language 适用于任何形式的脚本,因此请考虑在下一个可用机会时迁移到 Groovy。例如,您可以启动该过程并获得如下简单的输出:

String response = "your command".execute().text

此外,与其 运行将您的 .jar 作为单独的进程添加,不如将其添加到 JMeter Classpath and call necessary functions directly from the Groovy code. See Apache Groovy - Why and How You Should Use It 文章中以获取更多信息。