【问题标题】:How to execute Linux command or shell script from APACHE JMETER如何从 APACHE JMETER 执行 Linux 命令或 shell 脚本
【发布时间】:2015-05-12 20:40:23
【问题描述】:

如何从 APACHE JMETER 执行 Linux 命令或 shell 脚本

有人知道如何从 Jmeter 执行 linux 命令吗? 我在网上找到了这个链接http://www.technix.in/execute-linux-command-shell-script-apache-jmeter/,我尝试了这些步骤,但没有用。我看不到 SSH 采样器。 如果有人从 Jmeter 运行 shell 脚本有任何成功,请分享。 提前致谢

【问题讨论】:

    标签: jmeter


    【解决方案1】:

    如果您需要在远程系统上执行命令,请执行以下步骤:

    1. 下载JSch.jar - 从Java 语言提供SSH 和SCP 协议操作的库,并将其放置到JMeter 安装的/lib 文件夹中
    2. 下载 groovy-all.jar - 对 Jmeter 的 Groovy 脚本引擎支持并将其也放到 /lib 文件夹中
    3. 重启 JMeter 以获取库
    4. JSR223 Sampler 添加到您的测试计划并从“语言”下拉菜单中选择“groovy”
    5. 遵循Exec.java Jsch 教程中的示例代码来实现您自己的逻辑。

    你也可以参考下面的sn-p,它在远程*nix系统上执行ls命令并返回命令执行结果。请确保您提供有效的usernamehostnamepassword,以便采样器可以工作

    import com.jcraft.jsch.Channel;
    import com.jcraft.jsch.ChannelExec;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.Session;
    
    JSch jSch = new JSch();
    Session session = jSch.getSession("username", "hostname", 22);
    session.setConfig("StrictHostKeyChecking", "no");
    session.setPassword("password");
    session.connect();
    
    Channel channel = session.openChannel("exec");
    
    String command = "ls";
    ((ChannelExec) channel).setCommand(command);
    channel.setInputStream(null);
    ((ChannelExec) channel).setErrStream(System.err);
    InputStream in = channel.getInputStream();
    
    channel.connect();
    StringBuilder rv = new StringBuilder();
    rv.append("New system date: ");
    byte[] tmp = new byte[1024];
    while (true) {
      while (in.available() > 0) {
          int i = in.read(tmp, 0, 1024);
          if (i < 0) break;
          rv.append(new String(tmp, 0, i));
      }
      if (channel.isClosed()) {
          break;
      }
      try {
          Thread.sleep(100);
      } catch (Exception ee) {
          ee.printStackTrace();
      }
    }
    in.close();
    channel.disconnect();
    session.disconnect();        
    SampleResult.setResponseData(rv.toString().getBytes());
    

    有关 Groovy 脚本引擎安装和最佳脚本实践的详细信息,请参阅 Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For!

    【讨论】:

    • 谢谢大家的回复。赞赏。
    【解决方案2】:

    查看为此完成并在核心中可用的 OS Process Sampler:

    【讨论】:

      【解决方案3】:

      您可以在 jmeter 中使用 Beanshell 脚本,然后您就可以拥有类似的东西:

          String command="your command here";
          StringBuffer output = new StringBuffer();
      
          Process p;
          try {
              p = Runtime.getRuntime().exec(command);
              p.waitFor();
              BufferedReader reader = 
                              new BufferedReader(new InputStreamReader(p.getInputStream()));
      
                          String line = "";           
              while ((line = reader.readLine())!= null) {
                  output.append(line + "\n");
              }
      
          } catch (Exception e) {
              e.printStackTrace();
          }
      
          log.inf(output.toString());
      

      【讨论】:

        【解决方案4】:

        here 这个关于执行 jar 文件的答案。但其他操作系统命令的想法相同。

        1. 使用 OS_Process_Sampler
        2. 使用 OS shell 填充字段 command,例如 /bin/bash 或类似物。
        3. -c 设置第一个参数
        4. 你的命令设置下一个参数
        5. 采样器准备执行:)

        【讨论】: