未定义变量时获取空响应数据
Get empty response data when variable not defined
我尝试使用以下代码来检查 HTTP Request
的响应,它由 Module Controller
从另一个 Thread Group
调用。
File myfile = new File(FileServer.resolveBaseRelativeName("results/" + filen + "-report.xml"));
if(${__isVarDefined(vars.get("myvar"))} == true){
FileUtils.writeByteArrayToFile(myfile,bytes);
} else {
FileUtils.writeStringToFile(myfile, prev.getResponseDataAsString(), "UTF-8");
}
Empty xml
当myvar
变量为空时创建,它不包含请求的响应数据。
在这两种情况下,您都可以使用 getResponseData() 编写 byte[](并删除函数调用)
if(vars.get("myvar") ! null){
FileUtils.writeByteArrayToFile(myfile, bytes);
} else {
FileUtils.writeByteArrayToFile(myfile, prev.getResponseData());
}
您不能使用 vars
shorthand 从不同的线程组检索值,因为 JMeter 变量是线程的本地变量,因此无法从另一个线程组访问它们。您需要改用 props
。见 documentation:
Properties are not the same as variables. Variables are local to a thread; properties are common to all threads, and need to be referenced using the __P or __property function.
Don't inline JMeter Functions or Variables in Groovy scripts,如果您需要检查变量是否已定义 - 尝试获取它并查看它是否为 null
:
if (vars.get('myvar') != null) {
//the code will be executed if the var is defined
}
查看 The Groovy Templates Cheat Sheet for JMeter for more details 的 Transferring Data and Objects (like List, Maps, Array etc.) Between Samplers and Threads
章。
在绝大多数情况下,它更容易使用 Inter-Thread Communication Plugin
我尝试使用以下代码来检查 HTTP Request
的响应,它由 Module Controller
从另一个 Thread Group
调用。
File myfile = new File(FileServer.resolveBaseRelativeName("results/" + filen + "-report.xml"));
if(${__isVarDefined(vars.get("myvar"))} == true){
FileUtils.writeByteArrayToFile(myfile,bytes);
} else {
FileUtils.writeStringToFile(myfile, prev.getResponseDataAsString(), "UTF-8");
}
Empty xml
当myvar
变量为空时创建,它不包含请求的响应数据。
在这两种情况下,您都可以使用 getResponseData() 编写 byte[](并删除函数调用)
if(vars.get("myvar") ! null){
FileUtils.writeByteArrayToFile(myfile, bytes);
} else {
FileUtils.writeByteArrayToFile(myfile, prev.getResponseData());
}
您不能使用
vars
shorthand 从不同的线程组检索值,因为 JMeter 变量是线程的本地变量,因此无法从另一个线程组访问它们。您需要改用props
。见 documentation:Properties are not the same as variables. Variables are local to a thread; properties are common to all threads, and need to be referenced using the __P or __property function.
Don't inline JMeter Functions or Variables in Groovy scripts,如果您需要检查变量是否已定义 - 尝试获取它并查看它是否为
null
:if (vars.get('myvar') != null) { //the code will be executed if the var is defined }
查看 The Groovy Templates Cheat Sheet for JMeter for more details 的 Transferring Data and Objects (like List, Maps, Array etc.) Between Samplers and Threads
章。
在绝大多数情况下,它更容易使用 Inter-Thread Communication Plugin