【问题标题】:Unable to set incremental variable in Jmeter无法在 Jmeter 中设置增量变量
【发布时间】:2018-06-13 01:08:23
【问题描述】:

这是我的简单 Jmeter 测试计划。

用户参数如下所示:

我只是调用一个端点,读取响应正文并在 Regex Extractor 的帮助下根据找到的 ID 调用另一个端点。 ForEach 循环有助于确保为所有找到的 ID 调用相同的端点,并将 ID 作为 Path 中的参数。

我试图在 ForEach 循环中使用 Another HTTP Request 来读取响应,如果正文包含 Monday,则增加 User Parameter 星期一 加 1,星期二 和所有其他 用户参数 相同。理想情况下,在测试套件结束时,我应该得到这样的结果:

  1. 星期一 - 5
  2. 星期二 - 3
  3. 星期三 - 空或零
  4. 星期四 - 空或零
  5. 星期五 - 1
  6. 星期六 - 12
  7. 星期日 - 8

根据我的 BeanShell 脚本,我希望我遵循所有正确的路径:

import org.apache.commons.lang.StringUtils;

    String response = new String(data);
    int Mondays = 0;
    int Tuesdays = 0;
    int Wednesdays = 0;
    int Thursdays = 0;
    int Fridays = 0;
    int Saturdays = 0;
    int Sundays = 0;

    if(response.contains("'DayOfWeek':'Monday'")){
        Mondays++;
        vars.put("Monday", Mondays.toString);
    };
    if(response.contains("'DayOfWeek':'Tuesday'")){
        Tuesdays++;
        vars.put("Tuesday", Tuesdays.toString);
    };
    if(response.contains("'DayOfWeek':'Wednesday'")){
        Wednesdays++;
        vars.put("Wednesday", Wednesdays.toString);
    };
    if(response.contains("'DayOfWeek':'Thursday'")){
        Thursdays++;
        vars.put("Thursday", Thursdays.toString);
    };
    if(response.contains("'DayOfWeek':'Friday'")){
        Fridays++;
        vars.put("Friday", Fridays.toString);
    };
    if(response.contains("'DayOfWeek':'Saturday'")){
        Saturdays++;
        vars.put("Saturday", Saturdays.toString);
    };
    if(response.contains("'DayOfWeek':'Sunday'")){
        Sundays++;
        vars.put("Sunday", Sundays.toString);
    };

我的小问题是 User Parameters 变量永远不会更新,并且总是在运行结束时等于 0。在这种情况下我做错了什么?以前有人遇到过这个任务吗?

【问题讨论】:

  • 还是无法解决这么简单的任务...
  • 这个问题有2个答案,但第二个不知何故消失了......

标签: jmeter counter beanshell


【解决方案1】:
  1. 注意starting from JMeter version 3.1 it is recommended to use Groovy for any form of scripting考虑迁移到JSR223 PostProcessor

  2. 考虑重复 'DayOfWeek':'xxx' 模式,您似乎不需要为每个工作日创建 7 个分支,您可以使用 Regular Expressions 提取当前值并设置或获取和递增相关的 JMeter 变量

示例代码类似于:

def day = (prev.getResponseDataAsString() =~ "'DayOfWeek':'(\\w+)'")[0].get(1)
def value = (vars.get(day) ?: '0') as int
value++
vars.put(day, value as String)

有关在 JMeter 测试中使用 Groovy 脚本的更多信息,请参阅 Apache Groovy - Why and How You Should Use It 文章

【讨论】:

  • 嗯,不知道 JSR223 Sampler 是 BeanShell 后处理器的替代品,直到你发帖才知道。谢谢。
  • 是的,但是根据“DayOfWeek”的值,我需要增加适当的变量,所以仍然需要分支(那些if语句)......
  • 顺便问一下,我在哪里可以找到关于 groovy 变量方法(如 prev、props、vars、ctx 等)的体面文档?
  • log.info(prev.getClass().getName() 将打印到prev 变量的jmeter.log 类名,您将能够在JavaDoc 中查看可用的属性/功能。例如,prev 是 [SampleResult] 的简写。您可以参考How to Use BeanShell: JMeter's Favorite Built-in Component 了解速记变量描述,这样您就不必自己寻找它们,而是坚持使用 Groovy 进行实际脚本编写。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 2014-11-10
相关资源
最近更新 更多