【问题标题】:Launch aws cli commands from jmeter从 jmeter 启动 aws cli 命令
【发布时间】:2021-01-21 04:31:39
【问题描述】:

我正在尝试使用 OS Process Sampler 在 JMeter 中运行 aws cli 命令。 我将在安装了 JMeter 和 aws cli 的 docker 上运行它。但在我能做到这一点之前,我尝试在我的 Mac 上本地运行它,但到目前为止无法运行 aws 命令。

在我的本地终端上,例如我可以运行: 一个。 aws --版本 湾。 bash j.sh (aws --version) 两者都返回 aws-cli/2.0.8 Python/3.7.4 Darwin/18.7.0 botocore/2.0.0dev12

这确认 aws cli 在路径中可用,可全局访问。

但是,当我从 OS Process sampler 运行相同的命令时,我尝试了以下操作: 一个。

Working Directory: /Users/tester/Downloads/apache-jmeter-5.1.1/bin
Environment: {}
Executing: bash aws --version

回复:bash: aws --version: No such file or directory

b.

Working Directory: /Users/tester
Environment: {}
Executing: bash j.sh
where j.sh just contains the aws --version command

回复:j.sh: line 1: aws: command not found

我错过了什么?

【问题讨论】:

  • 感谢 Vadim 帮助编辑我的问题。

标签: jmeter aws-cli


【解决方案1】:

在 JMeter 中运行 aws cli 命令:

  1. OS Process Sampler 添加到您的测试计划中。
  2. Command 字段中输入您的命令:aws
  3. Command Parameters 中添加您需要的任何参数,例如:--version

  1. 将查看结果树添加到您的线程组,运行测试并查看响应正文:

    aws-cli/2.0.0 Python/3.7.5 Windows/10 botocore/2.0.0dev4

【讨论】:

    【解决方案2】:

    对于那些需要从 JMeter 在 Windows 上运行 AWS CLI v2 命令的人(我使用 10)。 以下是我的设置。

    原来的命令是:

    $ aws dynamodb list-tables
    

    结果:

    【讨论】:

      【解决方案3】:

      我相信你需要配置你的OS Process Sampler如下:

      • 命令:/bin/bash
      • 参数一:-c
      • 参数二:aws --version

      演示:

      来自bash manual page

      -c 如果存在 -c 选项,则从 第一个非选项参数 command_string。如果有 command_string 之后的参数,第一个参数是 分配给 $0 并且任何剩余的参数都分配给 位置参数。对 $0 的赋值设置 shell 的名称,用于警告和错误 消息。

      更多信息:How to Run External Commands and Programs Locally and Remotely from JMeter

      【讨论】:

      • 感谢 Dmitri,这可能适用于 Windows。在 Mac 上我无法让它工作。在 Mac 上工作的内容如下: 命令:/usr/local/bin/aws 命令参数:--version
      【解决方案4】:

      感谢 Dmitri 和 Vadim 对我的问题的回复。不幸的是,这两个示例都适用于 Windows,其中 OS Process sampler 的工作方式与 Mac 不同。我还在 Mac 上使用 OS Process Sampler 进行了一些调整:

      Mac 的主要区别在于 jmeter 需要安装 aws cli 的位置

      /usr/local/bin/aws
      

      我可以通过哪个命令找到这个

      which aws
      

      我还决定使用 Beanshell 采样器和日志记录来执行此操作,这将允许我更好地编写脚本和控制我的其他需求。 这是我的参考代码:

      try {
      
          Process p = Runtime.getRuntime().exec("/usr/local/bin/aws --version");
          p.waitFor();
      
      
          BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
          StringBuilder logCommandOutput = new StringBuilder();
          String line;
          while ((line = in.readLine()) != null) {
              logCommandOutput.append(line);
          } in .close();
          log.info("Output: " + logCommandOutput.toString());
      } catch (Exception e) {
          log.error("exception" + e);
      
      }
      

      希望这对正在尝试做同样事情的人有所帮助。

      【讨论】:

      • 你也在docker中测试过吗?你打算在 Docker 中使用什么操作系统来运行这个测试?
      • 嗨 Vadim,我将使用 debian linux。我在 docker 上运行了测试,没有看到任何错误。但需要整理容器上的aws配置文件,尝试更多的aws命令,看看它是否真的有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 2023-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多