用于文件写入的 Jmeter Beanshell 代码问题
Issue with Jmeter Beanshellcode for file writing
我目前正在开发一个 jmeter JDBC 脚本,其中涉及在数据库上执行大量查询以设置测试数据。
这是一个有点复杂的脚本,我需要从结果集中验证和提取特定的文件,然后将其全部写入文件并在下一个线程组中使用
我写了一个如下的Beanshell代码来验证一个特定的条件
FileWriter fWriter = new FileWriter ("C:/UserPath/Number.csv", true);
BufferedWriter buff = new BufferedWriter(fWriter);
if (${JMeterThread.last_sample_ok} == true)
{
buff.write(vars.get("p_PI_ID") + "," + vars.get("p_AC_Number"));
buff.write(System.getProperty("line.separator"));
log.info(vars.get("Update_Assertion"));
}
buff.close();
条件是我要在 JMeterThread.last_sample_ok= true
时将数据写入文件
我尝试了各种组合来编写此代码,但无论条件如何,此代码都会写入文件。到目前为止,我已经尝试了以下条件
if (${JMeterThread.last_sample_ok} == true)
if (${JMeterThread.last_sample_ok} != false)
if (!${JMeterThread.last_sample_ok} == false)
我也曾尝试使用其他一些逻辑但没有成功,问题是这段代码与我正在做的其他验证工作正常,不确定这里有什么问题
我还尝试将 beanshell post 处理器放在 JDBC 样本之外,然后应该捕获采样器执行的状态为 True 或 false。
感谢阅读。
你可以试试
if (prev.isSuccessful()){
}
顺便说一句,建议从 Beanshell 切换到 JSR223 元素。
不要将 JMeter Functions or Variables 内联到脚本中,要么使用参数部分,要么改用基于代码的等效项。所以改变这一行:
if (${JMeterThread.last_sample_ok} == true)
给这个:
if (vars.get("JMeterThread.last_sample_ok").equals("true"))
其中 vars
代表 JMeterVariables class instance, see Top 8 JMeter Java Classes You Should Be Using with Groovy 文章以获取有关此内容和其他 JMeter API 可用于 JSR223 测试元素的简写的更多信息。
另一种选择是将此变量放入“参数”部分并转到 if (Parameters.equals("true"))
表达式:
最后但并非最不重要的一点 since JMeter 3.1 you're supposed to use JSR223 Test Elements and Groovy language for scripting 所以可能值得考虑迁移。
我目前正在开发一个 jmeter JDBC 脚本,其中涉及在数据库上执行大量查询以设置测试数据。
这是一个有点复杂的脚本,我需要从结果集中验证和提取特定的文件,然后将其全部写入文件并在下一个线程组中使用
我写了一个如下的Beanshell代码来验证一个特定的条件
FileWriter fWriter = new FileWriter ("C:/UserPath/Number.csv", true);
BufferedWriter buff = new BufferedWriter(fWriter);
if (${JMeterThread.last_sample_ok} == true)
{
buff.write(vars.get("p_PI_ID") + "," + vars.get("p_AC_Number"));
buff.write(System.getProperty("line.separator"));
log.info(vars.get("Update_Assertion"));
}
buff.close();
条件是我要在 JMeterThread.last_sample_ok= true
时将数据写入文件我尝试了各种组合来编写此代码,但无论条件如何,此代码都会写入文件。到目前为止,我已经尝试了以下条件
if (${JMeterThread.last_sample_ok} == true)
if (${JMeterThread.last_sample_ok} != false)
if (!${JMeterThread.last_sample_ok} == false)
我也曾尝试使用其他一些逻辑但没有成功,问题是这段代码与我正在做的其他验证工作正常,不确定这里有什么问题
我还尝试将 beanshell post 处理器放在 JDBC 样本之外,然后应该捕获采样器执行的状态为 True 或 false。
感谢阅读。
你可以试试
if (prev.isSuccessful()){
}
顺便说一句,建议从 Beanshell 切换到 JSR223 元素。
不要将 JMeter Functions or Variables 内联到脚本中,要么使用参数部分,要么改用基于代码的等效项。所以改变这一行:
if (${JMeterThread.last_sample_ok} == true)
给这个:
if (vars.get("JMeterThread.last_sample_ok").equals("true"))
其中 vars
代表 JMeterVariables class instance, see Top 8 JMeter Java Classes You Should Be Using with Groovy 文章以获取有关此内容和其他 JMeter API 可用于 JSR223 测试元素的简写的更多信息。
另一种选择是将此变量放入“参数”部分并转到 if (Parameters.equals("true"))
表达式:
最后但并非最不重要的一点 since JMeter 3.1 you're supposed to use JSR223 Test Elements and Groovy language for scripting 所以可能值得考虑迁移。