在某些情况下,示例结果的标签不会通过 BeanShell post 处理器更改
Sample result's label is not changed through BeanShell post processor for some conditions
我编写了这段代码,如果 status == 500,api 的名称将等于“FAKE_CLIENT_RETRY”,如果 api 的状态 == “错误”,名称将等于“FAKE_CLIENT_CALLBACK_ERROR”
import org.apache.jmeter.samplers.SampleResult;
//process main sample
if(("${status}").equals("500")) {
SampleResult.setResponseCodeOK();
SampleResult.setSuccessful(true);
vars.put("Api_Fake_Client_Name","FAKE_CLIENT_RETRY");
}else if(("${status}").equals("ERROR")){
SampleResult.setSuccessful(false);
vars.put("Api_Fake_Client_Name","FAKE_CLIENT_CALLBACK_ERROR");
}else{
vars.put("Api_Fake_Client_Name","FAKE_CLIENT_CALLBACK_SUCESS");
}
但即使状态 ==“错误”,它的名称 returns 也是“FAKE_CLIENT_RETRY”
最奇怪的是我知道执行进入了条件==“ERROR”的“if”,因为status==“ERROR”自带的return随着执行失败出现在Jmeter 和我在这种情况下将 return 强制为 return,但通过代码片段失败:
SampleResult.setSuccessful (false);
但是尽管已经输入,它还是忽略了要求重命名 api 的片段。
Jmeter 截图----> Jmeter response
以下脚本在 BeanShell Post Processor
内运行没有任何问题
if(("${status}").equals("500")) {
prev.setResponseCodeOK();
prev.setSuccessful(true);
prev.setSampleLabel("FAKE_CLIENT_RETRY");
vars.put("Api_Fake_Client_Name","FAKE_CLIENT_RETRY");
}else if(("${status}").equals("ERROR")){
prev.setSuccessful(false);
prev.setSampleLabel("FAKE_CLIENT_CALLBACK_ERROR");
vars.put("Api_Fake_Client_Name","FAKE_CLIENT_CALLBACK_ERROR");
}else{
prev.setSampleLabel("FAKE_CLIENT_CALLBACK_SUCESS");
vars.put("Api_Fake_Client_Name","FAKE_CLIENT_CALLBACK_SUCESS");
}
请注意,您可以通过变量 previous
访问 SampleResult。让我们使用 prev.setSampleLabel("Label");
设置样本结果的标签。
prev - (SampleResult) - gives access to the previous SampleResult
Migration to JSR223 PostProcessor+Groovy is highly recommended for performance, support of new Java features and limited maintenance of the BeanShell library
添加调试 Post 处理器以通过视图结果树查看 JMeter 变量。
Sample test plan (JMX) 在 GitHub 可用。
您正在断言中设置一个 Api_Fake_Client_Name
变量值,它将在当前采样器的下一次迭代期间的下一个采样器中可用(更新):
另请注意,从 JMeter 3.1 开始,您应该使用 JSR223 Test Elements and Groovy language for scripting,因此您可以将代码更改为:
switch (vars.get('status')) {
case '500':
prev.setResponseCodeOK()
prev.setSuccessful(true)
vars.put('Api_Fake_Client_Name', 'FAKE_CLIENT_RETRY');
prev.setSampleLabel('FAKE_CLIENT_RETRY')
break;
case 'ERROR':
prev.setSuccessful(false)
vars.put('Api_Fake_Client_Name', 'FAKE_CLIENT_CALLBACK_ERROR')
prev.setSampleLabel('FAKE_CLIENT_CALLBACK_ERROR')
break;
default:
vars.put('Api_Fake_Client_Name', 'FAKE_CLIENT_CALLBACK_SUCESS')
prev.setSampleLabel('FAKE_CLIENT_CALLBACK_SUCESS')
}
更多信息:
我编写了这段代码,如果 status == 500,api 的名称将等于“FAKE_CLIENT_RETRY”,如果 api 的状态 == “错误”,名称将等于“FAKE_CLIENT_CALLBACK_ERROR”
import org.apache.jmeter.samplers.SampleResult;
//process main sample
if(("${status}").equals("500")) {
SampleResult.setResponseCodeOK();
SampleResult.setSuccessful(true);
vars.put("Api_Fake_Client_Name","FAKE_CLIENT_RETRY");
}else if(("${status}").equals("ERROR")){
SampleResult.setSuccessful(false);
vars.put("Api_Fake_Client_Name","FAKE_CLIENT_CALLBACK_ERROR");
}else{
vars.put("Api_Fake_Client_Name","FAKE_CLIENT_CALLBACK_SUCESS");
}
但即使状态 ==“错误”,它的名称 returns 也是“FAKE_CLIENT_RETRY”
最奇怪的是我知道执行进入了条件==“ERROR”的“if”,因为status==“ERROR”自带的return随着执行失败出现在Jmeter 和我在这种情况下将 return 强制为 return,但通过代码片段失败:
SampleResult.setSuccessful (false);
但是尽管已经输入,它还是忽略了要求重命名 api 的片段。
Jmeter 截图----> Jmeter response
以下脚本在 BeanShell Post Processor
内运行没有任何问题
if(("${status}").equals("500")) {
prev.setResponseCodeOK();
prev.setSuccessful(true);
prev.setSampleLabel("FAKE_CLIENT_RETRY");
vars.put("Api_Fake_Client_Name","FAKE_CLIENT_RETRY");
}else if(("${status}").equals("ERROR")){
prev.setSuccessful(false);
prev.setSampleLabel("FAKE_CLIENT_CALLBACK_ERROR");
vars.put("Api_Fake_Client_Name","FAKE_CLIENT_CALLBACK_ERROR");
}else{
prev.setSampleLabel("FAKE_CLIENT_CALLBACK_SUCESS");
vars.put("Api_Fake_Client_Name","FAKE_CLIENT_CALLBACK_SUCESS");
}
请注意,您可以通过变量 previous
访问 SampleResult。让我们使用 prev.setSampleLabel("Label");
设置样本结果的标签。
prev - (SampleResult) - gives access to the previous SampleResult
Migration to JSR223 PostProcessor+Groovy is highly recommended for performance, support of new Java features and limited maintenance of the BeanShell library
添加调试 Post 处理器以通过视图结果树查看 JMeter 变量。
Sample test plan (JMX) 在 GitHub 可用。
您正在断言中设置一个 Api_Fake_Client_Name
变量值,它将在当前采样器的下一次迭代期间的下一个采样器中可用(更新):
另请注意,从 JMeter 3.1 开始,您应该使用 JSR223 Test Elements and Groovy language for scripting,因此您可以将代码更改为:
switch (vars.get('status')) {
case '500':
prev.setResponseCodeOK()
prev.setSuccessful(true)
vars.put('Api_Fake_Client_Name', 'FAKE_CLIENT_RETRY');
prev.setSampleLabel('FAKE_CLIENT_RETRY')
break;
case 'ERROR':
prev.setSuccessful(false)
vars.put('Api_Fake_Client_Name', 'FAKE_CLIENT_CALLBACK_ERROR')
prev.setSampleLabel('FAKE_CLIENT_CALLBACK_ERROR')
break;
default:
vars.put('Api_Fake_Client_Name', 'FAKE_CLIENT_CALLBACK_SUCESS')
prev.setSampleLabel('FAKE_CLIENT_CALLBACK_SUCESS')
}
更多信息: