我是Jmeter BeanShell Scripting / Java的新手,目前使用下面的脚本遇到问题。
使用正则表达式提取器我能够提取所有可能值的数组。例如:10个日期值,变量定义为${RegExValue_All}
(模板:$1$
;匹配:-1
)
样本值:
01/01/2017
01/01/2017
01/01/2017
04/01/2017
05/01/2017
07/01/2017
07/01/2017
08/01/2017
10/01/2017
10/01/2017
现在我正在尝试编写一个BeanShell脚本来匹配特定日期并提取其序数/索引/迭代次数并将其保存到当前为空的用户定义变量${Matched_Iteration_Value}
。
当我使用下面的代码时,我能够比较正确的所需值,因为我已将循环计数设置为10但无法保存序数/索引/迭代次数并获得各种错误。
此外,我希望代码在获得第一个匹配后立即停止执行,并将其迭代编号保存在我需要在后续请求中使用的变量中。
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
matches = (vars.get("RegExValue _All"));
for (int i=1; i<=20; i++) {
if (vars.get("cPIGValueDate_All_" + i).equals("07/01/2017")) {
log.info("Variable: cPIGValueDate_All_" + i + " is the Correct PIG");
vars.putobject("Matched_Iteration_Value ",i);
}
}
答案 0 :(得分:0)
你的脚本和解释有点不一致,所以我必须假设一些事情:
RegExValue
。因此,对于匹配:-1
,当它找到多于1个日期时,它会将它们保存为名称为RegExValue_1
,RegExValue_2
RegExValue _All
,因为您正在检索它,但未在任何地方使用它,并且它不是您的问题的一部分dd/MM/yyyy
所以
RegExValue_matchNr
的变量,当正则表达式有多个匹配时,该变量由JMeter自动创建。这比硬编码循环要好20。Date
将字符串中的预期和实际日期转换为SimpleDateFormat
。以下是代码:
import java.lang.Integer;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
// 1.
int count = 0;
try {
count = Integer.parseInt(vars.get("RegExValue_matchNr"));
}
catch(Exception e) { }
// 2.
DateFormat format = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH);
Date expectedDate = format.parse("07/01/2017");
for(int i = 1; i <= count; i++)
{
Date actualDate = null;
try {
actualDate = format.parse(vars.get("RegExValue_" + i));
}
catch(Exception e) { }
// 3.
if(actualDate != null && expectedDate.compareTo(actualDate) == 0) {
log.info("Variable: RegExValue_" + i + " is the Correct PIG");
// 4.
vars.put("Matched_Iteration_Value", "" + i);
return;
}
}