通过自定义程序计算年龄

Calculating Age by custom Program

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

我从之前的请求中找到了出生日期,通过正则表达式提取器将其提取出来,并在 POST 请求中传递了变量。

但是我没有找到之前请求的年龄。还尝试通过 Firebug 找出 Age 元素。但它没有找到,因为这个字段是根据出生日期字段自动计算的,而且该字段是只读的。

如何获取年龄字段的值?

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

提前致谢。

没有看到回复我不能说是否可以提取。一个可行的解决方法是将 Post 处理器添加到从中提取 DOB 的请求(这可以是 jsr223 或 beanshell),您可以从那里获取 DOB:

String dob = vars.get{"dateOfBirth"}

从那里您需要将其解析为日期并将其与当前日期进行比较以获得年龄。然后您需要放置 "Age" 变量以便 JMeter 可以访问它。

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

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

  1. 添加一个 Beanshell 预处理器作为需要传递出生日期和年龄的采样器的子项。
  2. 将以下代码放入PreProcessor的"Script"区域

    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}

请参阅 SimpleDateFormat JavaDoc for explanation of "yyyy-mm-dd" pattern and information on how to define the one which matches your application date and time format and How to use BeanShell: JMeter's favorite built-in component 指南以了解 JMeter 中的脚本编写。