用于文件写入的 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 所以可能值得考虑迁移。