未定义变量时获取空响应数据

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 xmlmyvar 变量为空时创建,它不包含请求的响应数据。

在这两种情况下,您都可以使用 getResponseData() 编写 byte[](并删除函数调用)

if(vars.get("myvar") ! null){
    FileUtils.writeByteArrayToFile(myfile, bytes);
} else {
    FileUtils.writeByteArrayToFile(myfile, prev.getResponseData());
}
  1. 您不能使用 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.

  2. 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 detailsTransferring Data and Objects (like List, Maps, Array etc.) Between Samplers and Threads 章。


在绝大多数情况下,它更容易使用 Inter-Thread Communication Plugin