【问题标题】:JMeter - Running preprocessor when called from command line?JMeter - 从命令行调用时运行预处理器?
【发布时间】:2019-08-14 19:06:45
【问题描述】:

我对 JMeter 很陌生。

我的团队有现有的 JMeter 测试计划,我们通常通过 GUI 运行这些计划。我正在尝试从命令行运行它。

在我们的测试计划中,我们在测试计划级别声明了一堆变量。这些变量包含用于设置不同环境的信息(例如 test、prod、dev)。在 TestPlan 的正下方是一个 JSR223 预处理器,它基本上采用显示您尝试在哪个环境中运行的变量并将主机名、端口等设置为该环境的值。

当我使用 GUI 运行测试时,它在所选环境下完美运行。但是,当我使用以下命令通过命令行运行它时:

jmeter -n -t testName.jmx -l Results.csv

它会尝试在默认环境下运行,并且不会将其更改为我想要的环境。我尝试添加-Jenv=dev,但这似乎没有任何区别。

从命令行调用时预处理器不运行吗?可能还有其他我想念的东西吗?由于我在这方面缺乏经验,我什至不确定如何判断问题所在。

非常感谢!

【问题讨论】:

    标签: bash command-line jmeter


    【解决方案1】:

    很难断定 jmeter 脚本中的确切问题是什么。查看问题陈述,我可以感觉到您需要找到从命令行传递变量并在脚本中处理它的正确方法。

    从命令行传递变量并在 jmeter 中处理的示例如下所示:

    1. 在 jmeter 中声明一个带有 value 的变量作为属性。你可以在这里使用任何东西,我使用了用户定义的变量。变量env is declared as ${__P(env)}

    1. 使用 JSR 处理该变量。这里只是将参数传递的值打印到 jmeter 日志中。现在可以使用${env} 变量重用该值[注意它是一个变量而不是属性,因为我们在用户定义的变量中声明了这种方式]。

    String valuePassed = vars.get("env"); log.info("Parameter passed from command line: " + valuePassed);

    1. 使用以下命令从命令行运行:

      jmeter -n -t <>.jmx -Jenv=Prod -j sample.log

    2. 结果显示在日志文件中

    【讨论】:

      【解决方案2】:

      PreProcessors 仅与Samplers 一起执行

      如果您的Thread Group 中没有任何采样器 - 不会执行任何预处理器。

      还要注意预处理器服从 JMeter Scoping Rules 的机智:

      • 如果您将预处理器添加为采样器的子级 - 预处理器将在给定采样器之前执行
      • 如果您在同一级别有 2 个采样器和一个预处理器 - 预处理器将在每个采样器之前执行

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-20
        • 2012-05-23
        • 1970-01-01
        • 2010-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多