我想使用BeanShell PreProcessor将一个JSON对象发送到JMeter中的HTTP Request主体。要建模JSON对象,我使用的是java代码(带有一些业务逻辑)。因此我创建了一个BeanShell PreProcessor并编写了如下的java代码,
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
String key="testKey";
int lastID=5548;
int totalCount=198;
JSONObject obj1 = new JSONObject();
JSONArray obj2 = new JSONArray();
for (int i=1;i<=totalCount;i++)
{
JSONObject item = new JSONObject();
item.put("taskId", Integer.toString(lastID+i));
item.put("taskOrder",1);
item.put("snapshotTemplateKey",key);
obj2.put(item);
obj1.put("changeControlTasks", obj2);
obj1.put("ccName","Eleven" );
obj1.put("snapshotTemplateKey",key);
}
log.info(obj1);
vars.putObject("jsonData",obj1);
在HTTP请求正文中,我试图按如下方式获取数据,
${jsonData}
使用上面的代码,它抛出以下共享错误
请求:
POST data:
${jsonData}
日志错误:
2017/08/06 07:27:10 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval
Sourced file: inline evaluation of: ``import org.json.JSONArray; import org.json.JSONException;
import org.json.JSONOb . . . '' : Error in method invocation: Method info( ) not found in class'org.apache.log.Logger'
任何人都可以提出上述代码的问题以及解决方法。
任何建议或解决方案也将受到赞赏。
答案 0 :(得分:1)
obj2保存数据。使用ABCDConfig.cmake
代替obj2
:
obj1
用于日志转换为“转发”
vars.putObject("jsonData",obj2);
答案 1 :(得分:0)
你的Beanshell无法正常工作,因为它会在这一行失败:
log.info(obj1);
因为您将无法将JSON对象打印到日志中
Beanshell is not the best scripting option,当您使用大量线程运行测试时,此功能将成为瓶颈,您应该考虑切换到JSR223 PreProcessor和Groovy语言。 Groovy has built-in JSON support和its performance is much better可以编译和缓存表现良好的Groovy脚本。替换Groovy代码就像:
import groovy.json.JsonBuilder
def key = 'testKey'
def lastID = 5548
def totalCount = 198
JsonBuilder builder = new JsonBuilder()
def array = []
1.upto(totalCount, {
def taskId = (lastID + "${it}".toInteger())
array << [getKey: { key }, getTaskId: { taskId }, getTaskOrder: { 1 }]
})
builder(
{
changeControlTasks array.collect() {
[
"snapshotTemplateKey": it.getKey(),
"taskId" : it.getTaskId(),
"taskOrder" : it.getTaskOrder()
]
}
snapshotTemplateKey "testKey"
ccName "Eleven"
}
)
vars.put('jsonData', builder.toPrettyString())