无法在Jmeter

时间:2018-06-12 15:05:48

标签: jmeter counter beanshell

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

Jmeter Sample Test Plan

用户参数如下所示:

Jmeter Sample Test Plan

我只是简单地调用一个端点,在Regex Extractor I的帮助下根据找到的ID读取响应体,然后调用另一个端点。 ForEach循环有助于确保所有找到的ID在路径中使用ID作为参数调用相同的端点。

我想通过ForEach循环中的另一个HTTP请求尝试实现的是读取响应,如果正文包含星期一,则递增用户参数 星期一乘以1,星期二相同,其他用户参数相同。理想情况下,在测试套件的最后,我应该得到这样的东西:

  1. 星期一 - 5
  2. 星期二 - 3
  3. 星期三 - null或零
  4. 星期四 - null或零
  5. 星期五 - 1
  6. 星期六 - 12
  7. 星期日 - 8
  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);
        };
    

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

1 个答案:

答案 0 :(得分:0)

  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变量

  3. 示例代码如下:

    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文章