Jmeter,用于变量的Groovy JSON slurper

时间:2018-08-23 06:47:43

标签: json groovy jmeter

我最近刚刚读到,使用vars.get("variable")比使用${variable}更有效。我有使用后者的经验,但是会导致错误,但是我已经设法解决了这个问题,以便不再发生错误(由于这里不是我的问题,所以我不再讨论了)。这是代码的一部分:

import groovy.json.JsonSlurper;

String response = prev.getResponseDataAsString();

def jsonSlurper = new JsonSlurper();
def json = jsonSlurper.parseText(response);

if (json.data.target_list) {
    Random random = new Random();

    String[] strLeadDBIDList = json.data.target_list.keySet();
    int idxLeadDBID = random.nextInt(strLeadDBIDList.length);
    String strLeadDBID = strLeadDBIDList[idxLeadDBID];
    log.info("Leads Dashboard - Customer ID: " + strLeadDBID);
    vars.put("strLeadDBID",strLeadDBID);

    String strLeadDBModule = json.data.target_list."${strLeadDBID}".parent_type;
    log.info("Leads Dashboard - Customer Type: " + strLeadDBModule);
    vars.put("strLeadDBModule",strLeadDBModule);
...

所以我的问题是,有没有办法在vars.get("strLeadDBID")代码中使用"${strLeadDBID}"而不是String strLeadDBModule = json.data.target_list."${strLeadDBID}".parent_type;?或者我可以改用变量strLeadDBID,如何使用?谢谢!!!

1 个答案:

答案 0 :(得分:0)

我希望它会是这样的:

String strLeadDBModule = json.data.target_list.get(vars.get("strLeadDBID")).parent_type;

如果它不起作用,请执行以下操作:

log.info('Target list class name: ' + json.data.target_list.getClass().getName()))

,然后在 jmeter.log 文件中查找相关行。然后在Groovy GDK API documentation中为给定的类检查JavaDoc并寻找合适的函数。

也按照JSR223 Sampler documentation

  

使用此功能时,请确保您的脚本代码不直接在脚本代码中使用JMeter变量,因为缓存将仅缓存第一次替换。 代替使用脚本参数

您可以尝试以下设置:

JMeter Groovy Parameters

查看Apache Groovy - Why and How You Should Use It文章,以获得有关在JMeter测试中使用Groovy脚本的更多提示