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

时间:2019-03-26 09:36:11

标签: groovy jmeter jsr223

我尝试使用以下代码检查HTTP Request的响应,该响应由Thread Group从另一个Module Controller调用。

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");
}

xml是在myvar变量为空时创建的,它不包含请求的响应数据。

2 个答案:

答案 0 :(得分:1)

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

1: const f = <K>(k: K) => <V>(v: V) => (array: Array<{ [k]: K, [v]: V }>) =>
                                                        ^ Cannot use `K` as a type because `K` is a value. To get the type of a value use `typeof`

答案 1 :(得分:1)

  1. 由于JMeter变量在线程本地,因此不能使用vars速记来从其他线程组中检索值,因此无法从另一个线程组访问它们。您需要改用props。参见documentation

      

    属性与变量不同。变量是线程本地的;属性是所有线程共有的,需要使用__P或__property函数进行引用。

  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

更容易