gpt4 book ai didi

json - 将 json 文件读取为 json 字符串并在 jsr223 采样器中提取数据,groovy 作为 jmeter 中的语言

转载 作者:行者123 更新时间:2023-11-28 21:20:09 29 4
gpt4 key购买 nike

import com.jayway.jsonpath.JsonPath

def pathToRead = someFilePath;
def pathToWrite = someOtherFilePath;

def newLine = System.getProperty('line.separator')
def index = [];
def randoms = [];
def temp;

//generating random numbers
def size = new File(pathToRead + "index.csv").readLines().size();
for(int i=0; i<vars.get('extractCount'); i++)
{
randoms << org.apache.commons.lang3.RandomUtils.nextInt(0, size-1);
}

//Reading file names to extract data
File file = new File(pathToRead + "index.csv");
file.each { line ->
index << line
}

def nameCSV = new File(pathToWrite + 'name.csv')
def nameGivenCSV = new File(pathToWrite + 'given.csv')
def givenList = []
def nameFamilyCSV = new File(pathToWrite + 'family.csv')
def familyList = []

//going through each json file and extracting data and storing in lists
randoms.unique().each { random ->
jsonString = new groovy.json.JsonSlurper().parseText(new File(pathToRead + "Data/fhir/" + index.getAt(random)).text);
def names = JsonPath.read(jsonString, '$..name')
names.each { name ->
name.each { subName ->
subName.get('given').each { givenName ->
if(givenName != null)
givenList << givenName
}

temp = subName.get('family')
if(temp != null)
familyList << temp
}
}
}


//Writing data to files after removing the duplicates
givenList.unique().each { single_given ->
nameCSV << single_given << newLine
nameGivenCSV << single_given << newLine
}
familyList.unique().each { single_family ->
nameCSV << single_family << newLine
nameFamilyCSV << single_family << newLine
}

这是给出错误的说法JSR223 脚本 ExtractRandomData 中的问题,消息:javax.script.ScriptException:groovy.lang.MissingMethodException:没有方法签名:java.lang.String.get() 适用于参数类型:(java.lang.String) 值:[给出]

这意味着它不允许我申请 subName.get('given');

文件中的json数据是这样的

"name": [
{
"use": "official",
"family": "Cortez851",
"given": [
"Benito209"
],
"prefix": [
"Mr."
]
}
]

最佳答案

您的代码与您提供的 JSON 数据相匹配,应该可以正常工作。但是,查看某些文件的结构不同的错误。

您可以通过显式检查正在使用的 subname 的类型来解决这个问题 instanceof运营商喜欢:

names.each { name ->
name.each { subName ->
if (subName instanceof Map) {
subName.get('given').each { givenName ->
if (givenName != null)
givenList << givenName
}
} else if (subName instanceof String) {
givenList << subName
} else {
log.error('Expected Map or String, got' + subName.getClass().getName())
}


temp = subName.get('family')
if (temp != null)
familyList << temp
}
}

演示:

enter image description here

其他改进:

  1. 您似乎没有使用 JsonSlurper完全可以简化这一行:

    jsonString = new groovy.json.JsonSlurper().parseText(new File(pathToRead + "Data/fhir/" + index.getAt(random)).text);

    这一个 jsonString = new File(pathToRead + "Data/fhir/"+ index.getAt(random)).text

  2. 此行永远不会访问 index.csv

    中的最后一个值
    randoms << org.apache.commons.lang3.RandomUtils.nextInt(0, size-1);

    你应该把它改成

    randoms << org.apache.commons.lang3.RandomUtils.nextInt(0, size);
  3. 您可以将您的代码放在全局 try block 中并在失败时将有问题的 JSON 打印到 jmeter.log 文件中

更多信息:

关于json - 将 json 文件读取为 json 字符串并在 jsr223 采样器中提取数据,groovy 作为 jmeter 中的语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53166110/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com