通过自定义程序计算年龄

时间:2015-06-09 14:01:51

标签: jmeter parameterization

有一个POST请求同时提交出生日期&年龄。

我从上一个请求中找到了出生日期,通过正则表达式提取器提取它,并在POST请求中传递变量。

但我没有从之前的请求中找到Age。尝试通过Firebug计算Age元素。但它找不到,因为此字段是由出生日期字段自动计算的,并且该字段是只读的。

如何获取Age字段的值?

可能的解决方案可能是使用一些Jmeter内置函数或在任何脚本语言中编写一些程序。但我不知道如何在Jmeter中做到这一点。

提前致谢。

2 个答案:

答案 0 :(得分:0)

如果没有看到回复,我就无法说明是否可以提取。一个可行的解决方法是将一个后处理器添加到从中提取DOB的请求(可以是jsr223或beanshell),你可以从中获取DOB:

String dob = vars.get{"dateOfBirth"}

从那里你需要将其解析为一个日期,并将其与当前日期进行比较以获得年龄。然后你需要把#34;年龄"变量,以便JMeter可以访问它。

vars.put("age", String.valueOf(age))

答案 1 :(得分:0)

鉴于您有变量即“生日”,其值为“1970-05-15”,您可以使用Beanshell PreProcessor计算出人的年龄,如下所示:

  1. 添加Beanshell PreProcessor作为采样器的子项,需要传递出生日期和年龄。
  2. 将以下代码放入PreProcessor的“脚本”区域

    import java.text.SimpleDateFormat;        
    
    String birthDate = vars.get("birthDate");
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
    Date dateOfBirth = sdf.parse(birthDate);
    
    Calendar dob = Calendar.getInstance();
    dob.setTime(dateOfBirth);
    Calendar today = Calendar.getInstance();
    int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);
    if (today.get(Calendar.MONTH) < dob.get(Calendar.MONTH)) {
        age--;
    } else if (today.get(Calendar.MONTH) == dob.get(Calendar.MONTH)
            && today.get(Calendar.DAY_OF_MONTH) < dob.get(Calendar.DAY_OF_MONTH)) {
        age--;
    }
    
    vars.put("age",String.valueOf(age));
    
  3. 您可以将计算的年龄称为${age}
  4. 请参阅SimpleDateFormat JavaDoc有关“yyyy-mm-dd”模式的说明以及有关如何定义与您的应用日期和时间格式相匹配的模式的信息,以及有关在JMeter中了解脚本的How to use BeanShell: JMeter's favorite built-in component指南。